(57)【特許請求の範囲】
【請求項１】
計器を用いて分散された処理を実行する方法であって、
前記計器上にインストールされた技術計算クライアントを用いて１つ又は複数のタスクを含むジョブを生成する段階と、
前記技術計算クライアントが、第２計器上にインストールされネットワークを介して前記計器と通信する１つ又は複数の技術計算ワーカーに前記ジョブを分散する段階と、
前記１つ又は複数の技術計算ワーカーが、前記計器に代わって前記１つ又は複数のタスクのうち少なくとも１つで前記分散された処理を実行する段階と、
前記計器上にインストールされた前記技術計算クライアントが、前記１つ又は複数の技術計算ワーカーから前記分散された処理に関連付けられた実行結果を受け取る段階とを含み、
前記計器および前記第２計器が、計器に直接接続されたテスト対象ユニットに関連した測定値を受け取り、測定を直接実行し、前記測定値に基づいて前記技術計算クライアント又はユーザと測定情報を交換する計装機能を含み、
前記計器及び前記第２計器は、前記計装機能によりテスト対象ユニットの測定を実行し、
前記計器は、前記技術計算クライアントによる前記ジョブの生成と、前記計装機能による前記測定の実行とを共にサポートし、
前記第２計器は、前記技術計算ワーカーによる前記分散された処理の実行と、前記計装機能による前記測定の実行とを共にサポートする、方法。
【請求項２】
前記計器がテスト環境で使用され、前記ジョブが前記テスト対象ユニットをテストするためのタスクを含む、請求項1に記載の方法。
【請求項３】
前記計器が前記テスト環境において、前記テスト対象ユニットの測定、分析、検証、及び妥当性確認を促進するために使用される、請求項2に記載の方法。
【請求項４】
分散する前記段階が、前記1つ又は複数の技術計算ワーカーに配列を分散する段階を含み、
前記受け取る段階が、前記分散された配列の少なくとも一部に関連した情報を含む前記実行結果を受け取る段階を含む、請求項1に記載の方法。
【請求項５】
配列を分散する前記段階が、前記配列を1つ又は複数の次元に沿って複数部分に分散する段階を含む、請求項4に記載の方法。
【請求項６】
前記分散された配列の少なくとも一部がキャッシュメモリに入れられる、請求項4に記載の方法。
【請求項７】
分散する前記段階が、前記計器で動作するプログラミング言語に関連したキーワードの識別に基づいて行われる、請求項1に記載の方法。
【請求項８】
分散する前記段階が前記1つ又は複数のタスクを促進する、請求項1に記載の方法。
【請求項９】
前記分散された処理を実行している時又は一時停止した時は、テスト機能、測定機能、又は自動化機能と対話する段階を更に含む、請求項1に記載の方法。
【請求項１０】
前記分散された処理を実行する段階が、組み込み言語ステートメントの解釈に応答して実行される、請求項1に記載の方法。
【請求項１１】
前記ジョブを分散する前記段階が、配列を分散する段階と、前記分散されたジョブを処理する技術計算ワーカーのために別個の反復子に分解可能な反復子を与える段階とを含む、請求項1に記載の方法。
【請求項１２】
前記配列が、分解アルゴリズムを前記配列の次元に適用することで分散される、請求項11に記載の方法。
【請求項１３】
前記分散されたジョブを処理する技術計算ワーカーの処理idすなわちpidを識別する段階を更に含む、請求項11に記載の方法。
【請求項１４】
前記分散されたジョブに関連付けられた技術計算ワーカーに部分行列を生成する段階を更に含む、請求項11に記載の方法。
【請求項１５】
列に基づく写像、行に基づく写像、又は任意写像を用いて、前記分散された配列を前記1つ又は複数の技術計算ワーカーに写像する段階を更に含む、請求項11に記載の方法。
【請求項１６】
前記1つ又は複数の技術計算ワーカーのうち1つは、前記1つ又は複数の技術計算ワーカーのうち該1つのワーカーのローカル部分の要素に関する演算を行い、前記1つ又は複数の技術計算ワーカーのうち該1つのワーカーは、複雑な演算を実行するには別の技術計算ワーカーと通信する、請求項1に記載の方法。
【請求項１７】
技術計算ワーカーにおいて反復が行われる、請求項16に記載の方法。
【請求項１８】
技術計算ワーカー間で交換されるメッセージの数は、前記技術計算クライアントに関連付けられた技術計算ワーカーの数に比例する、請求項1に記載の方法。
【請求項１９】
前記技術計算クライアント又は前記1つ又は複数の技術計算ワーカーのうち少なくとも1つが、MATLABソフトウェア又はSimulinkソフトウェアとともに動作する、請求項1に記載の方法。
【請求項２０】
計器を用いて分散された処理を実行する方法を実行するための命令を保持したコンピュータ可読媒体であって、
前記計器上にインストールされた技術計算クライアントを用いて1つ又は複数のタスクを含むジョブを生成するための命令と、
前記技術計算クライアントが、第２計器上にインストールされネットワークを介して前記計器と通信する1つ又は複数の技術計算ワーカーに前記ジョブを分散するための命令と、
該1つ又は複数の技術計算ワーカーが、前記計器に代わって前記1つ又は複数のタスクのうち少なくとも1つで前記分散された処理を実行するための命令と、
前記計器上にインストールされた前記技術計算クライアントが、前記1つ又は複数の技術計算ワーカーから前記分散処理に関連付けられた実行結果を受け取るための命令とを含み、
前記計器および前記第２計器が、計器に直接接続されたテスト対象ユニットに関連した測定値を受け取り、測定を直接実行し、前記測定値に基づいて前記技術計算クライアント又はユーザと測定情報を交換する計装機能を含み、
前記計器及び前記第２計器は、前記計装機能によりテスト対象ユニットの測定を実行し、
前記計器は、前記技術計算クライアントによる前記ジョブの生成と、前記計装機能による前記測定の実行とを共にサポートし、
前記第２計器は、前記技術計算ワーカーによる前記分散された処理の実行と、前記計装機能による前記測定の実行とを共にサポートする、コンピュータ可読媒体。
【請求項２１】
前記計器がテスト環境で使用され、前記ジョブが前記テスト対象ユニットをテストするためのタスクを含む、請求項20に記載のコンピュータ可読媒体。
【請求項２２】
前記計器が前記テスト環境において、前記テスト対象ユニットの測定、分析、検証、及び妥当性確認を促進するために使用される、請求項21に記載のコンピュータ可読媒体。
【請求項２３】
分散するための前記命令が、前記1つ又は複数の技術計算ワーカーに配列を分散するための命令を含み、
受け取るための前記命令が、前記分散された配列の少なくとも一部に関連した情報を含む前記実行結果を受け取るための命令を含む、請求項20に記載のコンピュータ可読媒体。
【請求項２４】
配列を分散するための前記命令が、前記配列を行又は列を含む複数部分に分散するための命令を含む、請求項23に記載のコンピュータ可読媒体。
【請求項２５】
前記分散された配列の少なくとも一部がキャッシュメモリに入れられる、請求項23に記載のコンピュータ可読媒体。
【請求項２６】
分散するための前記命令が、前記計器で動作するプログラミング言語に関連したキーワードの識別に基づいて行われる、請求項20に記載のコンピュータ可読媒体。
【請求項２７】
分散するための前記命令が、前記1つ又は複数のタスクを促進する、請求項20に記載のコンピュータ可読媒体。
【請求項２８】
前記分散された処理を実行している時又は一時停止した時は、テスト機能、測定機能、又は自動化機能と対話するための命令を更に含む、請求項20に記載のコンピュータ可読媒体。
【請求項２９】
前記分散された処理を実行するための前記命令が、組み込み言語ステートメントの解釈に応答して実行される、請求項20に記載のコンピュータ可読媒体。
【請求項３０】
前記ジョブを分散するための前記命令が、配列を分散するための命令と、前記分散されたジョブを処理する技術計算ワーカーのために別個の反復子に分解可能な反復子を与えるための命令とを含む、請求項20に記載のコンピュータ可読媒体。
【請求項３１】
前記配列が、分解アルゴリズムを前記配列の次元に適用することで分散される、請求項30に記載のコンピュータ可読媒体。
【請求項３２】
前記分散されたジョブを処理する技術計算ワーカーの処理idすなわちpidを識別するための命令を更に含む、請求項30に記載のコンピュータ可読媒体。
【請求項３３】
前記分散されたジョブに関連付けられた技術計算ワーカーに部分行列を生成するための命令を更に含む、請求項30に記載のコンピュータ可読媒体。
【請求項３４】
列に基づく写像、行に基づく写像、又は任意写像を用いて、前記分散配列を前記1つ又は複数の技術計算ワーカーに写像するための命令を更に含む、請求項30に記載のコンピュータ可読媒体。
【請求項３５】
前記1つ又は複数の技術計算ワーカーのうち1つは、前記1つ又は複数の技術計算ワーカーのうち該1つのワーカーのローカル部分の要素に関する演算を行い、前記1つ又は複数の技術計算ワーカーのうち該1つのワーカーは、複雑な演算を実行するには別の技術計算ワーカーと通信する、請求項20に記載のコンピュータ可読媒体。
【請求項３６】
技術計算ワーカーにおいて反復が行われる、請求項20に記載のコンピュータ可読媒体。
【請求項３７】
技術計算ワーカー間で交換されるメッセージの数は、前記技術計算クライアントに関連付けられた技術計算ワーカーの数に比例する、請求項20に記載のコンピュータ可読媒体。
【請求項３８】
前記技術計算クライアント又は前記1つ又は複数の技術計算ワーカーのうち少なくとも1つが、MATLAB互換ソフトウェア又はSimulink互換ソフトウェアとともに動作する、請求項20に記載のコンピュータ可読媒体。
【請求項３９】
１つ又は複数の技術計算ワーカーを用いて分散された処理をサポートする計器であって、
１つ又は複数のタスクを含むジョブを生成する技術計算クライアントと、
前記計器に直接接続されたテスト対象ユニットに関連した測定値を受け取り、測定を直接実行し、前記測定値に基づいて前記技術計算クライアント又はユーザと測定情報を交換する計装機能とを備え、
前記技術計算クライアントが、
前記１つ又は複数のタスクを含むジョブを第２計器上にインストールされた前記１つ又は複数の技術計算ワーカーにネットワークを介して分散し、
前記１つ又は複数の技術計算ワーカーにより前記１つ又は複数のタスクに関して実行された分散処理に対応する１つ又は複数の実行結果を前記第２計器から受け取り、
前記１つ又は複数の実行結果内の情報に基づいて前記第２計器に代わって演算を実行する、計器。
【請求項４０】
前記技術計算クライアントが1つ又は複数の他の計器で動作する、請求項39に記載の計器。
【請求項４１】
前記ジョブが配列を含み、該配列が1つ又は複数の技術計算ワーカーに分散される、請求項39に記載の計器。
【請求項４２】
前記1つ又は複数の技術計算ワーカーのうち少なくとも1つが、前記分散された配列の1列か、前記分散された配列の1行か、前記1つ又は複数の技術計算ワーカーへの任意分散により決定される前記分散された配列の一部かに演算をおこなう、請求項41に記載の計器。
【請求項４３】
前記計器又は前記1つ又は複数の技術計算ワーカーがインストールされた1つ又は複数の前記第２計器は、分散された配列の一部を処理する際に使用するキャッシュを含む、請求項39に記載の計器。
【請求項４４】
前記計器又は前記第２計器は、該計器で生じる分散配列で使用する処理情報を識別するキーワードを用いるオペレーティングシステムを使用する、請求項39に記載の計器。
【請求項４５】
前記技術計算クライアントは写像処理を行って、分散配列の複数部分を前記1つ又は複数の技術計算ワーカーのうち少なくとも1つに写像する、請求項39に記載の計器。
【請求項４６】
前記少なくとも1つの技術計算ワーカーのうち少なくとも1つは前記ネットワークでサブクラスタに配列されている、請求項39に記載の計器。
【請求項４７】
前記計器又は前記第２計器は、MATLABソフトウェア又はSimulinkソフトウェアを含む、請求項39に記載の計器。
【発明の詳細な説明】
【背景技術】
【０００１】
本願は、その内容を引用して本明細書に援用する2005年12月12日付けの米国特許出願第11/301,061号の利益を主張する。米国特許出願第11/301,061号は、2004年12月30日付けで提出された「DISTRIBUTED
SYSTEMS IN TEST ENVIRONMENT（テスト環境における分散形システム）」（米国特許出願第11/028171号）と題した現在係属中の米国特許出願の一部継続出願であり、米国特許出願第11/028171号は、2004年7月21日付けで提出された「METHODS
AND SYSTEM FOR DISTRIBUTING TECHNICAL COMPUTING TASKS TO TECHNICAL COMPUTING
WORKERS（技術計算タスクを技術計算ワーカーへ分散する方法及びシステム）」（米国特許出願第10/896784号）と題した現在係属中の米国特許出願と、2004年8月24日付けで提出された「TEST
MANAGER FOR INTEGRATED TEST ENVIRONMENTS（統合テスト環境のためのテストマネージャ）」（米国特許出願第10/925,413号）との一部継続出願である。
【技術分野】
【０００２】
本発明は一般に分散計算環境に関し、より詳細には、こうした分散計算環境におけるデータの測定、分析、検証、及び妥当性確認を促進する、計器に基づく(原語：instrument-based)分散計算システムを提供するための方法、システム、並びに媒体に関する。
【０００３】
背景情報
MATLAB（登録商標）は、多様な産業分野にわたる技術者、科学者、数学者、及び教育者に技術的計算を応用するための環境を提供するマサチューセッツ州ナティック所在のThe MathWorks社の製品である。MATLAB（登録商標）は、数理計算、データ解析、視覚化、及びアルゴリズム開発用の数学的ツール及びグラフィカルツールを提供する直感的且つ高性能の言語及び技術計算環境である。MATLAB（登録商標）は、数値解析、行列計算、信号処理、及びグラフィックを使い勝手がよい環境で統合するものであり、この環境では問題と解が伝統的なプログラミングを用いることなく親しみがある数学的表記法で表現される。MATLAB（登録商標）は複雑な工学及び科学問題を解くために用いられ、その際に問題をシミュレートする数学モデルを構築することで解を得る。モデルは、多数の境界条件、データパラメータ、又は幾つかの初期推測の下で当該モデルを実行することでプロトタイプ化し、テストし、分析する。MATLAB（登録商標）では、こうしたモデルを容易に修正し、新たな変数をプロットし、或いは当該問題を迅速な対話型方式で再処理したりできる。これはFortranやC等の非解釈プログラミングでは一般的には不可能である。
【０００４】
デスクトップアプリケーションとしてMATLAB（登録商標）を使えば、科学者や技術者は慣れ親しんだワークステーション環境で複雑な分析やモデリングを直感的に実行できる。多くの工学及び科学問題がより大規模且つ複雑なモデリングを必要とするに従って、計算もより多くの資源及び時間を必要とするようになる。しかし、単一ワークステーションの計算機能力と、複雑な問題の計算集約的な反復処理を実行するために必要な計算機能力との関係により、単一ワークステーションが解くことができる問題の大きさに限りがある場合がある。例えば、大規模で複雑な航空機モデルのシミュレーションは、特定組のパラメータを備えた単一計算で実行するにはそれなりの時間がかかる。しかし、この問題の分析には、異なる組のパラメータ（例えば、100の異なる高度レベル及び50の異なる航空機重量）を用いて複数回にわたりモデルを計算しなければならない場合があり、これは様々な条件下でのモデルの挙動を理解するには必要となることがある。望み通りに問題を分析するには5000回の計算が必要であり、単一のコンピュータでこれらのシミュレーションを実行するには望ましくない過度の時間がかかってしまうはずである。従って、計算があまりに大規模で複雑になったために単一のコンピュータ上で無理のない時間で完了できなくなれば、分散形方式で計算を行うのが好ましい。具体的には、幾つかの計器がパーソナル・コンピュータに基づくプラットフォームには設けられ、付加的なソフトウェアを実行する能力が備わっているので、大規模な計算を分散的方式で実行するためにこれら計器を使用することが好ましい。
【０００５】
発明の概要
本発明は、分散計算環境におけるデータの測定、分析、検証、及び妥当性確認を促進する、計器に基づいた分散計算システムを提供する。本発明では、前記計器に基づいた分散システムを用いることで、大規模の計算ジョブを分散的な様態で実行できる。前記計器に基づく分散計算システムは、ジョブを作成するクライアントを含むことができる。前記ジョブは１つ又複数のタスクを含む。前記クライアントは、前記ジョブの分散実行のため、前記ジョブの一部を1つ又は複数のリモートワーカーに分散できる。前記クライアントは計器内に存在していてもよい。又、前記ワーカーも計器内に存在していてもよい。前記ワーカーは前記ジョブの受信した部分を実行し、実行結果を前記クライアントに返すことができる。従って、本発明によって、ネットワークにおいて計器に基づいた分散システムを使用することで、前記ジョブを遂行し、前記ジョブの実行のための時間の減少を促進できる。
【０００６】
本発明の一様態によれば、ジョブを分散様態で実行する方法が提供される。この方法は、計算環境を与える計算クライアントを計器内にインストールする段階を含む。この方法は、前記計算クライアントに、1つ又は複数のタスクを含むジョブを前記計算環境で生成させる段階を更に含む。この方法は、前記ジョブの分散実行のために前記ジョブをリモート計算ワーカーに分散する段階を更に含む。
【０００７】
本発明の別の様態によれば、ジョブを分散様態で実行する方法が提供される。この方法は、計算環境を与える計算ワーカーを前記計器内にインストールする段階を含む。この方法は、リモートクライアントにより生成された1つ又は複数のタスクを含むジョブの一部を受け取る段階を更に含む。この方法は、前記計算ワーカーに前記ジョブの前記受け取った一部を実行させ、実行結果を前記リモートクライアントに戻す段階を更に含む。
【０００８】
本発明の別の様態によれば、計算環境においてジョブを分散様態で実行するシステムが提供される。このシステムは、1つ又は複数のタスクを含むジョブを生成する第1計器を含む。更に、このシステムは、前記ジョブの一部を受け取ると共に、前記ジョブの前記受け取った一部を実行して実行結果を得る第2計器も含み、該第2計器は前記実行結果を前記第1計器に返す。
【０００９】
本発明の別の様態によれば、計器内で実行可能な命令であって、ジョブを分散様態で実行する方法に関する命令を保持する媒体が提供される。この方法は、計算環境を与える計算クライアントを前記計器内にインストールする段階を含む。この方法は、前記計算クライアントに、1つ又は複数のタスクを含むジョブを前記計算環境で生成させる段階を更に含む。この方法は、前記ジョブの分散実行のために前記ジョブをリモート計算ワーカーに分散する段階を更に含む。
【００１０】
本発明の別の様態によれば、計器内で実行可能な命令であって、ジョブを分散様態で実行する方法に関する命令を保持する媒体が提供される。この方法は、計算環境を与える計算クライアントを前記計器内にインストールする段階を含む。この方法は、リモートクライアントにより生成された1つ又は複数のタスクを含むジョブの一部を受け取る段階を更に含む。この方法は、前記計算ワーカーに前記ジョブの前記受け取った一部を実行させ、実行結果を前記リモートクライアントに戻す段階を更に含む。
【００１１】
本発明の様々な実施形態の詳細は、添付の図面及び以下の説明に記載されている。本発明のその他の特徴及び利点は、次の説明、図面、及び特許請求の範囲から明らかとなるはずである。
【発明を実施するための最良の形態】
【００１２】
本発明の幾つかの実施形態を以下に説明する。しかし、本発明はこれら実施形態に限定されるものでなく、本明細書に明示された内容への追加及び修正が本発明の範囲に含まれるよう意図されていることは注目すべきである。さらに、本明細書に記載された様々な実施形態の特徴は互いに排他的でなく、様々な順列や組合せが明示されていなくても本発明の精神及び範囲から逸脱することなく、本発明はこれら順列や組合せで共存可能であることは理解すべきである。
【００１３】
本発明の例示的な実施形態は、ユーザがジョブを分散方式で実行できるようにする分散計算環境を提供する。特に、本発明の例示的な実施形態は、1つ又は複数の計器を上記ジョブの分散形実行に使用する計器に基づく分散計算システムを提供する。この計器に基づく分散計算システムは、ジョブを作成するクライアントを含むことができる。クライアントは、ジョブを分散実行するため、ジョブの一部を1つ又は複数のリモートワーカーに分散できる。クライアントは計器内に備わっていてもよい。又、ワーカも計器内に備わっていてもよい。リモートワーカーはジョブの一部を実行し、実行結果をクライアントに返す。ワーカーを走らせる計器は、ジョブの実行を促進する能力を備えることができる。例えば、こうした計器は、高速フーリエ変換計算などの高速計算を実行するために、書替え可能ゲートアレイ、特定用途向けIC、ディジタル信号プロセッサ、及びCPUなどのハードウェア構成要素を含んでもよい。従って、本発明の例示的実施形態は、計器に基づく分散計算システムを用いて分散形様態でジョブを実行する。本発明の例示的な実施形態は、ジョブの分散形実行のために技術計算クライアントと技術計算ワーカーとを利用するが、これについては後に詳述する。
【００１４】
A.   技術計算クライアント及び技術計算ワーカー
本発明の例示的な実施形態は、多数のコンピュータシステム上で複数の技術計算タスクを実行するため、当該タスクを技術計算クライアントから複数のリモート技術計算ワーカーに動的分散可能とする。タスクは技術計算クライアントで宣言し、付加的にジョブの中に編成できる。ジョブとはアクティビティの論理単位、すなわちひとまとまりで処理或いは／管理されるタスクである。タスクはMATLAB（登録商標）コマンドのような実行すべき技術計算コマンドと、引数の数と、引数への任意入力データとを定義する。ジョブとは1つ又は複数タスクのグループである。タスクは、技術計算クライアントが1つ又は複数の技術計算ワーカーに直接分散できる。技術計算ワーカーはタスクに技術計算を行い、結果を技術計算クライアントに返すことができる。
【００１５】
更に、ジョブにおける1つのタスク又は複数タスクからなるグループを自動タスク分散機構に提出し、これら1つ又は複数のタスクを、技術計算サービスを提供する1つ又は複数の技術計算ワーカーに自動的に分散させてもよい。タスクが技術計算ワーカーに分散され、その技術計算ワーカーにより計算されるようにするために、技術計算クライアントは技術計算ワーカーを特定する必要も、それを知っている必要もない。自動タスク分散機構は、技術計算クライアントには匿名の技術計算ワーカーにタスクを分散できる。技術計算ワーカーはこのタスクを実行し、そのタスク実行から得られた出力データを実行結果として返すことができる。この結果は自動タスク分散機構に返され、次にこの機構がその結果を技術計算クライアントに提供すればよい。
【００１６】
更に、例示的な実施形態は、技術計算環境にオブジェクト指向インターフェースを設けて、タスク又はジョブを、自動タスク分散機構を介して1つ又は複数の技術計算ワーカーに直接的又は間接的に分散可能とする。このオブジェクト指向インターフェースは、技術計算ワーカーによって処理されるタスクを技術計算クライアントが分散するためのプログラミングインターフェースを提供する。
【００１７】
例示的な実施形態は、MATLAB（登録商標）に基づいた分散技術計算環境に関連して例示的な目的のみで説明する。この例示的実施形態はＭＡＴＬＡＢ（登録商標）に基づいた応用例に関連して説明するが、本発明を他の技術計算環境（例えば、National
Instruments社からのLabVIEW（登録商標）若しくはMATRIXx、Wolfram Research社からのMathematica（登録商標）、Mathsoft
Engineering & Education社からのMathcad、又はWaterloo Maple社の一部門であるMaplesoftからのMaple（商標）など）における技術計算タスクの処理の分散に適用できることは、通常の技能を備えた当業者であれば理解するはずである。
【００１８】
本発明の例示的な実施形態は、多数のコンピュータシステム上で複数タスクの実行に関し、技術計算クライアントから複数のリモート技術計算ワーカーへの当該タスクのテストを分散形様態で実行可能とする。タスクは技術計算クライアントで宣言し、付加的にジョブの中に編成できる。ジョブとはアクティビティの論理単位、すなわち、ひとまとまりで処理或いは／管理されるタスクである。タスクはMATLAB（登録商標）コマンドのような実行すべき技術計算コマンドと、引数の数と、引数への任意入力データとを定義する。ジョブとは1つ又は複数タスクのグループである。タスクは、技術計算クライアントが1つ又は複数の技術計算ワーカーに直接的に分散できる。技術計算ワーカーはタスクに技術計算を行い、結果を技術計算クライアントに返すことができる。
【００１９】
更に、ジョブにおける1つのタスク又は複数タスクからなるグループを自動タスク分散機構に提出して、これら1つ又は複数のタスクを、技術計算サービスを提供する1つ又は複数の技術計算ワーカーまで自動的に分散させてもよい。タスクが技術計算ワーカーに分散され、その技術計算ワーカーにより計算されるようにするには、技術計算クライアントは技術計算ワーカーを特定する必要も、それを知っている必要もない。自動タスク分散機構は、技術計算クライアントには匿名の技術計算ワーカーにタスクを分散できる。技術計算ワーカーはこのタスクを実行し、そのタスク実行から生成された出力データを実行結果として返すことができる。この結果は自動タスク分散機構に返され、次にこの機構がそれを技術計算クライアントに提供すればよい。
【００２０】
更に、例示的な実施形態は、技術計算環境にオブジェクト指向インターフェースを設けて、タスク又はジョブを、自動タスク分散機構を介して1つ又は複数の技術計算ワーカーに直接的又は間接的に分散可能とする。このオブジェクト指向インターフェースは、技術計算ワーカーによって処理されるタスクを、技術計算クライアントが分散するためのプログラミングインターフェースを提供する。
【００２１】
図1Aは、本発明の例示的な実施形態を実施するのに適した環境を示す。この環境は、本発明の一実施形態によるソフトウェアが記憶されたメモリ106と、このメモリ106内に記憶されたソフトウェアを実行するプロセッサ(CPU)104と、システムハードウェアを制御する他のプログラムとを備えた計算装置102を含む。メモリ106は、コンピュータシステム・メモリ又はDRAM、SRAM、EDO
RAMなどのランダムアクセス・メモリを含むことができる。メモリ106は、他の種類のメモリ又はそれらの組合せを含むこともできる。人間のユーザは、コンピュータモニタなどの視覚表示装置114を介して計算装置102と対話できる。計算装置102はグラフィカル・ユーザインタフェース(GUI)を含んでもよい。計算装置102は、キーボード110と例えばマウスなどのポインティング・デバイス112など、ユーザから入力を受け取る他の入出力装置とを含むことができる。随意選択で、キーボード110及びポインティング・デバイス112は視覚表示装置114に接続できる。計算装置102は、他の適切な従来の入出力周辺装置を含むこともできる。計算装置102は、MATLABに基づく分散計算アプリケーション120などのソフトウェア・プログラムを導入するのに適した任意適切な導入媒体116、CD-ROM、フロッピー（登録商標）ディスク、テープ装置、USB装置、ハードドライブ、又は他の任意適切な装置をサポートできる。計算装置102は、オペレーティングシステム及び他の関連したソフトウェアを記憶したり、本発明の一実施形態のMATLAB(登録商標)に基づく分散計算アプリケーション120などのアプリケーション・ソフトウェアプログラムを記憶したりするためのハードドライブ又はCD-ROMなどの記憶装置108を更に含んでもよい。更に、これらオペレーティングシステム及びMATLAB(登録商標)に基づく本発明の分散計算アプリケーション120は、例えばKNOPPIX(登録商標)などのブート可能なCDやGNU/Linux用のブート可能なCDから走らせることができる。
【００２２】
更に、計算装置102はローカルエリア・ネットワーク(LAN)、ワイドエリアネットワーク(WAN)、又はインターネットに、標準電話回線、LAN又はWANリンク(例えば、802.11、T1、T3、56kb、X.25)、ブロードバンド接続(例えば、ISDN、フレームリレー、ATM)、ワイヤレス接続、又は上述のいずれかの組み合わせ或いは全てを介してインターフェースをとるネットワーク・インターフェース118を含むことができる。ネットワーク・インターフェース118は、内蔵式ネットワークアダプタ、ネットワーク・インターフェースカード、PCMCIAネットワークカード、又は通信能力を備えると共にこの計算装置118を、通信能力があり且つ上述の演算を実行できる任意タイプのネットワークとインターフェースをとるのに適したモデム若しくは他の任意装置を含むことができる。更に、計算装置102は、通信能力を備えると共に本明細書に記載した演算を実行するのに必要な処理能力及び記憶容量を備えたワークステーション、デスクトップ・コンピュータ、サーバ、ラップトップ、手持ち式コンピュータ若しくは他の形式の計算装置若しくは通信装置などの任意コンピュータシステムでよい。
【００２３】
図1Aは、本発明の一実施形態のMATLABに基づく分散計算アプリケーション120で、単一計算装置102の独立型システム構成でランする。図1Bは本発明の一実施形態を実施するのに適した別の環境を示し、ここではMATLAB(登録商標)に基づく分散計算アプリケーション120の機能は多数の計算装置(102'、102''、及び102''')に分散されている。概括的に述べると、システム100は、本発明による分散形の技術計算環境のような分散形ソフトウェア・アプリケーションを実行するための多段又はn個段ネットワーク接続コンピュータシステムを表している。システム100は、サーバとも呼ぶサーバコンピュータ160(例えば、第2計算装置102’’)とネットワーク通信チャンネル130を介してネットワーク140上で通信するクライアント150(例えば、第1計算装置102’)を含む。このサーバはネットワーク140’上でワークステーション(例えば第3計算装置102’’’)とネットワーク通信チャンネル130を介して通信する。クライアント150、サーバ160、及びワークステーション170は、標準電話回線、LAN或いはWANリンク(例えば、802.11、T1、T3、56kb、X.25)、ブロードバンド接続(例えば、ISDN、フレームリレー、ATM)、ワイヤレス接続、又は上述のいずれかの組み合わせ或いは全てを介してネットワーク140及び／又は140’に接続130可能である。クライアント150、サーバ160、及びワークステーション170のそれぞれは、上述したような、本明細書で説明する演算を計算する能力があり且つ通信できるようそれぞれ構成された任意タイプの計算装置(102’、102”、102’”)でよい。
【００２４】
一実施形態では、クライアント150、サーバ160、及びワークステーション170は、MATLAB(登録商標)に基づく分散計算アプリケーション120の本発明の少なくとも一部を実行するよう構成され、その能力を備えている。分散形ソフトウェア・アプリケーションとしては、MATLAB(登録商標)に基づく分散計算アプリケーションは、クライアント150、サーバ160、及びワークステーション170のそれぞれでランする1つ又は複数のソフトウェアコンポーネントを備え、互いと通信をとり且つ協働して動作してアプリケーション全体の機能を達成する。例えば、クライアント150は、ブロックダイアグラム・モデルと当該モデルを分析するための技術計算タスクとを指定可能なグラフィックモデリング環境を保持できる。クライアント150は、タスクをサーバ150に提出するよう構成され、その能力を備えたソフトウェアコンポーネントを備えることもできる。クライアント160は、クライアント150により提出されたタスクを受信するよう構成され、その能力を備えたソフトウェアコンポーネントを備えることもできる。こうしたソフトウェアコンポーネントは技術計算を行わせるためタスクを割り当てる先となるワークステーション170を決定するよう構成され、その能力を備えることもできる。ワークステーション170は、サーバ160から割り当てられ且つクライアント150によって提出されたタスクの技術計算を行うための技術計算環境を提供できるソフトウェアコンポーネントを保持できる。要約すれば、MATLAB(登録商標)に基づく分散計算アプリケーション120の技術計算環境及びソフトウェアコンポーネントは、様々なネットワークトポロジ及び構成において1つ又は複数の異なる計算装置上に配置できる。
【００２５】
図2AはMATLAB(登録商標)に基づく分散計算アプリケーション120の構成要素の例示的な一実施形態を示す。概括的に述べると、MATLAB(登録商標)に基づく分散計算アプリケーション120のシステム200は、クライアント150コンピュータ上でランする技術計算クライアントアプリケーション250すなわち技術計算クライアントと、ワークステーション170上でランする技術計算ワーカアプリケーション270又は技術計算ワーカーとを含む2ノード分散システムである。技術計算クライアント250は、ネットワーク140上でネットワーク通信チャンネル130を介して技術計算ワーカー270と通信している。
【００２６】
技術計算クライアント250は、ブロックダイアグラム・モデルを生成する技術計算及びグラフィックモデリング環境を提供し、モデルをシミュレートするための数学的アルゴリズムを定義する技術計算ソフトウェアアプリケーションでよい。技術計算クライアント250はMATLAB（登録商標）に基づくクライアントでよく、これはMATLAB（登録商標）の独立型デスクトップ・アプリケーションが提供する機能の全て又は一部を含むことができる。又、技術計算クライアント250は、MATLAB（登録商標）製品ファミリで利用可能なソフトウェアプログラムの何れかとすることができる。さらに、技術計算クライアント250は、アプリケーションプログラミング・インタフェースなどのインターフェースを介して或いは他の手段によりMATLAB（登録商標）の機能にアクセスする特注ソフトウェアプログラム又は他のソフトウェアとしてもよい。通常の技能を備えた当業者であれば、本システムの機能にアクセスできる幾つかのタイプのクライアントを様々に組合せ可能なことは理解するはずである。
【００２７】
技術計算クライアント250のアプリケーションプログラミング・インタフェース及び／又はプログラミング言語を使って、クライアント・コンピュータ150に対してローカルに位置した、或いはワークステーション270にあるリモートに位置した技術計算環境により実行すべき技術計算タスクを表す関数を定義できる。このローカル技術計算環境は、技術計算クライアント250の一部又はクライアント・コンピュータ150上でランする技術計算ワーカーでよい。後に詳述するが、上述のプログラミング言語は、技術計算環境に分散されるタスクを定義し、そのタスクをワークステーション170上或いはクライアント150上の技術計算ワーカー270に伝達する機構を含んでいる。例えば、技術計算クライアント250は、１０個の数字の無作為の組を生成する関数を宣言し、さらにワークステーション170上でランする技術計算ワーカー270にその関数の実行を委ねることができる。又、MATLAB（登録商標）に基づくクライアント250のアプリケーションプログラミング・インタフェース及び／又はプログラミング言語は、後に詳述するが、別の技術計算環境からのタスクの技術計算の実行結果を受け取る機構も含む。例えば、技術計算クライアント250は、乱数発生関数の技術計算を行う技術計算ワーカー270から返された結果を保持する変数を宣言できる。
【００２８】
MATLAB（登録商標）に基づくクライアント250のプログラミング言語の分散機能により、技術計算クライアント250は、ワークステーション170上の技術計算ワーカー270から利用可能な計算資源を用いてタスクの技術計算を実行できる。これが技術計算クライアント250を解放するので、このクライアントが他のタスクを実行でき、或いはクライアント・コンピュータ150を解放し、このクライアント・コンピュータが他のソフトウェアアプリケーションを実行できる。
【００２９】
システム200の技術計算ワーカー270は、技術計算クライアント250により定義又は作成されたタスクを含むタスクの技術計算実行用の技術計算環境を提供する技術計算ソフトウェアアプリケーションでよい。技術計算ワーカー270は、MATLAB（登録商標）に基づくワーカーアプリケーション、モジュール、サービス、ソフトウェアコンポーネント、又はセッションとすることができ、これらはMATLAB（登録商標）のプログラミング言語で定義された関数の技術計算へのサポートを含む。セッションとは、技術計算クライアントが接続してその機能にアクセス可能となる、ランしている技術計算ワーカー270のインスタンスである。技術計算ワーカー270は、技術計算クライアント250の全ての機能及びソフトウェアコンポーネントを含むこともできるし、実行目的で受け取るタスクの技術計算を行うのに必要となるソフトウェアコンポーネントのみを含んでもよい。技術計算ワーカー270は、MATLAB（登録商標）製品ファミリの任意モジュール、ライブラリ、又はソフトウェアコンポーネントを走らせるよう構成し且つそれを実行可能とすればよい。従って、技術計算ワーカー270は、MATLAB（登録商標）ソフトウェアコンポーネントの全部又は一部をワークステーション170にインストールしておいてもよいし、ネットワーク140内の別のシステムでアクセス可能としてもよい。後に詳述するが、技術計算ワーカー270は、技術計算クライアント250から分散されたタスクを受け取る機構を備えている。技術計算ワーカー270は、技術計算クライアント250がクライアント自身の技術計算環境で技術計算を実行しているかのように、タスクの技術計算を実行できる。また、技術計算ワーカー270は、タスクの技術計算により得られた結果を技術計算クライアント250に返すための機構も備えている。
【００３０】
技術計算ワーカー270は、必要に応じて技術計算クライアント250が利用可能である。技術計算ワーカー270のワークステーション170が技術計算クライアント250からのタスクの技術計算を実行していないときは、ワークステーション170は他のソフトウェアプログラムを実行でき、或いは、技術計算ワーカー270は他の技術計算クライアントからのタスクの技術計算を実行できる。
【００３１】
図2Bは、本発明の一実施形態のMATLAB(登録商標)に基づく分散計算システムを図2Bに示したような多段分散コンピュータシステムとし別の代表的な一実施形態を示す。多段分散システム205は、クライアント・コンピュータ150上でランする技術計算クライアント250を含み、これはネットワーク通信チャンネル130を介してネットワーク140上のサーバ160と通信する。サーバ160は、自動タスク分散機構260及びジョブマネージャ265を含む。ジョブマネージャ265は、サーバ160で自動タスク分散機構260とインターフェースをとっている。自動タスク分散機構260は、ネットワーク140のネットワーク通信チャンネル130を介して、ワークステーション170上の技術計算ワーカー270と通信する。
【００３２】
自動タスク分散機構260は、技術計算クライアント250から技術計算ワーカー270へタスクを自動分散可能とするため1つ又は複数のアプリケーション・ソフトウェアコンポーネントを含む。自動タスク分散機構260により、技術計算クライアント250はタスク分散の管理を自動タスク分散機構260に委ねることができる。例えば、MATLAB(登録商標)のプログラミング言語を用いれば、どの技術計算ワーカー270がタスクの技術計算を実行するかを指定することなく、タスクを定義でき且つ自動タスク分散機構260に提出できる。技術計算クライアント250はこの技術計算ワーカー270の詳細を知る必要はない。技術計算クライアントは、タスクを自動タスク分散機構260に提出し且つ自動タスク分散機構260からこのタスクの結果を得るための関数を定義できる。従って、自動タスク分散機構は、技術計算クライアント250と技術計算ワーカー270との間に一定の間接性を実現する。
【００３３】
これにより分散プログラミング及び統合に関わる技術計算クライアント250への負担が軽減される。技術計算クライアント250は、技術計算ワーカー270の可用性を予め知っておく必要がない。技術計算クライアント250からの多数のタスク提出については、自動タスク分散機構260は、同一技術計算ワーカー270又は他の技術計算ワーカーへのタスクの委任を管理且つ処理でき、又これらタスクの結果を、全分散タスクの技術計算終了後の検索に備えて技術計算クライアント250に代わって保持できる。
【００３４】
ジョブマネージャ・モジュール265すなわち「ジョブマネージャ」が、MATLAB(登録商標)に基づく分散計算環境のソフトウェアコンポーネントの一部として、自動タスク分散機構260のタスク及び結果管理機能へのインターフェースとしてとして含まれている。ジョブマネージャ265は、多段分散システム205におけるタスク委任と結果入手とに関する制御を可能とするオブジェクト指向インターフェースを含むことができる。ジョブマネージャ265は、自動タスク分散機構260と技術計算ワーカー270との間におけるプロセス間通信及びワークフローの詳細から離れた一定レベルのプログラミング及び統合抽象化をもたらす。更に、ジョブマネージャ265は、複数タスクからなるグループをジョブと呼ばれる１つの単位として集合的に管理し、技術計算クライアント250に代わってジョブを構成するタスクを提出し、且つジョブが完了するまで各タスクの結果を入手するためのインターフェースを提供する。別法として、自動タスク分散機構260はジョブマネージャ265の機能及びオブジェクト指向インターフェースを含むことができ、或いは、自動タスク分散機構260及びジョブマネージャ265を単一のアプリケーション又はソフトウェアコンポーネントへ統合してもよい。代表的な一実施形態では、ジョブマネージャ265は、ジョブマネージャ265と自動タスク分散機構260との両方の機能を含む。通常の技能を備えた当業者であれば、ジョブマネージャ265及び自動タスク分散機構260の機能と動作を様々なソフトウェアコンポーネント、アプリケーション、及びインターフェースに統合できることは理解するはずである。
【００３５】
図2Cを参照すると、ホストとして機能する複数のワークステーション170A乃至170N上に設けられた多数の技術計算ワーカー270A乃至270Nを備えた本発明の代表的な一実施形態を示す。技術計算クライアント250は、ネットワーク140上でネットワーク通信チャンネル130を介して技術計算ワーカー270A乃至270Nのうち1つ、複数、又は全てと通信可能である。同様に、自動タスク分散機構260は、ネットワーク140上でネットワーク通信チャンネル130を介して技術計算ワーカー270A乃至270Nのうち1つ、複数、又は全てと通信可能である。従って、技術計算クライアント250及び／又は自動タスク分散機構260は、当該分散システムに合わせて調節し且つタスクの計算時間を増やすために、タスクを多数の技術計算ワーカー270A乃至270Nに分散できる。図2Cに示したように、技術計算ワーカー270A乃至270Bは、ホストとしての同一のワークステーション170A上に配置でき、或いは単一の技術計算ワーカー270Cが専用のワークステーション170Bを持つこともできる。或いは、1つ又は複数の技術計算ワーカー270A乃至270Nを、ホストとしてのクライアント150又はサーバ160上に配置できる。
【００３６】
図1A及び1Bに示した計算装置(102、102'、102''、及び102''')は、マイクロソフト(登録商標)Windows（登録商標）オペレーティングシステムの任意バージョン、Unix（登録商標）及びLinuxオペレーティングシステムの様々なリリース、Macintoshコンピュータ用のMacOS(登録商標)の任意バージョン、任意の埋込オペレーティングシステム、任意のリアルタイム・オペレーティングシステム、任意のオープンソース・オペレーティングシステム、任意の所有権を主張できるオペレーティングシステム、モバイル計算装置用の任意のオペレーティングシステム、又は当該計算装置上でラン可能且つ本明細書に記載する動作を実行可能な他の任意のオペレーティングシステムを実行しているものである。更に、MATLAB(登録商標)に基づく分散計算環境のソフトウェアコンポーネントは、計算装置(102、102'、102''、及び102''')のうちの任意装置上でラン可能なオペレーティングシステム上で動作可能であり、そのように動作するよう構成可能である。更に、クライアント150、サーバ160、及びワークステーション170ぞれぞれは、同一又は異なるオペレーティングシステムを実行していてもよい。例えば、クライアント150はマイクロソフト(登録商標)Windows（登録商標）を、サーバ160はUnix（登録商標）の任意バージョンを、ワークステーションはLinuxの任意バージョンを走らせることができる。或いは、クライアント150、サーバ160、及びワークステーション170ぞれぞれは、マイクロソフト(登録商標)Windows（登録商標）を走らせることができる。更に、MATLAB(登録商標)に基づく分散計算環境のソフトウェアコンポーネントは、計算装置(例えば、102、102'、102''、及び102''')のうちの任意装置の異なるプロセッサ上で動作可能であり、それらプロセッサを利用するよう構成可能である。例えば、MATLAB(登録商標)に基づく分散計算環境のソフトウェアコンポーネントは、1つの計算装置102では32ビットプロセッサ上で、別の計算装置102’では64ビットプロセッサ上でランできる。図1Bに示したシステムのような分散システムでは、MATLAB(登録商標)に基づく分散計算アプリケーションは、異なるオペレーティングシステムに加え異なるプロセッサのアーキテクチャ上でラン可能な計算装置(102、102'、102''、及び102''')上で実行できる。通常の技能を備えた当業者であれば、任意の計算装置(102、102'、102''、及び102''')上でラン可能なオペレーティングシステムとプロセッサを様々に組み合わせられることは理解するはずである。
【００３７】
MATLAB(登録商標)に基づく分散計算アプリケーションのソフトウェアコンポーネントをクライアント150、サーバ160、及びワークステーション170に分散するという文脈で本発明を説明しているが、技術計算クライアント250、ジョブマネージャ265、自動タスク分散機構260、及び技術計算ワーカー270の1つ又は複数を、ネットワーク140において利用可能な他の任意計算装置及びオペレーティングシステムで組み合わせ且つ/或いは分散する他の任意システム及び／又は配備アーキテクチャを使用してもよい。代替的には、MATLAB(登録商標)に基づく分散計算アプリケーションの全ソフトウェアコンポーネントは、クライアント150、サーバ160、又はワークステーション170などの単一の計算装置102上でラン可能である。
【００３８】
本発明の一実施形態のMATLAB（登録商標）に基づく分散計算アプリケーションは、多数の動作モードを使用することでタスク分散の方法に柔軟性をもたらす。図3A、3B、及び3Cでは、MATLAB(登録商標)に基づく分散計算環境の3つのモードのタスク分散を示す。図3Aは直接分散モードを示し、図3Bは自動分散モードを示し、図3Cはバッチモードの自動分散を示す。更に、図3Dはバッチモードの自動分散の代表的な一実施形態を示す。
【００３９】
図3Aの直接分散システム305は、技術計算ワーカー270A乃至270Nのうちどれが特定のタスクを実行するかを高レベルで制御したいユーザ向けである。直接分散システム305を概括的に説明すると、技術計算クライアント250が複数の技術計算ワーカー270A乃至270Nと通信しており、それぞれのワーカーが対応するワークステーション170A乃至170N上でランしている。代替的な実施形態では、1つ又は複数の技術計算ワーカー270A乃至270Nは、ワークステーション270A、クライアント150、又はサーバ160などの同一計算装置上でランできる。この直接分散システム305によって、タスクは、例えば、複数の技術計算ワーカー270A乃至270Nのうち特定の技術計算ワーカー、例えば技術計算ワーカー270Aに送信可能となる。すると、指定された技術計算ワーカー、例えば技術計算ワーカー270Aが提出されたタスクの技術計算を実行している間に、技術計算クライアント250が他の作業を継続できる。技術計算ワーカー270Aにタスクを提出した一定時間後に、技術計算クライアント250はそのタスクの結果を技術計算ワーカー270Aから受け取ることができる。更に、各技術計算ワーカー270Nは例えばタスクN-Mなどの多数のタスクを処理し、タスク毎に例えば結果N-Mなどの結果を生成できる。或いは、技術計算ワーカー270Aは結果を返すことなくタスクの技術計算を行うこととしてもよいし、タスク完了を通知する情報を返すこととしてもよい。このモードのタスク分散は、既知のワークステーション170A乃至170N及び技術計算ワーカー270A乃至270Nが比較的少数であるコンピュータ・ネットワークで有利である。タスクは、他のワークステーション170B乃至170Nより高速の構成を備えたワークステーション170A上でランする指定された技術計算ワーカー270Aに委ねてもよい。例えば、全体的な計算時間を短縮するため、長いタスクはこうしたワークステーション170Aで実行すればよい。
【００４０】
図3Aに更に示したように、直接分散システム305の技術計算クライアント250は、多数のタスク（例えばタスクN-M）を多数の技術計算ワーカー270A乃至270Nそれぞれに提出できる。例えば、技術計算クライアント250はタスク1を技術計算ワーカー270Aに提出し、タスク2を技術計算ワーカー270Bに提出し、タスクNを技術計算ワーカー270Nに提出する。技術計算クライアント250はタスク1、タスク2、及びタスクN-Mを、間を空けず連続的に、或いは一定の時間間隔以内に提出できる。従って、技術計算ワーカー270A乃至270Nは互いから独立して又は並行にそれぞれのタスクに技術計算を行うことができる。或いは、技術計算ワーカー270A乃至270Nは、他の技術計算ワーカーがアイドル状態となっているうちにそれぞれのタスクに技術計算を行うことができる。
【００４１】
別の実施形態では、技術計算ワーカー270A乃至270Nは、点線矢印で示したように技術計算ワーカー270A乃至270N間で互いとインターフェースをとるためのインターフェース及び通信チャンネルを含んでもよい。そうした実施形態では、技術計算ワーカー270Aはタスク1に技術計算の一部を行い、次にタスク1と随意選択で生成した結果又は他のデータとを技術計算ワーカー270Bが付加的な技術計算を行うために提出してもよい。又、技術計算ワーカー270Aは、タスクを追加処理のため技術計算ワーカー270Bに提出する前或いは後に、タスク1の技術計算の結果を技術計算クライアント250に提出してもよい。すると技術計算ワーカー270Bはタスク1の技術計算を実行し、続いて技術計算ワーカーNによる付加的な技術計算のためタスク1を提出できる。付加的な構成の可能性としては、技術計算ワーカー270A乃至270Nはシステム内の他の技術計算ワーカー270A乃至270Nの識別情報に関する情報をタスクととも入手可能としてもよい。その場合、この情報を用いて他の技術計算ワーカーと通信し、インターフェースをとることになる。或いは、技術計算ワーカー270Aは、関数又はシステムコール、或いはネットワーク140上でサービスプロバイダにメソッド呼び出しすることで別の技術計算ワーカー270B乃至270Nを発見してもよい。こうした構成では、技術計算ワーカー270A乃至270Nは互いから独立し且つ並行にタスクを実行するか、或いは順次に且つ互いの後に実行できる。
【００４２】
図3Bを参照すると、システム310で実現される自動タスク分散モードは、どの技術計算ワーカー270A乃至270Nが特定のタスクを実行するかをユーザが選択制御を望まない構成を意図している。自動分散システム310を概括的に説明すると、技術計算クライアント250は、サーバ160上でランする自動タスク分散機構260と通信している。自動タスク分散機構260は複数の技術計算ワーカー270A乃至270Nと通信している。この動作モードでは、技術計算クライアント250は、例えば技術計算ワーカー270A乃至270Nを走らせているワークステーションの名前や、タスクに技術計算を行う技術計算ワーカー270A乃至270Nの能力などの技術計算ワーカー270A乃至270Nに関する具体的な情報を知っている必要はない。代替的な実施形態では、ネットワーク上で利用可能な技術計算ワーカー270A乃至270Nの全部又は一部の事前知識があってもよい。技術計算クライアント250は、例えばネットワーク140上の技術計算ワーカー270A乃至270Nの名前又は可用性について判っていても、タスクを実行する技術計算ワーカーの名前をあえて特定せず、自動タスク分散機構に任意の利用可能な技術計算ワーカー270A乃至270Nにタスクを分散させてもよい。
【００４３】
図3Bでは、技術計算クライアント250は1つ又は複数のタスク(タスク1乃至タスクN-M)を自動タスク分散機構260に提出する。これらのタスクは、順次に或いは技術計算クライアント250が指定する順番且つ頻度で提出できる。自動タスク分散機構260はタスク(タスク1乃至タスクN-M)を入手して、任意の技術計算ワーカー270A乃至270Nへの分散を可能とする。技術計算ワーカー270A乃至270Nは、技術計算を施すためにタスクを自動タスク分散機構260から取り出し、そのタスクの結果を計算し、その結果を自動タスク分散機構260に与える。例えば、技術計算ワーカー270Aは、タスク1を自動タスク分散機構260から取り出し、タスク1の結果である結果1を計算し、結果1を自動タスク分散機構260に提出する。それぞれの結果を生成し提出する技術計算ワーカー270A乃至270Nから結果(結果1乃至結果N-M)が提出されると、自動タスク分散機構260はこうした結果を技術計算クライアント250が利用可能にする。技術計算クライアント250は、技術計算クライアント250自身が指定する時間又は方法で、自動タスク分散機構260から計算済みタスクの結果を入手する。例えば、技術計算クライアント250は全ての結果(結果1乃至結果N-M)が計算された後に全ての結果を同時に入手してもよいし、それぞれの結果が自動タスク分散機構260で利用可能になった後で入手可能としてもよい。従って、技術計算クライアント250は、1つ又は複数の結果を得る順番及び頻度を決定できる。直接分散モードと同様に、技術計算ワーカー270A乃至270Nは、タスクを他の技術計算ワーカー270A乃至270Nに提出することで、図3Bにおいて技術計算ワーカー270A乃至270N間の点線矢印で示したように、互いに通信且つ対話つつタスクを順次且つ並行に実行できる。
【００４４】
図3Cのシステム315で実施されるバッチモードの自動タスク分散は、ユーザが関連したタスクのグループを１つのジョブとして指定でき、且つタスクのバッチ又はジョブを自動タスク分散機構260に与える構成を実現する意図がある。バッチモードの自動分散システム315を概括的に説明すると、技術計算クライアント250が、サーバ160上のジョブマネージャ265と通信している。ジョブマネージャ265は、サーバ160でランする自動タスク分散機構260とインターフェースをとり且つ通信している。技術計算ワーカー270A乃至270Nのそれぞれは、自動タスク分散機構260と通信している。ジョブマネージャ265は、単一の自動タスク分散機構260とインターフェースをとり、それに関連付けられている。代替的な様態として、ジョブマネージャ265と自動タスク分散機構260とは、互いに異なるサーバ160上に位置することも可能である。更に、複数のジョブマネージャ及び複数の自動タスク分散機構が、単一のサーバ160又は自分自身のサーバ上でそれぞれランすることも可能である。複数のジョブマネージャそれぞれが、複数の自動タスク分散機構の何れかとインターフェースをとり、且つそれに関連付けられている。これによって、この分散システムはジョブマネージャ265及び自動タスク分散機構260のインスタンスの数を増減して、タスクを分配する付加的な多数の技術計算クライアント250に対処できる。
【００４５】
図3Cに示したバッチモードでは、技術計算クライアント250はジョブを定義する。技術計算クライアント250は、当該クライアントがタスクを宣言し、ジョブを宣言し、且つこれらタスクとそのジョブを関連付け可能となるプログラミング言語環境を備えている。図3Bに示したように各タスクを別々に提出するのでなく、技術計算クライアント250は関連付けられた全タスクを含むジョブを自動タスク分散機構265に提出する。ジョブマネージャ265は、自動タスク分散機構260とのオブジェクト指向インターフェースを実現するソフトウェアコンポーネントである。ジョブマネージャ265はこのジョブからタスクを入手し、これらタスクを自動タスク分散機構260に与えて、技術計算ワーカー270A乃至270Nが受け取り結果を計算できるようにする。例えば、技術計算クライアント250が、タスク1、タスク2、及びタスクN-Mの3つのタスクからなる組を備えたジョブすなわちジョブ1を定義する。次に、技術計算クライアント250はジョブ1をジョブマネージャ265に提出する。ジョブマネージャ265はジョブ1を入手し、タスク1乃至タスクN-Mからなる各タスクをジョブ1から入手する。後に詳述するジョブマネージャ265の構成論理によれば、ジョブマネージャ265はタスクそれぞれを自動タスク分散機構260に提出し、技術計算ワーカー270A乃至270Nによる技術計算を可能とする。技術計算ワーカー270Aは自動タスク分散機構260からタスク1を取り出し、タスク1の結果を計算し、その結果1を自動タスク分散機構260に与えることができる。技術計算ワーカー270B及び技術計算ワーカーNは、類似の様態でそれぞれタスク2及びタスクN-Mを計算し、結果を与える。すると、ジョブマネージャ265は完了したジョブであるジョブ1の結果の組を入手し、各タスクの結果を技術計算クライアント250に与える。
【００４６】
ジョブマネージャ265は、提出されたジョブを編成し且つ処理する待ち行列267も含む。例えば、ジョブマネージャ265は先入れ先出し(FIFO)方式でジョブを扱う。この場合、ジョブマネージャ265は、現在のジョブの全タスクが自動タスク分散機構260によって処理されるまで次のジョブを処理しない。更に、待ち行列267を用いるジョブマネージャ265は、多数の技術計算クライアント250からの多数のジョブ提出とタスク分散とをサポートする。もし第1の技術計算クライアント250がジョブ1を提出すれば、ジョブマネージャ265はそのジョブを最初に待ち行列267に入れる。もし第2の技術計算クライアントが例えばジョブ2などの二番目のジョブを提出すれば、ジョブマネージャはそのジョブを、待ち行列内で第1クライアントからのジョブ1の後に入れる。こうした様態で、ジョブマネージャ265のサービスにアクセスする全ての技術計算クライアント250はタスク分散サービスを受ける。通常の技能を備えた当業者であれば、ジョブマネージャ265が、ジョブ待ち行列267内のジョブを処理すると共に多数の技術計算クライアント250に対処するための様々なアルゴリズムを実装できることは理解するはずである。例えば、ユーザは、指定されたジョブに優先度レベルを指定したり、ジョブマネージャ265の論理が、ジョブ及びタスクの技術計算の所望又は最適選択を決定する上で、技術計算ワーカー270A乃至270Nの構成及び可用性に基づいてタスク分散及び処理の決定を行うことができる。
【００４７】
図3A及び図3Bの他の分散モードと同様に、バッチモードの技術計算ワーカー270A乃至270Nは、図3Cの点線矢印で示したように技術計算ワーカー270A乃至270N間で互いと通信し且つインターフェースをとることができる。従って、技術計算ワーカー270A乃至270Nは、タスクを他の技術計算ワーカー270に提出することで順次でも並行でもタスクを実行できる。技術計算ワーカー270Aは、特定のジョブに関連付けられたタスクに割り当てられた又はそれを処理する他の技術計算ワーカー270B乃至270Nに関するネットワーク140上で入手可能な情報を、技術計算ワーカーにより得られた又はシステムコール若しくは関数コール或いはサービスへのメソッド呼び出しなどの他の手段により得られたタスクに関連付けられた情報の一部として入手できる。
図3Dに示したバッチモードの自動タスク分散システム320の代表的な実施形態は、ジョブマネージャ265が自動タスク分散機構260を含む構成を示す。システム320を概括的に説明すると、技術計算クライアント250が、サーバ160上のジョブマネージャ265と通信している。ジョブマネージャ265は、サーバ160上でジョブマネージャ265の一部としてランする自動タスク分散機構260を含む。ジョブマネージャ265は、提出されたジョブを編成し且つ処理する待ち行列267も含む。技術計算ワーカー270A乃至270Nは、ジョブマネージャ265の自動タスク分散機構260からタスクを受け取るためジョブマネージャ265と通信している。
【００４８】
図3Dに示したバッチモードの動作では、技術計算クライアント250は互いに関連したタスクからなるジョブを定義する。図3Bに示したように各タスクを別々に提出するのでなく、技術計算クライアント250は互いに関連した全タスクを含むジョブを自動タスク分散機構265に提出する。ジョブマネージャ265はこのジョブからタスクを入手し、技術計算を行うために、これらタスクを技術計算ワーカー270A乃至270Nに自動タスク分散機構260を介して提出する。例えば、技術計算クライアント250が、タスク1、タスク2、及びタスクN-Mの3つのタスクからなる組を備えたジョブすなわちジョブ1を定義する。次に、技術計算クライアント250はジョブ1をジョブマネージャ265に提出する。ジョブマネージャ265はジョブ1を入手し、タスク1乃至タスクN-Mからなる各タスクをジョブ1から入手する。すると、ジョブマネージャ265の自動タスク分散機構260が、技術計算を行わせるためにそれぞれのタスクを任意の技術計算ワーカー270B乃至270Nに提出する。例えば、ジョブマネージャ265はタスク1を技術計算ワーカー270Aに提出して、タスク1の結果1を計算且つ生成させればよい。技術計算ワーカー270Aは結果1をジョブマネージャ265に与える。類似の様態で、ジョブマネージャ265はタスク2及びタスクN-Mを技術計算ワーカー270B及び技術計算ワーカー270Nに提出し、各技術計算ワーカー270A及びBがタスク2及びタスクN-Mの結果をそれぞれジョブマネージャ265に与えればよい。全ての結果をジョブ1のタスクから受信すると、ジョブマネージャ265はジョブ1の各タスクの結果を技術計算クライアント250に与える。
【００４９】
図3C及び3Dに示したバッチモードの動作では、ジョブマネージャ265又は自動タスク分散機構260を構成することで、ジョブに関連付けられたタスクを実行するための最小及び最大数の技術計算ワーカー270A乃至270Nを定義できる。この特徴はジョブ毎に構成できる。或いは、この特徴はジョブの一部又は全部に関して構成してもよい。これら設定の構成は、ジョブオブジェクトの1つ又は複数のプロパティー又はジョブを表すデータ構造の1つ又は複数のフィールドなどにおいて、提出されたジョブに関連付けられたパラメータを介して容易に行うことができる。別法としては、こうした設定は、構成ファイル、グラフィカルユーザ・インターフェース、命令、メッセージ、又はこれら設定の値が設定できる他の手段などの、ジョブマネージャ265又は自動タスク分散機構260の任意インターフェースを介して容易に行うことができる。
【００５０】
システム(例えば315又は320)は、ジョブマネージャ265又は自動タスク分散機構260に登録済み或いは利用可能な技術計算ワーカー270A乃至270Nの数と、技術計算ワーカー・パラメータの最大数の構成済み設定とを比較できる。ジョブを処理するための最低数の登録済み或いは利用可能な技術計算ワーカー270A乃至270Nが存在しなければ、システムはジョブを開始しないようにもできる。類似の様態で、本システムは、利用可能な或いは登録済み技術計算ワーカー270A乃至270Nの数を技術計算ワーカー・パラメータの最大数の設定と比較できる。本システムがジョブのタスクを分散する際に、定義された数の技術計算ワーカー270A乃至270Nを超える数のワーカーにタスクを分散しないように確認できる。幾つかの実施形態では、技術計算ワーカーの最小数は、技術計算ワーカーの最大数の設定と同じ値に設定される。こうしたケースでは、ジョブを開始する最小数の技術計算ワーカー270A乃至270Nが利用可能又は登録済みであり、最小設定を超える技術計算ワーカー270A乃至270Nを使用できない場合のみに、システムがジョブを開始できる。これは、各タスクを別個の技術計算ワーカー270A乃至270Nに割り当て且つその上で走らせるようにユーザがジョブを構成したい場合は有用である。例えば、ジョブが5つのタスクを備え、最大及び最小数の技術計算ワーカー設定を５に設定するような場合である。
【００５１】
更に、図3A乃至3Dに示した何れの実施形態でも、本システムは、タスクを処理する技術計算ワーカー270A乃至270Nを、技術計算ワーカー270A乃至270N及び／又はワークステーション170A乃至170Nの動作及び／又は性能特性によって決定すなわち選択できる。例えば、技術計算ワーカー270Aは、ワークステーション170Aに導入されているMATLAB(登録商標)に基づいた分散計算アプリケーションのバージョンか、技術計算ワーカー270Aがラン可能なこうした技術計算アプリケーションのバージョンかに基づいてタスクを処理できる。更に、技術計算ワーカー270A乃至270N及びワークステーション170A乃至170Nは、ベンチンマーク比較結果ファイルのような、ワークステーション170Aの計算装置102上をランするMATLAB(登録商標)に基づいた分散計算アプリケーションのバージョンの任意動作特性及び性能特性を記述した仕様書又はプロファイルを備えることができる。このプロファイルは、計算装置(102、102'、102'、及び102''')上をランするMATLAB(登録商標)に基づいた分散計算アプリケーションの動作及び性能特徴の既知のベンチマークと、MATLAB(登録商標)に基づいた分散計算アプリケーションの指定したバージョン、MATLAB(登録商標)に基づいた分散計算アプリケーションの動作又は性能に影響しうるオペレーティングシステム、及び他の関連したソフトウェア、又は他の任意システムコンポーネント若しくは属性との比較でよい。このプロファイルは、ネットワークを介してアクセス可能な或いは技術計算ワーカー270A乃至270Nのインターフェース機構を介して検索可能なファイルで記述できる。更に、本システムは、技術計算ワーカー270A乃至270N又はワークステーション170A乃至170Nに設定された任意構成又はプロパティーによって、任意タスクの処理を実行することになる技術計算ワーカー270A乃至270Nを決定できる。任意タスクの処理を実行することになる技術計算ワーカー270A乃至270Nを決定するには、本システムは、ワークステーション170A乃至170N上をランする技術計算ワーカー270A乃至270NのMATLAB(登録商標)に基づいた分散計算アプリケーションの任意構成、プロパティー、並びに動作及び性能特徴を、ファイル、グラフィカルユーザ・インターフェース、命令、又はメッセージなどの技術計算ワーカー270A乃至270N又はワークステーション170A乃至170Nの任意インターフェースを介して発見できる。
【００５２】
本発明の一実施形態のMATLAB(登録商標)に基づく分散計算アプリケーションは、多数モードのタスク分散を分散システムにおいて同時に実行できるという意味で柔軟性を実現する。図4は、図3A乃至3Cに示した動作モードの組み合わせを同時に実行する分散アプリケーションを示す、本発明の例示的な実施形態を示す。更に、分散システム400は、多数のジョブマネージャ265A乃至265N及び多数の自動タスク分散機構260A乃至260Nと通信する多数のクライアント250A乃至250Nをサポートすることが図示されている。これら多数の動作モードを用いれば、任意の技術計算クライアント250A乃至250Nは、タスクを技術計算ワーカー270A乃至270Nに直接分散したり、タスクを自動タスク分散機構260に提出したり、或いはジョブをジョブマネージャ265に提出したりできる。図示した多数クライアント分散システム400では、複数の技術計算クライアント250A乃至250Nは1つ又は複数のジョブマネージャ265A乃至265Nと通信している。ジョブマネージャ265Aは、自動タスク分散機構260Aとインターフェースをとる別個の構成要素でもよいし、或いはジョブマネージャ265Nは、自動タスク分散機構260Nの機能を含んだ単一のアプリケーションとしてもよい。1つ又は複数の技術計算ワーカー270A及び270Bは1つ又は複数のジョブマネージャ265N或いは1つ又は複数の自動タスク分散機構260Aと通信している。本発明の分散形アーキテクチャは、様々なシステム配置及びネットワークトポロジをサポートするスケーラブル且つ柔軟な分散技術計算環境を可能にする。
【００５３】
例えば、図4に示したように、技術計算クライアント250Aは、直接分散モード及びバッチ自動分散モードの両方で動作可能である。従って、技術計算クライアント250Aは、ジョブマネージャ265Aを用いることなく、タスクを提出し且つ自動タスク分散機構260Aから結果を受け取ることができる。別の例では、技術計算クライアント250Aはジョブ1などのジョブをジョブマネージャ265Aに提出し、自動タスク分散機構260Aにタスク分散させ、ジョブ1結果などのジョブの結果を受け取ることができる。図4の別の例では、技術計算クライアント250Bはバッチ自動分散モードで動作できるが、第1サーバ160A上でランする第1ジョブマネージャ265Aと第2サーバ160B上でランする第2ジョブマネージャ265Nに別々にジョブを提出できる。更に別の例では、技術計算クライアント250Nは自動分散モード及び直接分散モードの両方で動作できる。技術計算クライアント250Nはタスク2のようなタスクを自動タスク分散機構260Nに提出し、システム400が割り当てた技術計算ワーカー270A乃至270Nの何れかにより計算された結果であるタスク2結果を受け取る。又、技術計算クライアント250Nはタスクを技術計算ワーカー270Nに直接提出し、技術計算ワーカー270Nから計算結果を直接受け取る。通常の技能を備えた当業者であれば、多数の動作モードを備えたこうした分散システム400内で様々な展開の組み合わせが可能なことは理解するはずである。従って、本発明は、複雑な技術計算要件を備えた分散処理にスケーラビリティと柔軟性を与える。
【００５４】
別の様態では、本発明は、図3A乃至3Cで示した実施形態に関して上述したように、タスクの直接、間接、又は自動処理のために技術計算ワーカー270A乃至270Nにタスクを分散する方法に関わる。図5A、5B、及び5Cはそれぞれ、MATLAB(登録商標)に基づいた分散計算アプリケーションの3つモードでタスクを分する方法を表すフローチャートを示したものである。図5Aは直接分散方法を示し、図5Bは自動分散方法を示し、図3Cはバッチモードの自動分散方法を示す。
【００５５】
図5Aを参照すると、技術計算クライアント250から技術計算ワーカー270へタスクを分散する方法500の一実施形態が示されている。方法500は、図3Aに示した発明の直接提出の実施形態を用いて実施する。技術計算クライアント250は、技術計算に関する演算を含むタスクを定義する(ステップ502)。このタスクは、MATLAB（登録商標）のプログラミング言語で利用できる関数、コマンド又は演算、並びに引数の数及び引数への入力データを定義する。次に、技術計算クライアント250は、このタスクを技術計算ワーカー270に提出する(ステップ504)。技術計算ワーカー270はタスクを受け取り(ステップ506)、要求された技術計算をタスクによる定義に従って実行する(ステップ508)。タスクに技術計算を実行する時に、関連した結果が生成される(ステップ510)。代替的な実施形態では、結果が生成されないか、技術計算クライアント250に結果を戻す必要がない。タスクの計算から結果を生成した後、技術計算ワーカー270はその結果を技術計算クライアント250に与え(ステップ512)、技術計算クライアント250は技術計算ワーカー270からその結果を得る(ステップ514)。
【００５６】
図5Bを参照すると、タスクを技術計算クライアント250から技術計算ワーカー270へ自動タスク分散モードで分散する方法525の一実施形態が示されている。方法525は、図3Bに示した本発明の自動タスク分散の実施形態を用いて実施する。技術計算ワーカー270は、1つ又は複数はタスクが自動タスク分散機構260で利用可能なった或いは見つかったという通知を受信できるように登録する(ステップ527)。技術計算クライアント250は、技術計算に関する演算を含むタスクを定義する(ステップ502)。次に、技術計算クライアント250は、このタスクを自動タスク分散機構260に提出する(ステップ530)。自動タスク分散機構260はこのタスクを受け取り、このタスクを技術計算ワーカー270に使用可能とする(ステップ532)。ステップ530で提出されたタスクに関連付けられた結果が自動タスク分散機構260で使用されるか現れたとき、技術計算クライアントは、自動タスク分散機構260に通知を受け取るよう登録する(ステップ534)。自動タスク分散機構260は、結果が現れたときに通知を受け取るよう技術計算クライアント250を通知する(ステップ536)。自動タスク分散機構260は、技術計算ワーカー260にタスクの可用性に関する通知を与える。通知の受信に応答して(ステップ540)、技術計算ワーカーは、自動タスク分散機構260から与えられたタスク(ステップ540)を入手する(ステップ544)。技術計算ワーカー270は、要求された技術計算を、タスクによる定義に従って関数又はコマンドに実行する(ステップ508)。タスクに技術計算を実行する時に、関連した結果を生成できる(ステップ510)。代替的な実施形態では、結果が生成されないか、技術計算クライアント250に結果を戻す必要がない。タスクの計算から結果を生成した後(タスク510)、技術計算ワーカー270はその結果を自動タスク分散機構260に与える(ステップ512)。技術計算ワーカー250から結果を得た後（ステップ550）、自動タスク分散機構260は、その結果が入手可能となったことを技術計算クライアント250に通知する。技術計算クライアント250は、自動タスク分散機構260により与えられた（558）結果を入手する(ステップ556)。
【００５７】
図5C及び5Dを参照すると、技術計算クライアント250から技術計算ワーカー270へバッチ動作モードでタスクを分散する方法560の一実施形態が示されている。方法560は、バッチモードの自動タスク分散システム(例えば、315又は320)で実施される。技術計算ワーカー270は、1つ又は複数はタスクが自動タスク分散機構260で使用可能なったか或いは見つかったという通知を受信できるように登録する(ステップ527)。代表的な実施形態では、技術計算ワーカーは、タスクをジョブマネージャ265又は自動タスク分散機構260から当該タスクの計算を行う通知として受け取るように登録する。技術計算クライアント250は1つ又は複数のタスクを定義する(ステップ562)。又、これらタスクの1つ又は複数は技術計算の演算又は関数を含んでいる。技術計算クライアント250はこれらタスクの1つ又は複数を１つジョブへまとめる(ステップ564)。次に、技術計算クライアント250はこのジョブをジョブマネージャ265に提出する(ステップ566)。ジョブマネージャ265は技術計算クライアント250からこのジョブを入手し(ステップ568)、ジョブの1つ又は複数タスクを自動タスク分散機構260に与える。すると、この機構260は、分散を目的としてこうした1つ又は複数タスクを1つ又は複数の技術計算ワーカー270A乃至270Nに使用可能とする(ステップ572)。一実施形態では、ジョブマネージャ265又は自動タスク分散機構260は、これら1つ又は複数のタスクを1つ又は複数の技術計算ワーカー270A乃至270Nに提出できる。別の実施形態では、技術計算ワーカー270はタスクをジョブマネージャ265又は自動タスク分散機構260から取り出してもよい。
【００５８】
次に、技術計算クライアント250は、コールバック関数をジョブマネージャ265に登録する(ステップ265)。技術計算クライアント250は、タスク又はジョブの処理状態の変化、ジョブマネージャの状態の変化、或いは関数呼び出しをトリガする他のイベントに基づいて他のコールバック関数を設定且つ／又は登録できる。ジョブが完了すると、すなわちジョブの1つ又は複数タスクのそれぞれが完了した段階でジョブマネージャ265はこの関数を呼び出す。すると、ジョブマネージャ265は自動タスク分散機構260に登録して（ステップ576）、自動タスク分散機構260に現れた或いは技術計算ワーカー270A乃至270Nから受け取った提出済みタスクの結果に関わる通知を受け取るようにしてもよい。一実施形態では、自動タスク分散機構260はジョブマネージャの通知要求を登録する（ステップ578）。次に、自動タスク分散機構260は、技術計算ワーカー270にタスクの可用性に関する通知を提供する（ステップ538）。代表的な実施形態では、このタスクはジョブマネージャ265により技術計算ワーカー270にそのタスクを実行する通知として送られる。この通知又はタスクの受信に応答して(ステップ540)、技術計算ワーカー270は、自動タスク分散機構260又はジョブマネージャ265から与えられたタスク(ステップ540)を入手する(ステップ542)。技術計算ワーカー270は、要求された技術計算を、タスクによる定義に従ってその演算に実行する(ステップ508)。タスクに技術計算を実行する時に、関連した結果が生成される(ステップ510)。代替的な実施形態では、結果は生成されないか、技術計算クライアント250に結果を戻す必要がない。タスクの計算から結果を生成した後(タスク510)、技術計算ワーカー270はその結果を自動タスク分散機構260又はジョブマネージャ265に与える(ステップ510)。技術計算ワーカー250から結果を得た後（ステップ550）、自動タスク分散機構260は、その結果が入手可能となったことを技術計算クライアント265に通知する（ステップ587）。代表的な実施形態では、ジョブマネージャ265は技術計算ワーカー270から結果を受け取る。この通知又は結果の受信に応答して(ステップ589)、ジョブマネージャ265は、自動タスク分散機構260から与えられた(ステップ593)結果を入手する(ステップ591)。ジョブマネージャ265はジョブの最後の結果を受け取った場合は、登録されたコールバック関数を介してジョブは完了したことを技術計算クライアント250に通知する。完了したジョブコールバック関数をトリガした（ステップ597）後に、技術計算クライアント250はジョブマネージャ265により与えられた（ステップ599）結果を入手する（ステップ598）。
【００５９】
図4のシステム400に示した同時進行の多数分散モード動作の実施形態を参考にしつつ上述のタスク分散方法(方法500、525、及び560)を考慮すれば、通常の技能を備えた当業者は、上述した方法を、図4の各技術計算クライアント250A乃至250Nの多数モード動作に適用できることは理解するはずである。
【００６０】
図6Aは、技術計算クライアント250及び技術計算ワーカー270が自動タスク分散機構260を用いてタスクと結果を分散する自動機能の一実施形態を詳細に示す。自動タスク分散機構260はオブジェクト指向型でよく、分散アプリケーション開発用のSun
Microsystems社の技術であるJava（登録商標）spaceなどのオブジェクト交換リポジトリ662を含むことができ、これはSun
Microsystems社から同様に入手できるJiniネットワーク技術を用いてビルドできる。
【００６１】
Java（登録商標）Space技術では、アプリケーションは、スペースと呼ばれるオブジェクト交換リポジトリ662に出入りするオブジェクトの流れを介して協働するプロセスの集合と考えられる。それは、プロセス間でのメッセージのやりとりや、リモートオブジェクトにメソッドを直接呼び出すことには直接依存しない。カギとなる特徴はスペースが共有されることである。本発明の技術計算ワーカーやジョブマネージャなどの多くのリモートプロセスは、スペースのネットワークアクセス可能オブジェクト記憶装置と対話できる。スペースは持続的であり、従って信頼性が高い記憶装置となる。スペースは、その内部のオブジェクトを、例えば共用記憶域解(原語：a
shared memory solution)におけるような記憶場所又は識別子でなく連想型ルックアップにより探し出すことができるという点で連想型である。更に、スペースには、オブジェクトの交換を扱うために、オブジェクトリポジトリに対して行う少数の重要な演算がある。書き込み操作は、タスクオブジェクトなどのオブジェクトをそのスペースに書き込む。テイク(原語：take)操作は結果オブジェクトなどのオブジェクトをスペースから取り出す。テイクは読み取りと等しく、且つスペースからオブジェクトを除去する。読み出し操作はスペースからオブジェクトのコピーを入手し、そのオブジェクトはスペースにそのまま残しておく。他の操作によって、技術計算ワーカー、技術計算クライアント、及びジョブマネージャなどのリモートプロセスが、ある種のオブジェクトがスペースに現れた際にイベント通知を受け取るため登録可能となる。オブジェクトがスペースに現れるのは、プロセスがそのオブジェクトをスペースに書き込んだときである。リモートプロセスはスペース内にオブジェクトが現れたかどうかをリッスンし、オブジェクトが現れるとスペースが登録済みリモートプロセスに通知する。
【００６２】
本発明の代替的一実施形態では、Java（登録商標）Space技術などを用いて実装されたもののようなオブジェクト交換リポジトリを用いて、タスク及び結果オブジェクトに関して技術計算クライアント250と技術計算ワーカー270との間に一定の間接性を実現する。上述の自動通信機能により、技術計算クライアント250は技術計算を実行するに当たり、名前付き技術計算ワーカー270を指定する必要はない。オブジェクト交換リポジトリ662を含む自動タスク分散機構260は、自動タスク分散機構260に登録済みの技術計算ワーカー270A乃至270Nへのタスク分散を扱う。タスクと結果を分配するにあたり、技術計算クライアント250及び技術計算ワーカー270はタスク及び結果オブジェクトを読み出し且つオブジェクト交換リポジトリ662に書き込む。
【００６３】
図6Aを参照すると、技術計算クライアント250は書き込み処理を実行して、タスクオブジェクトを自動タスク分散機構260のオブジェクト交換リポジトリ662に書き込む。このタスクオブジェクトは、オブジェクト交換リポジトリ662から当該タスクオブジェクトを入手する技術計算ワーカー270により実行される技術計算のタスクを定義する。技術計算クライアント250はオブジェクト交換リポジトリ662に登録して、提出されたタスクオブジェクトに関連した結果オブジェクトがオブジェクト交換リポジトリ662で入手可能となるとその通知を受け取るようにする。こうすることにより、技術計算クライアント250は、技術計算処理のために提出されるタスクに関わる結果の出現をリッスンできる。技術計算ワーカー270はオブジェクト交換リポジトリ662に登録して、タスクオブジェクトがオブジェクト交換リポジトリ662に現れた時にその通知をうけるようにする。技術計算クライアント250がタスクオブジェクトを書き込んだ後、オブジェクト交換リポジトリ662は通知を技術計算ワーカー270に送り、このタスクオブジェクトがオブジェクト交換リポジトリ662で入手可能になったことを知らせる。この通知に応答して、技術計算ワーカー270は、提出されたタスクオブジェクトを検索するためにオブジェクト交換リポジトリ662にテイク操作を実行する。このテイク操作はオブジェクト交換リポジトリ662からそのタスクを除去する。代替的には、読み出し操作を実行して、オブジェクト交換リポジトリ662からそのタスクオブジェクトを除去することなくそのコピーを入手できる。
【００６４】
技術計算ワーカー270は、タスクオブジェクトのデータ構造から計算する関数の名前及び引数を入手する。すると技術計算ワーカー270は、結果オブジェクトをオブジェクト交換リポジトリ662に書き込む書き込み操作を行うことで計算の結果を与える。結果オブジェクトは、そのデータ構造内でタスクオブジェクトに定義され且つ技術計算ワーカー270に実行された関数の計算結果を定義する。オブジェクト交換リポジトリ662への結果オブジェクトの書き込みは、技術計算クライアント250により登録された通知イベントをトリガする。技術計算クライアント250は結果がオブジェクト交換リポジトリ662に現れるのをリッスンし、通知に応答してテイク操作或いは読み出し操作を実行し、提出されたタスクに関連した結果オブジェクトを入手する。次に、技術計算クライアント250は検索された結果オブジェクトのデータ構造内で定義された結果情報を得る。
【００６５】
図6Bは、ジョブマネージャ265とインターフェースをとる自動タスク分散機構260の動作を示す。この実施形態では、ジョブマネージャ265は、自動タスク分散機構260とのフロントエンド・インターフェースを実現するソフトウェアコンポーネントであり、この代表的な実施形態でJava（登録商標）Spaceオブジェクト交換リポジトリ662である。ジョブマネージャ265は、本発明によるバッチモードの自動タスク分散動作をサポートする。バッチ処理では、複数のタスクは技術計算クライアント250でジョブにグループ化され、次にこのジョブが、技術計算ワーカー270によるタスク分散及びタスク処理のためにジョブマネージャ265に提出される。ジョブマネージャ265が1つ又は複数の技術計算クライアント250A乃至250Nからジョブを受け取ると、ジョブマネージャ265はそのジョブをジョブ待ち行列267に入れる。ジョブ待ち行列267はジョブを保持し且つ整列させるデータ構造で、ジョブの処理中はジョブの状態及び他の属性を維持する。ジョブマネージャ265はジョブを先入れ先出し(FIFO)方式で処理し、ジョブ待ち行列267を管理して、ジョブマネージャ265に最初に受け取られジョブ待ち行列267に入れられたジョブを取り出すようにする。例えば、図6Bに示したジョブ待ち行列267は、ジョブ1、ジョブ2、乃至ジョブnまでのジョブを保持している。ジョブ1は先ずジョブマネージャ265に提出され、次にジョブ待ち行列267の先頭に置かれる。ジョブ2乃至ジョブNは、ＦＩＦＯ待ち行列システムの順番に従ってジョブ待ち行列267におけるそれ以降のジョブとなる。ジョブ1の処理中は、ジョブマネージャ265は次のジョブであるジョブ2の処理を開始しない。開始するのは、ジョブ1からの処理すべきタスクがオブジェクト交換リポジトリ662から無くなってからである。通常の技能を備えた当業者であれば、異なる待ち行列作成及び優先順位機構を備えたジョブ待ち行列を用いて様々なジョブ管理を実施できることは理解するはずである。
【００６６】
図6Bを続けて参照すると、技術計算クライアント250はジョブをジョブマネージャ265に提出し、ジョブマネージャ265とのコールバック関数を指定する。ジョブマネージャ265は、ジョブが完了するとこのコールバック関数を呼び出す。ジョブマネージャ265はジョブ1などのジョブを受け取り、このジョブをジョブ待ち行列267に入れる。次にジョブマネージャ265は、ジョブ待ち行列に提出された第1のジョブから1つ又は複数のタスクを入手する。オブジェクト交換リポジトリ662のJava（登録商標）Space実装の実施形態では、ジョブマネージャ265は、タスクオブジェクトをオブジェクト交換リポジトリ662に書き込む。ジョブマネージャ265はオブジェクト交換リポジトリ662に登録して、このタスクに関連付けられた結果オブジェクトが、スペースとも呼ばれるオブジェクト交換リポジトリ662に現れたときに通知を受け取るようにする。ジョブマネージャ265は結果がオブジェクト交換リポジトリ662に現れるのをリッスンし、待つ。
【００６７】
技術計算ワーカー270はオブジェクト交換リポジトリ662に登録して、タスクオブジェクトがオブジェクト交換リポジトリ662に現れた時にその通知を受け取るようにする。次に、技術計算ワーカー270はタスクオブジェクトの出現をリッスンする。タスクがジョブマネージャ265によりオブジェクト交換リポジトリ662に提出されると、技術計算ワーカー270は通知を受け取り、テイク操作を行うことでオブジェクト交換リポジトリ662からそのタスクを取り出す。技術計算ワーカー270は、実行すべき関数をタスクオブジェクトのデータ構造における関数の定義から入手し、その関数を実行し、そのタスクの関数の結果を生成する。すると、技術計算ワーカー270は、書き込み操作を行うことでタスクの結果を表す結果オブジェクトをオブジェクト交換リポジトリに提出する。結果がオブジェクト交換リポジトリ662に現れるのを待っているジョブマネージャ265は、この結果が入手可能となったという通知をオブジェクト交換リポジトリ662から受け取る。ジョブマネージャ265は、これがオブジェクト交換リポジトリ662から入手される現在処理中のジョブの最後の結果かどうかを調べる。この結果が最後の結果であれば、ジョブマネージャ265は、登録済みコールバック関数を呼び出すことで、このジョブが完了したことを技術計算クライアント250に通知する。コールバック関数の実行に応答して、技術計算ワーカー270はジョブマネージャ265から結果を検索するためジョブマネージャ265とインターフェースをとる。ジョブマネージャ265はテイク操作を行ってオブジェクト交換リポジトリ662からそれら結果を検索する。 
【００６８】
図6Cは、オブジェクト交換リポジトリ662でなくデータベースを用いた、本発明のバッチモード動作の代表的な一実施形態を詳細に示す。この実施形態では、ジョブマネージャ265は自動タスク分散機構260の機能を含んでいる。概括的に説明すると、技術計算クライアント250が技術計算ワーカー270と通信するジョブマネージャ265と通信している。このジョブマネージャ265はジョブ待ち行列267と、自動タスク分散機構260と、ジョブランナー667と、ワーカープール668と、データベース669とを含む。ジョブマネージャ265のこれら構成要素のうち任意のものは、別個のライブラリ、インターフェース、ソフトウェアコンポーネント、又はアプリケーションでよい。代表的な一実施形態では、これら構成要素はマルチタスク機能を実現するため自分自身の処理スレッドで実行可能である。
【００６９】
ワーカープール668は、タスク処理に使用可能な技術計算ワーカー270A乃至270Nのリストを含む。これら技術計算ワーカー270A乃至270Nは、起動時にジョブマネージャ265に登録してもよい。技術計算ワーカー270A乃至270Nが関連付けられたジョブマネージャ265の名前は、技術計算ワーカー270A乃至270Nのインターフェースにより構成可能か、或いはコマンドライン起動パラメータ、又は外部構成若しくは登録ファイルにより構成可能である。ワーカープール668は、「良い」技術計算ワーカー270A乃至270Nのリストを保持する。又、ジョブマネージャ265が通信且つ確認できるワーカーはタスク処理に使用可能となる状態を備えている。ジョブマネージャ265はワーカープール667を更新可能であり、ワーカープール667に登録された技術計算ワーカー270A乃至270Nのリストをチェックしつ、技術計算ワーカー270A乃至270Nそれぞれに通信して、これらのワーカーの状態と可用性を確認することによりこの更新を行う。従って、ワーカープール667を更新して、使用可能或いはジョブマネージャ265からタスクを受信可能な現在の組の技術計算ワーカー667を確認できる。
【００７０】
ジョブランナー667は、作業する次のタスクを特定し、そのタスクを技術計算ワーカー270A乃至270Nに提出する役目を果たす。ジョブランナー667はジョブ待ち行列267と協働し、処理対象となっている次のタスクをジョブ待ち行列267のジョブから取り出す。ジョブランナー667は、ワーカープール668から技術計算ワーカー270A乃至270Nの名前又は参照を入手し、入手した技術計算ワーカー270A乃至270Nに処理のためのタスクを提出する。ジョブランナー667はビジネス規則ロジックを持つように構成して、ジョブ待ち行列267によりサポートされたＦＩＦＯ方式か、優先順位、可用性、タスク、ジョブオプション設定、ユーザ構成などに基づいた他の任意方式でジョブ待ち行列から取り出す次のジョブを特定してもよい。ジョブランナー667はワーカープール668及びジョブ待ち行列267と共に自動タスク分散機構260の機能の一部又は全部を形成できる。ジョブランナー667は、ワーカープール668から、どの技術計算ワーカー270A乃至270Nを割り当て且つどのワーカーにジョブ待ち行列267からタスクを送るべきかを特定するロジックを備えることができる。或いは、別の自動タスク分散機構260が、タスクを割当て且つそのタスクを送る宛先となる技術計算ワーカー270A乃至270Nを特定する役割を果たしてもよい。これら実施形態の何れにおいても、技術計算ワーカー250は、タスクの技術計算の実行に割り当てられた技術計算ワーカー270A乃至270Nのホスト名、インターネットプロトコル・アドレスなどを介した識別情報を知っている必要はない。
【００７１】
ジョブマネージャ265は、ジョブマネージャ、ジョブ及びタスクオブジェクト並びにデータ、本明細書に記載した動作をサポートするための他のオブジェクト及びデータを記憶且つ検索するためのデータベース669も備えている。例えば、データベース669には、ジョブ待ち行列267内のジョブ、ワーカープール668のワーカーリスト、ジョブ待ち行列267内の任意ジョブのタスク、任意タスク、ジョブ、又はジョブマネージャ・オブジェクトのプロパティーを記憶できる。データベース669は、関係型データベース、オラクル(登録商標)社から入手可能なデータベースソフトウェア若しくはアプリケーション又はマイクロソフト(登録商標)社から入手可能なSQLサーバ、或いは本明細書に記載した動作をサポートするデータ及びオブジェクトのタイプを記憶可能な他の任意データベースでよい。データベース669はジョブマネージャ265のインプロセスデータベース669としてよいし、或いは、別の計算装置102’又は他のサーバ260’で使用可能なリモートデータベース669でもよい。更に、ジョブマネージャ265A乃至265Nの各インスタンスは、ジョブマネージャ265A乃至265Nの他のインスタンスとは異なるデータベース及びオペレーティングシステムを使用してもよいし、別のジョブマネージャ265A乃至265Nが別のサーバ160’上のリモートデータベースを使用する一方、ローカルのデータベースを使用することも可能である。通常の技能を備えた当業者であれば、1つ又は複数のジョブマネージャ265A乃至265Nそれぞれが、このように多くの様態でローカル又はリモートデータベースにアクセスできることは理解するはずである。
【００７２】
ジョブマネージャ265は、待ち行列267内のジョブの状態変化に基づいて特定の関数を実行するよう構成できる。例えば、技術計算クライアント250による関数設定によって、ジョブがジョブ待ち行列267に作成された時、ジョブが待ち行列に入れられた時、ジョブがランしている時、又はジョブが完了した時にそうした関数が呼び出されるようにすることも可能である。ジョブマネージャ265は、ジョブの状態に該当する変化が起こった時にこうした関数を呼び出す。同様に、タスク及びジョブは、これらタスク又はジョブの状態変化に基づいて指定した関数を呼び出すように構成できる。例えば、ジョブを構成して、ジョブが待ち行列に加えられた時、タスクが作成された時、タスクが完了した時、又はタスクがランし始めた時に関数を呼び出すようにもできる。タスクが開始された時又はランしている時に、関数を呼び出すようにそのタスクを構成してもよい。
【００７３】
図6Cを続けて参照すると、技術計算クライアント250は、タスク1及びタスク2などの1つ又は複数タスクからなるジョブであるジョブ1をジョブマネージャ265に提出する。ジョブマネージャ265はジョブ1などのジョブを受け取り、このジョブをジョブ待ち行列267に入れる。次にジョブランナー667は、ジョブ待ち行列267に提出された第1のジョブから1つ又は複数のタスクを入手する。技術計算ワーカー270はジョブマネージャ265に登録し、ジョブマネージャ265のワーカープール668にリストアップされている。ジョブランナー667は、ワーカープール668から処理のためタスクを提出すべき技術計算ワーカー270A乃至270Nを特定する。技術計算ワーカー270A乃至270Nは、タスクオブジェクトのデータ構造における関数の定義から実行すべき関数を入手し、その関数を実行し、そのタスクの関数の結果を生成する。次に、技術計算ワーカー270は、このタスクの結果を与えるためタスクオブジェクトを更新する。例えば、このタスクオブジェクトは、タスクにより定義された関数の実行からの出力引数を表すフィールドを備えることができる。この出力引数は、MATLAB(登録商標)のプログラミング言語で許可された1つ又は複数のデータ配列を含むことができる。更に、このタスクオブジェクトはエラーフィールドを含むことができ、そのフィールドは、技術計算ワーカー270A乃至270Nが更新してタスクの実行又はタスクの関数の実行におけるエラー条件を示すことができる。ジョブマネージャ265は、これが技術計算ワーカー270A乃至270Nから入手される現在処理中のジョブの最後の結果かどうかを調べる。この結果が最後の結果であれば、ジョブマネージャ265は、当該組のタスク結果を、完了したジョブとして技術計算クライアント250に与えることができる。
【００７４】
本発明を、ネットワークにおける様々な計算装置上で使用可能な分散ソフトウェアコンポーネントとしてのジョブマネージャ265、自動タスク分散機構260、及び技術計算ワーカー250に関して説明するが、これらソフトウェアコンポーネントは、サービス指向分散アーキテクチャにおけるサービスとしても動作可能である。サービス指向技術アプローチの一実施形態としては、Sun
MicrosystemsのJiniネットワーク技術を使用するものがある。Jiniネットワーク技術はJava（登録商標）Spaces技術及びJini拡張可能リモート呼び出しを含むものであり、ネットワーク中心サービスを作り出すことを可能にするオープンアーキテクチャである。Jini技術は、サービスがネットワークを介して使用可能であることをそのサービス自身に公表させることで分散計算を行う方法を提供する。クライアントや他のソフトウェアコンポーネントはこうした共用宣言されたサービスを発見し、発見したサービスにリモートメソッド呼び出しを行い、こうしたサービスが提供する機能にアクセスできる。従って、MATLAB(登録商標)に基づく分散計算アプリケーションのソフトウェアコンポーネントは、共用宣言を介して発見及びルックアップされうるサービスとして実装できる。
【００７５】
図7を参照すると、Jiniネットワーク技術を用いてサービス指向アプローチを実装する本発明の代表的な一実施形態を示す。システム700を概括すると、技術計算クライアント250、技術計算ワーカー270A乃至270N、ジョブマネージャ265A乃至265N、及び自動タスク分散機構260A乃至260Nは、ネットワーク通信チャンネル130を介してネットワーク140上で通信する。更に、ネットワーク通信チャンネル130を介してネットワーク140と通信するネットワークサーバ760も設けられている。ネットワークサーバ760はコードベースサーバ710のホストとして機能する。代表的な一実施形態では、コードベースサーバ710はファイル転送プロトコルサーバである。別の実施形態では、コードベースサーバ710はJava（登録商標）ウェブサーバ又はhttpサーバのようなウェブサーバである。コードベースサーバ710は、クラス又はインターフェースファイルを含むファイルをアップロード可能で、それを行うよう構成されている。代表的な一実施形態では、コードベースサーバ710はJARフィルをアップロードできる。コードベースサーバ710は、ネットワーク140上のサービスが必要とするクラスファイルを入手するために、ネットワーク140上でJiniに基づくサービスにより使用可能とするか、ネットワーク140上のサービスへのインターフェースを特定するために技術計算クライアント250により使用可能とすればよい。
【００７６】
本発明のソフトウェアコンポーネントをJiniサービスとして実装する補助として、次のJiniサービスの1つ又は複数がネットワーク140上のネットワークサーバ760で利用可能である。それらはレジー718、マハロ716、フィドラー714、及びノーム712である。これらサービスはSun
Technology Jiniネットワーク技術実装の一部である。レジー718は、サービス登録と発見を実現するJiniサービスである。これによりサービスのクライアントは、そのサービスがランしている計算装置の名前を知らなくてもネットワーク140上でそのサービスを見つけることができる。マハロ716は、サービスとそのサービスにアクセスするクライアントとの間に故障許容トランザクションを実現するトランザクションマネジャー・サービスである。フィドラー714はルックアップ発見サービスである。Jiniに基づくサービスがネットワーク140で発見可能となるには、それ自身をレジーのインスタンスに登録する必要がある。フィドラー714のルックアップ発見サービスにより、このサービスは新たなレジーサービスを見つけ、非活動状態の時にそれらに登録できる。ノーム712はリース更新サービスである。レジーに登録したサービスはリースされたものである。登録のリースが満期に達すると、サービスはレジーのインスタンスから利用不能になる。ノームにより、Jiniサービス非活動状態の時に、このサービスはリースの満期到達を防ぐことができる。レジー、マホロ、フィドラー、及びノームのサービスは、これらのサービスを走らせることができるネットワーク140上の任意計算装置102上か、単一のJava（登録商標）仮想マシン(JVM)上で走らせることができるできる。
【００７７】
図7を再び参照すると、技術計算ワーカー270A乃至270NはMATLAB(登録商標)セッションを提供するものであり、本発明の直接タスク分散モードの動作をサポートするためJiniサービスとして利用可能となる。これら技術計算ワーカー270A乃至270Nは、レジー718のようなルックサービスに登録する。これによって、技術計算ワーカー270A乃至270Nを技術計算クライアント250がネットワーク140上で発見可能となる。そしてその際に、技術計算ワーカー270A乃至270Nがその上でランしているワークステーション170A乃至170Nのホスト名や、特定の技術計算ワーカー270A乃至270Nサービスがリッスンするポート番号や、技術計算ワーカー270A乃至270Nに関連付けられたワーカー名などの情報を、技術計算クライアント250は知る必要もない。
【００７８】
技術計算ワーカー270A乃至270Nは、起動デーモン740A乃至740Nソフトウェアコンポーネントによりサービス起動をサポートする。起動によって起動デーモン740A乃至740Bに登録する技術計算ワーカーサービス270A乃至270Nが終了して非活動状態となっても、技術計算クライアント250にはなお利用可能とすることができる。図3A乃至3Cに具体的に示した３つの全ての分散動作モードでは、MATLAB(登録商標)に基づいた技術計算ワーカー270A乃至270Nは起動デーモン740A乃至740Nにより起動できる。すなわち、起動デーモン740A乃至740Nは、技術計算ワーカー270A乃至270Nを開始させ停止させる。例えば、技術計算ワーカー270Aサービスは、ワークステーション170A上の起動デーモン740Aに登録する。技術計算ワーカー270Aは、活動状態、非活動状態、及び削除状態からなる起動状態を含む。活動状態では、技術計算ワーカー270Aは起動され、技術計算クライアント250からのリモートメソッド呼び出しに関して利用可能である。このサービスの開始及びリモートメソッド呼び出しに関するその可用性、又はこのサービスの実行のインスタンスをセッションと呼ぶことができる。非活動状態では、技術計算クライアント250は起動されていないが、技術計算クライアント250からのリモートメソッド呼び出しに関しては利用可能である。技術計算ワーカーサービス270Aへのリモートメソッド呼び出しが技術計算クライアント250により実行されると、技術計算ワーカーサービス270Aが起動デーモン740Aにより開始され、このメソッド呼び出しは技術計算ワーカーサービス270Aにより実行される。削除状態では、技術計算ワーカー270Aサービスはランしておらず、起動デーモン740Aに登録されていない。この状態では、技術計算ワーカーサービス270Aは起動されておらず、技術計算クライアント270からのリモートコールに関して使用不可能である。従って、起動デーモン740A乃至740Nは持続的な有効性があり、技術計算ワーカーサービス270A乃至270Nの状態を維持する。
【００７９】
技術計算ワーカーサービス270A乃至270Nの起動機能は、その技術計算ワーカーのホストとして働くワークステーションの計算資源を節約し、サービスの信頼性を向上する。例えば、技術計算ワーカーサービス270Aが突然終了した場合、起動デーモン740Aはそれに対する次の呼び出しがあった時に自動的に再起動する。又、起動デーモン740A乃至740Nは技術計算ワーカーサービス270A乃至270Nの優雅な終了も可能とする。非活性化コマンドが技術計算ワーカーサービス270A乃至270Nに送られた場合、技術計算ワーカーサービス270A乃至270Nは終了前に未処理のメソッド呼び出しを完了できる。或いは、タスク処理の最中に即座の終了を強制するコマンドを技術計算ワーカー270A乃至270Nに送ることもできる。更に、一実施形態では、技術計算ワーカー270Aが、タスク処理の完了後にシャットダウンするよう構成且つ制御できる。技術計算ワーカー270Aがシャットダウンしない場合、計算又は他のワークスペース情報を含んだ当該技術計算環境の状態を、処理する次のタスクのためそのままに維持するようにも構成できる。
【００８０】
技術コンピュータワーカサービスの別の実施形態では、技術計算ワーカーサービス270A乃至270Nは開始時に、起動デーモン740A乃至740N又は他の従来の手段によりデフォルトで非デバッグモードとすることができる。別法では、起動デーモン740A乃至740N及び／又は技術計算ワーカーサービス270A乃至270Nを構成してデバッグモードで起動し、技術計算ワーカーサービス270A乃至270Nのコマンドライン・インターフェースにアクセスを可能としてもよい。
【００８１】
技術計算ワーカーサービス270A乃至270Nに似た様態で、ジョブマネージャ265A乃至265N及び自動タスク分散機構260A乃至260Nは図7に示したようにサービスとして実装できる。従って、ジョブマネージャ265A乃至265N及び自動タスク分散機構260A乃至260Nはルックアップ登録及び発見をサポートし、技術計算クライアント250Aがサービスを見つける際に、サービスの関連付けられた名前、サービスをランするサーバ160のホスト名、又はサービスがリッスンしているポート名を知らなくてもよい。更に、ジョブマネージャ265A乃至265N及び自動タスク分散機構260A乃至260Nは、技術計算ワーカーサービス270A乃至270Nと同様に起動デーモンによりサポートできる。
【００８２】
本発明の別の様態では、技術計算ワーカーサービス270A乃至270N、ジョブマネージャ265A乃至265N、及び自動タスク分散機構260A乃至260Nのサービスは、上述の動作関数に加え管理関数を含むことができる。管理関数はサービスの現在の状態を判断し、サービスにデバッグ関数を呼び出し、又はサービスから利用可能な特定の方法を手動で呼び出すような機能を含むことができる。図7に示したように、技術計算ワーカーサービス270A乃至270Nはそれぞれ技術計算ワーカー管理ソフトウェアコンポーネント740A乃至740Bを含むことができ、ジョブマネージャ265A乃至265Nはそれぞれジョブマネージャ管理ソフトウェアコンポーネント730A乃至730Bを含むことができ、自動タスク分散機構260A乃至260Nはそれぞれ管理ソフトウェアコンポーネント760A乃至760Nを含むことができる。これらのうち何れの管理ソフトウェアコンポーネントも、対応するサービスの一部か、別個のソフトウェアコンポーネントか、それ自体が別のサービスでよい。更に、これら管理ソフトウェアコンポーネントは、サービスを容易に管理するためのグラフィカルユーザ・インターフェースを含むことができる。ユーザは、このグラフィカルユーザ・インターフェースから管理コンポーネントが提供する機能及び／又はこのサービスが提供する方法の一部又は全部を実行できる。これら管理機能の全てを技術計算クライアント250のユーザにとって使用可能とする必要はなく、システム管理者又はそうした機能に何らかのアクセス権を持つユーザのみに利用可能としてもよい。例えば、自動タスク分散機構260Aの管理コンポーネント760Aは、この自動タスク分散機構に現在あるタスク及び結果を示すグラフィカルビューを示すようにしてもよい。更に、このコンポーネントは、自動タスク分散機構に出入りするタスクと結果の動きを、そうしたタスクと結果の発信源と宛先とともに表示してもよい。更に、ユーザ定義データクラスで後述するように、このグラフィカルユーザ・インターフェースにより、ユーザは任意プロパティーの組を設定し、オブジェクト交換リポジトリ664又はスペースへのオブジェクト指向インターフェースで説明した任意方法を実行可能である。
【００８３】
別の例では、ジョブマネージャ管理ソフトウェアコンポーネント730Aは、ジョブマネージャ265のジョブ待ち行列267にある全てのジョブのグラフィカルビューを示すことができる。これは更に、ジョブの状態と、そのジョブを構成するタスクそれぞれの実行状態を示してもよい。このグラフィカルユーザ・インターフェースにより、ユーザは、ジョブを追加、修正、又は削除したり、待ち行列267内のジョブの順番を整理したりすることでジョブの管理が可能になる。更に、ユーザ定義データクラスで後述するように、このグラフィカルユーザ・インターフェースによってユーザは任意のプロパティーを設定し、ジョブマネージャ265へのオブジェクト指向インターフェースで説明した任意方法を実行可能である。
【００８４】
技術計算ワーカー管理コンポーネント740A乃至750Nへのグラフィカルユーザ・インターフェースは、ユーザに、起動状態を変更したり、技術計算ワーカーサービス270A乃至270Nを停止且つ開始、又はデバッグしたりする機能を提供する。更に、ユーザ定義データクラスで後述するように、このグラフィカルユーザ・インターフェースによってユーザは任意プロパティーを設定し、技術計算ワーカーサービス270A乃至270Nへのオブジェクト指向インターフェースで説明した任意方法を実行可能である。
【００８５】
本発明の別の様態では、オブジェクトを用いて、本分散システムのタスク及びジョブ管理機能とオブジェクト指向ユーザ対話を実行する。図8Aは、ユーザ定義データクラスをMATLAB(登録商標)プログラミング言語の一部として用いる一実施形態を示す。本発明のオブジェクト指向分散システム800の実施形態では、システム800は、タスクオブジェクト810、結果オブジェクト812、ジョブオブジェクト814、及びジョブ結果オブジェクト816を利用する。これらオブジェクトは、システム800のタスク分散機能と対話するより低いレベルのユーザ対話機構を提供する。図8Aのオブジェクト指向分散システム800では、技術計算クライアント250はタスクオブジェクト810を作成又は宣言する。タスクオブジェクト810は、MATLAB(登録商標)コマンド、入力データ、及び引数の数を含んだユーザ定義データクラスである。自動動作モードでは、技術計算クライアント250が、このタスクオブジェクトを自動タスク分散機構260に提出すると、この機構260がタスクオブジェクト810をオブジェクト交換リポジトリ662に記憶する。タスクオブジェクト810のオブジェクト交換リポジトリ662での出現をリッスンし且つ待っている技術計算ワーカー270は、タスクオブジェクト810を取り出し、このタスクに技術計算を行う。技術計算ワーカー270は、MATLAB(登録商標)コマンド及び引数をタスクオブジェクト810のプロパティーから入手して、このコマンドに従ってタスクに技術計算を行う。すると、技術計算ワーカー270は結果オブジェクト812を作成又は指定する。このオブジェクトは、タスクオブジェクト810により表されるタスクの実行から得られる出力データを含んだユーザ定義データオブジェクトである。次に技術計算ワーカー270は、結果オブジェクト812をオブジェクト交換リポジトリ662に書き込む。技術計算クライアント250は、オブジェクト交換リポジトリ662への結果オブジェクト812の出現をリッスンし、待つ。結果オブジェクト812がオブジェクト交換リポジトリに出現すると、技術計算クライアント250は結果オブジェクト812をこのオブジェクト交換リポジトリから検索し、結果オブジェクト812のプロパティーから結果情報を検索する。
【００８６】
図8Aを続けて参照すると、バッチモードでは、技術計算クライアント250はジョブオブジェクト814を作成又は宣言する。このオブジェクトは、タスクオブジェクト810のオブジェクト配列を含んだユーザ定義データオブジェクトである。次に、技術計算クライアント250は、ジョブオブジェクト814をジョブマネージャ265に処理のため提出する。すると、ジョブマネージャ265は、ジョブオブジェクト814内に定義されている1つ又は複数のタスクオブジェクト820を、技術計算ワーカー270により処理させるためにオブジェクト交換リポジトリ662に提出する。タスクオブジェクト820が現れるのをリッスンしている技術計算ワーカー270は、タスクオブジェクト820を取り出し、各タスクオブジェクトに定義されている関数に技術計算を行う。次に、技術計算ワーカー270は結果を生成し、ジョブオブジェクト814の各タスクオブジェクト820の各関数について生成された出力を表す結果オブジェクト822を作成又は指定する。次に技術計算ワーカー270は、結果オブジェクト822をオブジェクト交換リポジトリ662に書き込む。結果オブジェクト822が現れるのをリッスンしているジョブマネージャ265は、オブジェクト交換リポジトリ662から結果オブジェクトを取り出す。するとジョブマネージャ265はジョブ結果オブジェクト816を作成又は指定する。このオブジェクトは、ジョブオブジェクト814内に定義されている各タスクオブジェクトに関する結果オブジェクト816の配列を与えるオブジェクトである。次にジョブマネージャは、ジョブ結果オブジェクト816を技術計算クライアント250に与える。通常の技能を備えた当業者であれば、図4に示したように、多数の分散モードを実行するに当たりこれらオブジェクトそれぞれの使用を様々に組合せ可能なことは理解するはずである。
【００８７】
図8Aに示した本発明の一実施形態では、例えば、次の関数及びプロパティーが、タスク分散管理機能のためにMATLAB(登録商標)のツールボックス関数を介してMATLAB(登録商標)のプログラミング言語で使用可能である。
【００８８】
0005442999.tif 000002
【００８９】
0005442999.tif 000003
【００９０】
0005442999.tif 000004
【００９１】
0005442999.tif 000005
【００９２】
0005442999.tif 000006
【００９３】
0005442999.tif 000007
【００９４】
0005442999.tif 000008
0005442999.tif 000009
【００９５】
0005442999.tif 000010
【００９６】
0005442999.tif 000011
0005442999.tif 000012
【００９７】
0005442999.tif 000013
【００９８】
0005442999.tif 000014
0005442999.tif 000015
0005442999.tif 000016
【００９９】
0005442999.tif 000017
0005442999.tif 000018
【０１００】
0005442999.tif 000019
【０１０１】
0005442999.tif 000020
0005442999.tif 000021
【０１０２】
0005442999.tif 000022
【０１０３】
0005442999.tif 000023
0005442999.tif 000024
【０１０４】
0005442999.tif 000025
0005442999.tif 000026
【０１０５】
次の方法は、MATLABプログラミング環境のパッケージで一般的に使用可能な方法であり、この代表的な実施形態ではユーザ定義データクラスとして実装されていない。
【０１０６】
0005442999.tif 000027
【０１０７】
図7に示したように、上述のパッケージ範囲方法(原語:package
scope methods)を用いて、技術計算ワーカー270A乃至270Nや、スペースや、自動タスク分散機構260A乃至260Nや、ジョブマネージャ265A乃至265Nのサービスを見つける。これらの方法を用いれば、技術計算クライアント250は、技術計算ワーカー270A乃至270Nや、自動タスク分散機構260A乃至260Nや、ジョブマネージャ265A乃至265Nについて事前に把握している必要はない。技術計算クライアント250はこれらの方法を用いて、ネットワーク140上で利用可能なこうしたサービスの名前と数を見つけることができる。
【０１０８】
本発明の環境では、MATLAB（登録商標）のプログラミング言語は、図3A乃至3Cに示したような3つ動作モードをサポートできる。一例として、次のプログラム命令は、これら3つの動作モードそれぞれに関する上述のユーザ定義データクラスのプログラミング使用を示す。
【０１０９】
直接分散における使用例
% ワーカーを見つける
w =
distcomp.Worker(‘MachineName’)
% タスクの作成
t =
distcomp.Task({‘rand’,10},1);
% (オプション)ワーカーに関して完了コールバックを登録する
w.TaskCompletedFcn
= ‘completedFcn’;
% (オプション)タスクのタイムアウト値を設定
t.Timeout = 10;
% タスクをワーカーに送る
w.evaluateTask(t);
% 結果を得る(完了コールバック関数内で実行可能)
r =
w.getResult(t);
【０１１０】
自動分散における使用例
% スペースを見つける
s =
distcomp.Space(‘spacename’)
% タスクの作成
t =
distcomp.Task({‘rand’,10},1)
% (オプション)スペースに関して完了コールバックを登録する
s.TaskCompletedFcn
= ‘completedFcn’;
% (オプション)タスクのタイムアウト値を設定
t.timeout = 10;
% タスクをスペースに置く
s.putTask(t);
% 結果をスペースから得る(結果リスナー内部にある可能性あり)
r =
s.getResult(t);
【０１１１】
バッチ処理における使用例
% ジョブマネージャを見つける
jm =
distcomp.JobManager(‘managername’)
% ジョブを作成
j = distcomp.Job(‘username’,’jobname’)
% (オプション)ジョブ完了に関してコールバックを登録する
j.JobCompletedFcn
= ‘callbackFcn’;
% タスクをジョブに追加
for(i=1:10)
t =
distcomp.Task({‘rand’,10},1);
% (オプション)タスクに関して完了コールバックを登録する
t.CompletedFcn
= ‘callbackFcn’;
% (オプション)タスクのタイムアウト値を設定
t.Timeout
= 10;
j.addTask(t);
end
jm.submit(j)
% 結果をジョブマネージャから得る
for(i=1:10)
r =
jm.getResult(j.Tasks{i});
% 結果を処理するコードをここに挿入
end
【０１１２】
本分散システムのタスク及びジョブ管理機能へのオブジェクト指向インターフェースに加え、MATLAB（登録商標）のプログラミング言語は、高レベル関数型手続き呼出しを介してタスク分散もサポートする。MATLAB（登録商標）プログラミング言語は、関数を実行する高速で強力な手続きを提供するeval()及びfeval()のような手続き関数を含む。又、MATLAB（登録商標）プログラミングにより、ユーザは、一連のMATLAB（登録商標）ステートメントをMファイルと呼ばれるファイルに書き込み、単一のコマンドでそのファイル中のステートメントを実行できる。Mファイルは、一連のMATLAB（登録商標）ステートメントを単純に実行するスクリプトでよく、或いは、入力引数を受け取り且つ出力を生成する関数でよい。更に、MATLAB（登録商標）プログラミング言語は、匿名関数や関数ハンドルをサポートする。関数ハンドルは、ユーザの関数呼び出しがその作成時とは異なるワークスペース文脈内で実行する際に、ユーザがその呼出し中のその関数を他の関数に渡したいときに有用である。匿名関数は、いちいちMファイルを作成しなくとも単純な関数を作成する迅速な手段をユーザに与えるもので、関数ハンドルの特別なサブセットとして考えることもできる。匿名関数は、MATLAB（登録商標）コマンドライン又は任意のMファイル関数若しくはスクリプトで作成できる。匿名関数は、任意のMATLAB（登録商標）関数へのアクセスも与える。@記号は、関数ハンドル又は匿名関数を作成するMATLAB（登録商標）演算子であり、ユーザにとって当該関数を呼び出す手段となる。更に、MATLAB（登録商標）プログラミング言語は、特定の事象にコールバック関数を関連付けることを可能とし、これは適切なコールバックプロパティーの値を設定して行う。変数名、関数ハンドル、セル配列又はストリングをこのコールバックプロパティーの値として指定できる。MATLAB（登録商標）に基づいた分散計算アプリケーションに関連付けられたオブジェクトのコールバックプロパティーは、上述の任意構成をコールバックプロパティーの値として受け取るように設計されており、又、MATLAB（登録商標）プログラミング言語で利用できる或いは可能となりうる他の任意コマンド、関数、又は入力パラメータ値を受け入れ可能である。これによって、MATLAB（登録商標）プログラミング言語のユーザは、このオブジェクト指向機構を学習することなく自分がよく知っている関数呼び出しを使用でき、本発明のMATLAB（登録商標）に基づく分散計算アプリケーションが提供するタスクの分散処理を利用できる。
【０１１３】
図8Bの代表的なオブジェクト指向分散システム805では、技術計算クライアント250は、ジョブマネージャ265に存在するジョブオブジェクト860を作成又は宣言する。このジョブオブジェクトは、1つ又は複数のタスクオブジェクト870A乃至870Nを含む。ジョブオブジェクト860は、後に詳述するジョブプロパティーのようなジョブに関連付けたプロパティーを定義する。例えば、ジョブ完了の制限時間を指定する時間切れプロパティーがある。更に、ジョブのタスクを実行する技術計算ワーカーの最大数及び最小数を指定できるタスクオブジェクト870A乃至870Nは、技術計算ワーカー270が実行する関数を定義するオブジェクトである。この関数は、MATLAB(登録商標)コマンド、入力データ、及び引数の数を含む。タスクオブジェクト870A乃至870Nは、後述するような付加的なタスクプロパティーを定義する。例えば、タスクオブジェクト870A乃至870Nは、タスクの現在の状態を示す状態プロパティーを備えることができる。更に、技術計算クライアント250が、ジョブマネージャ265上に存在するジョブマネージャオブジェクト865を介してジョブマネージャ265とインターフェースをとることができる。ジョブオブジェクト860及びタスクオブジェクト870A乃至870Nに類似の様態で、ジョブマネージャオブジェクト865は、後述するようにジョブマネージャ265についての構成及び他の詳細を定義するプロパティーを備えることができる。例えば、ジョブオブジェクト865は、ジョブ待ち行列が存在するコンピュータの名前を示すホスト名プロパティーや、このコンピュータのインターネットプロトコル・アドレスを示すホストアドレスプロパティーを備えることができる。任意のジョブマネージャオブジェクト865、ジョブオブジェクト860、又はタスクオブジェクト870A乃至870Nに関しては、技術計算クライアントは、ローカルオブジェクトをインスタンス生成せず、ジョブマネージャ265内に存在するオブジェクトを参照する代理又はファサードオブジェクトのみを備えるともある。
【０１１４】
図8Bを続けて参照すると、技術計算クライアント250はジョブを、ジョブオブジェクト865を介してジョブマネージャ265に提出する。ジョブマネージャ265は、ジョブオブジェクト865からタスクオブジェクト870A乃至870Nそれぞれを入手する。ジョブマネージャは、ジョブオブジェクト860のこのジョブをジョブ待ち行列267に入れる。ジョブランナー667は、ジョブオブジェクト860からこれら１つ又は複数タスクオブジェクト870A乃至870Nを入手する。ワーカープール668を備えたジョブランナー667は、タスクを処理すべき技術計算ワーカー270を特定する。すると、ジョブランナー667は、割り当てられた技術計算ワーカー270にタスクオブジェクト870A乃至870Nを介してタスクを提出する。技術計算ワーカー270は、タスクオブジェクト870A乃至870Nのプロパティーから実行すべき関数を入手して、その関数に従ってタスクに技術計算を行う。次に、技術計算ワーカー270はこの関数の結果を入手し、タスクオブジェクト870A乃至870Nの１つ又は複数のプロパティーをこれら結果に関する情報で更新する。エラーがあれば、技術計算ワーカー270はタスクオブジェクト870A乃至870Nの任意エラープロパティーを更新する。技術計算クライアント250と類似の様態で、技術計算ワーカー270は、ジョブマネージャ265内に存在するジョブ860、ジョブマネージャ865、又はタスク870A乃至870Nとインターフェースをとる代理又はファサードオブジェクトを使用できる。次に、ジョブマネージャ265は、各タスクの結果を含む更新済みタスクオブジェクト870A乃至870Nでジョブオブジェクト860を更新する。又、ジョブマネージャ265は、ジョブオブジェクト860の他のプロパティー（このジョブの開始及び終了時刻など）を更新して、このジョブの他の情報又は状態を反映できる。次に、ジョブマネージャ265は、更新済みジョブオブジェクト860を技術計算クライアント250に与える。すると技術計算クライアント250は、更新済みジョブオブジェクト860から各タスクの結果を検索可能である。通常の技能を備えた当業者であれば、本明細書に記載した動作を実行するにあたり、また図4に示したような多数の分散モードを実行又はサポートするにあたり、これらオブジェクトのプロパティーと関数の使用を様々に組合せ可能なことは理解するはずである。
【０１１５】
図8Bに示した本発明の代表的な一実施形態では、例えば、本発明のタスク分散及び管理機能に関連したオブジェクトを作成及び処理するため、次の関数及びプロパティーがMATLAB(登録商標)のプログラミング言語で利用可能である。
【０１１６】
関数参照
createJob
目的          ジョブオブジェクトの作成
構文          obj
= createJob(jobmanager)
obj =
createJob(..., 'p1', v1, 'p2', v2, ...)
引数          obj           ジョブオブジェクト。
jobmanager  ジョブを実行するジョブマネージャサービスを表すジョブマネージャ・オブジェクト。
p1, p2          オブジェクト作成時に構成されるオブジェクトプロパティー。
v1, v2          対応するオブジェクトプロパティーの初期値。
説明        obj =
createJob(jobmanager)は、指定されたリモート位置でジョブオブジェクトを作成する。この場合、このジョブオブジェクトを後で修正すると、ジョブマネージャにリモート呼び出しがなされる。
obj = createJob(..., 'p1',
v1, 'p2', v2, ...)は指定されたプロパティー値でジョブオブジェクトを作成する。無効なプロパティー名やプロパティー値が指定されると、そのジョブは作成されない。
プロパティー値ペアは、param-value文字列ペア、構造、及びparam-valueセル配列ペアなど、集合関数でサポートされる任意形式でよいことに注目されたい。
例            %
ジョブオブジェクトを構成する。
jm =
findResource('jobmanager');
obj =
createJob(jm, 'Name', 'testjob');
% タスクをジョブに加える。
for
i=1:10
createTask(obj,
'rand', {10});
end
% ジョブを走らせる。
submit(obj);
% ジョブの結果を検索する。
out =
getAllOutputArguments(obj);
% 乱雑行列を表示する。
disp(out{1}{1});
% ジョブを削除する。
destroy(obj);
【０１１７】
createTask
目的          ジョブ内に新しいタスクを作成する。
構文   obj =
createTask(j, functionhandle, numoutputargs, inputargs)
obj =
createTask(..., 'p1',v1,'p2',v2, ...)
引数          j                    タスクオブジェクトが内部に作成されたジョブ。
functionhandle    タスクを評価する時に呼び出される関数のハンドル。
numoutputargs     タスク関数の実行から返される出力引数の数。
inputargs         関数functionhandleに渡される入力引数を指定する行セル配列。セル配列の各要素は別々の入力引数として渡される。
p1, p2          オブジェクト作成時に構成されるタスクオブジェクトプロパティー。
v1, v2          対応するタスクオブジェクトプロパティーの初期値。
説明          obj
= createTask(j, functionhandle, numoutputargs, inputargs)は
ジョブj内に新たなタスクオブジェクトを作成し、参照objを追加タスクオブジェクトに返す。
obj = createTask(..., 'p1',v1,'p2',v2,
...)は、指定されたプロパティー値でタスクオブジェクトを加える。無効なプロパティー名やプロパティー値が指定されると、そのジョブは作成されない。
プロパティー値ペアは、param-value文字列ペア、構造、及びparam-valueセル配列ペアなど、集合関数でサポートされる任意形式でよいことに注目されたい。
例            %
ジョブオブジェクトを作成する。
jm =
findResource('jobmanager');
j =
createJob(jm);
% 10x10乱雑行列を生成する評価対象となるタスクオブジェクトを加える。
obj =
createTask(j, @rand, {10,10});
% ジョブを走らせる。
submit(j);
% タスク評価から出力を得る。
taskoutput
= get(obj, 'OutputArguments');
% 10x10乱雑行列を表示する。
disp(taskoutput{1});
【０１１８】
destroy
目的          ジョブ又はタスクオブジェクトをその親及びメモリから削除する。
構文          Destroy(obj)
引数          obj    メモリから削除されるジョブ又はタスクオブジェクト。
説明        destroy(obj)はローカルセッションからジョブオブジェクト参照又はタスクオブジェクト参照objを削除し、オブジェクトをジョブマネージャ・メモリから削除する。objが削除されると、それは無効オブジェクトとなる。無効オブジェクトは、消去コマンドでワークスペースから削除すべきである。オブジェクトの複数の参照がワークスペース内に存在すると、そのオブジェクトの1つの参照を削除することによりそのオブジェクトの残りの参照が無効となる。これら残りの参照は、消去コマンドでワークスペースから消去すべきである。ジョブオブジェクトが削除されると、ジョブに含まれるタスクオブジェクトも削除される。これは、これらタスクオブジェクトの任意参照も無効となることを意味する。仮にobjがジョブオブジェクトの配列で、それらオブジェクトの1つを削除できない場合は、配列内の残りのオブジェクトが削除され、警告が戻される。
注          ユーザがオブジェクトを削除するとそのデータも失われるので、destroyの使用は、出力データをジョブオブジェクトから検索してからとすべきである。
例            %
ジョブとそのタスクを削除する。
jm =
findResource('jobmanager');
j =
createJob(jm, 'Name', 'myjob');
t =
createTask(j, @rand, {10});
destroy(j);
clear
j
タスクtもジョブjの一部として削除されることに注目されたい。
【０１１９】
destroyAllTasks
目的          ジョブの全タスクをジョブオブジェクト又はメモリから削除する。
構文          destroyAllTasks(obj)
引数          obj    そのタスクが削除されるジョブオブジェクト。
説明        destroyAllTasks(obj)は、ジョブオブジェクトobjから全てのタスクを削除する。ジョブそのものは残り、ユーザは更にタスクをジョブに追加できる。(比較していえば、ジョブにdestroyを使うとジョブオブジェクト全体が削除される。)
【０１２０】
findJob
目的          ジョブマネージャに格納されているジョブオブジェクトを見つける
構文          findJob(jm)
out =
findJob(jm)
[pending
queued running finished] = findJob(jm)
out =
findJob(jm, 'p1', v1, 'p2', v2,...)
引数          jm     その内部でジョブを見つけるジョブマネージャ・オブジェクト。
pending  そのStateが保留中となっているジョブマネージャjm内のジョブ配列。
queued   そのStateが待機となっているジョブマネージャjm内のジョブ配列。
running  そのStateがラン中となっているジョブマネージャjm内のジョブ配列。
finished        そのStateが完了となっているジョブマネージャjm内のジョブ配列。
out      ジョブマネージャjm内に見つかるジョブ配列。
p1, p2          一致するジョブオブジェクト・プロパティー。
v1, v2          対応するオブジェクトプロパティーの値。
説明        findJob(jm)は、ジョブマネージャjm内に記憶されている全てのジョブオブジェクトのリストをプリントアウトする。ジョブオブジェクトはそのStateプロパティーにより分類され、「待機」状態のジョブオブジェクトは、次に実行されるジョブを先頭(第1)として待ち行列に入れられた順番で表示される。out
= findJob(jm)は、ジョブマネージャjm内に記憶されている全ジョブオブジェクトの配列outを返す。この配列中のジョブは、「pending」、「queued」、「running」、「finished」の順番でStateによって整理される。「queued」状態内では、ジョブは待ち行列に入れられた順番でリストアップされている。[pending
queued running finished] = findJob(jq)は、stateによってジョブマネージャjm内に記憶されている全ジョブオブジェクトの配列を返す。待機配列内のジョブは待ち行列に入れられた順番で待機しており、queued(1)のジョブが次に実行される。out
= findJob(jm, 'p1', v1, 'p2', v2,...)は、そのプロパティー名及びプロパティー値がパラメータ値ペアp1,
v1, p2, v2として渡されたものに一致するジョブオブジェクトの配列outを返す。
プロパティー値ペアは、param-value文字列ペア、構造、及びparam-valueセル配列ペアなど、取得関数でサポートされる任意形式でよいことに注目されたい。構造を使う場合は、構造フィールド名はジョブオブジェクト・プロパティー名で、フィールド値は要求されたプロパティー値である。待機状態のジョブはジョブ待ち行列サービスに現れる順番で返される。プロパティー値が指定されている場合は、取得関数が返すものと同一形式を使わなければならない。例えば、取得がMyJobというNameプロパティー値を返すならば、myjobというNameプロパティー値を探している間は、findJobはそのオブジェクトを見つけない。
【０１２１】
findResource
目的          使用可能なMATLAB(登録商標)に基づくアプリケーション資源を見つける。
構文          findResource('type')
out =
findResource('type')
out =
findResource('type', 'p1', v1, 'p2', v2,...)
引数          out           返されるオブジェクト又は複数オブジェクトの配列
p1, p2          一致するオブジェクトプロパティー。
v1, v2          対応するオブジェクトプロパティーの値。
説明        findResource('type')は、ジョブを走らせる能力がある、文字列typeで与えられるタイプの使用可能な全てのMATLAB(登録商標)に基づく分散計算アプリケーション資源のリストを表示する。可能なタイプには、「jobmanager」、「localsession」、「mlworker」が含まれる。findResource('type')は、文字列typeで与えられる使用可能な全てのMATLAB(登録商標)に基づく分散計算アプリケーション資源を表すオブジェクトを含む配列outを返す。out
= findResource('type','p1', v1, 'p2', v2,...)は、そのプロパティー名及びプロパティー値が、パラメータ値ペアp1,
v1, p2, v2として渡されたものに一致する与えられたtypeの資源の配列outを返す。プロパティー値ペアは、param-value文字列ペア、構造、及びparam-valueセル配列ペアなど、取得関数でサポートされる任意形式でよいことに注目されたい。構造を使う場合は、構造フィールド名はオブジェクトプロパティー名で、フィールド値は要求されたプロパティー値である。プロパティー値が指定されている場合は、取得関数が返すものと同一形式を使わなければならない。例えば、取得がMyJobManagerというNameプロパティー値を返すならば、myjobmanagerというNameプロパティー値を探している間は、findResourceはそのオブジェクトを見つけない。
注          サポートされている資源タイプはjobmanagerだけである。幾つかのパラメータ値ペアはローカルマシーンで問い合わせを受け、他のパラメータ値ペアは、問い合わせのためジョブマネージャを直接呼び出す必要がある。ジョブマネージャを呼び出す必要があるパラメータ値ペアは、見つけるためにローカルで問い合わせできる「type」Typeの資源よりも問い合わせが長くかかる。ローカルで知られているプロパティーはType、Name、HostName、Addressである。findResourceへの同一呼び出しにおいて、パラメータ値文字列ペア、構造、及びパラメータ値セル配列ペアの使用は許可されていることに注目されたい。
例     jm1
= findResource('jobmanager', 'Name', 'jobmanager1name');
jm2 =
findResource('jobmanager', 'Name', 'jobmanager2name');
【０１２２】
findTask
目的          ジョブオブジェクトに属するタスクオブジェクトを取得する
構文          tasks
= findTask(obj)
tasks
= findTask(obj, range)
tasks
= findTask(obj, 'p1', v1, 'p2', v2, ...)
引数          obj           ジョブオブジェクト。
range           どのタスクを返すかを指定する索引のスカラー又はベクトルリスト。
tasks 返されたタスクオブジェクト。
p1, p2          一致するタスクオブジェクト・プロパティー。
v1, v2          対応するオブジェクトプロパティーの値。
説明tasks = findTask(obj)
and tasks = findTask(obj, range)は、ジョブオブジェクトobjに属するタスクを取得する。ここで、rangeはどのタスクを返すかを指定する索引のスカラー又はベクトルリストである。tasks
= findTask(obj, 'p1', v1, 'p2', v2, ...)は、ジョブオブジェクトobjに属するタスクオブジェクトの1xN配列を取得する。返されるタスクオブジェクトは、指定されたプロパティー値ペアを備えたもののみとなる。プロパティー値ペアは、param-value文字列ペア、構造、及びparam-valueセル配列ペアなど、取得関数でサポートされる任意形式でよいことに注目されたい。構造を使う場合は、構造フィールド名はオブジェクトプロパティー名で、フィールド値は要求されたプロパティー値である。プロパティー値が指定されている場合は、取得関数が返すものと同一形式を使わなければならない。例えば、取得がMyTaskというNameプロパティー値を返すならば、mytaskというNameプロパティー値を探している間は、findTaskはそのオブジェクトを見つけない。
注          objがリモートサービスに含まれている場合、findTaskを使うとそのリモートサービスが呼び出される。検索したタスクの数及びネットワークの速度によっては、これにより、findTaskが完了に長時間を要する可能性がある。又、このリモートサービスが使用不可能でない場合、エラーとなる。
objがリモートサービスに含まれている場合、findTaskがブロック化している時に、ユーザは^C (コントロール-C)を出すことができる。これにより制御はMATLABに返される。この場合、データ取得には別のリモート呼び出しが必要となる。
例            %
ジョブオブジェクトを作成する。
jm =
findResource('jobmanager');
obj =
createJob(jm);
% タスクをジョブオブジェクトに加える。
createTask(obj,
@rand, {10})
% 先ほどobjに加えたタスクにtを割り当てる。
t =
findTask(obj, 1)
【０１２３】
getAllOutputArguments
目的          ジョブオブジェクト内の全タスクの評価から出力引数を検索する。
構文          data
= getAllOutputArguments(obj)
引数          obj    そのタスクが出力引数を生成するジョブオブジェクト。
data     ジョブ結果のセル配列。
説明        data =
getAllOutputArguments(obj)は、完了ジョブのタスクに含まれる出力データを返す。1xNセル配列の各要素は、ジョブ内の対応するタスクの出力引数を含んでいる。すなわち、各要素はセル配列である。タスクの出力引数が返されない場合は、その要素はプレースホルダーとしての空セル配列を含む。
データにおける要素の順番は、ジョブに含まれるタスクの順番と同一である。
注          検索しているデータ量及びネットワークの速度によっては、getAllOutputArgumentsはリモートサービスを呼び出すことになり、完了に長時間を要する可能性がある。又、リモートサービスが使用不可能でない場合、エラーとなる。getAllOutputArguments
がブロック化している時に、ユーザは^C (コントロール-C)を出すことができる。これはデータ検索を停止させないが、制御はMATLABに返される。この場合、データ取得には別のリモート呼び出しが必要となる。getAllOutputArgumentsに呼び出しを発しても、出力データが記憶されている場所からそのデータを削除することにはならないことに注意されたい。出力データを削除するには、削除関数を用いてタスク又はその親ジョブオブジェクトを削除するか、destroyAllTasksを用いる。
例     jm
= findResource('jobmanager');
j =
createJob(jm, 'Name', 'myjob');
t =
createTask(j, @rand, {10});
submit(j);
data =
getAllOutputArguments(t);
% 10x10の乱雑行列を表示する。
disp(data{1});
destroy(j);
【０１２４】
submit
目的          ジョブをジョブ待ち行列サービスに入れる
構文          submit(obj)
引数          obj    待ち行列に入れるジョブオブジェクト。
説明        submit(obj)はジョブオブジェクトobjを、それが現在存在する資源内で待ち行列に入れる。ジョブの待ち行列が存在する資源は、ジョブの作成方法から特定する。ジョブは、ローカルMATLABセッション、リモート・ジョブマネージャサービス、又はリモートMATLABワーカーサービスに存在可能である。submitが出力引数なしで呼び出されると、非同期式に呼び出される。すなわち、submitへの呼び出しはジョブ完了前に戻る。
この規則の例外は、ジョブがローカルMATLABセッションに存在するときであり、この場合はこのsubmitは常に同期的に実行される。
注          ジョブマネージャに含まれるジョブが提出されると、このジョブのStateプロパティー値が待ち行列に入れられることになり、このジョブは、ジョブ待ち行列サービスによる実行を待つジョブのリストに加えられる。この待ちリスト内のジョブは先入れ先出し方式、すなわち提出された順番で実行される。
例     %
jobmanager1と名付けられたジョブマネージャサービスを見つける。
jm1 =
findResource('jobmanager', 'Name', 'jobmanager1');
% ジョブオブジェクトを作成する。
j1 =
createJob(jm1);
% このジョブに関して評価されるタスクオブジェクトを加える。
t1 =
createTask(j1, @myfunction, {10, 10});
% ジョブオブジェクトをジョブマネージャで待ち行列に入れる。
submit(j1);
【０１２５】
0005442999.tif 000028
0005442999.tif 000029
【０１２６】
0005442999.tif 000030
0005442999.tif 000031
【０１２７】
0005442999.tif 000032
0005442999.tif 000033
0005442999.tif 000034
【０１２８】
代替的な実施形態では、MATLAB（登録商標）プログラミング言語で使用可能なオブジェクト指向インターフェース及び／又は関数型手続きを１つ又は複数のアプリケーションプログラミング・インターフェースで使用可能とし、且つ、こうしたオブジェクト指向インターフェース及び関数型手続きの動作を可能とする１つ又は複数のライブラリ、ソフトウェアコンポーネント、スクリプト言語、又は他の形式のソフトウェアで使用可能としてもよい。通常の技能を備えた当業者であれば、本発明の分散技術計算処理のためタスク及びジョブの分散を管理する目的で使用できる上述のクラス定義、クラス方法及びプロパティー、パッケージ範囲方法、関数型手続き、及びプログラミング命令の様々な代替的実施形態をが存在することを理解するはずである。
【０１２９】
上述したMATLAB（登録商標）の構造、機能、及び動作の概要から又それらを考慮すれば、本発明は、図9A及び9Bに示したように、分散、ストリーミング、及び並列技術計算処理システムに多くの利点を与える。このMATLAB（登録商標）に基づく分散計算システムは、独立型システムから、2つのマシンのネットワークや、数100のマシンのネットワークや、並列計算や並列及び逐次計算における小さなタスク細分性から巨大なタスク細分性に至る多種多様なユーザ構成に対処できる。
【０１３０】
図9Aを参照すると、分散システム910は、技術計算クライアント250からリモートの技術計算ワーカー270A乃至270Nへのタスク委託をサポートし、各技術計算ワーカー270A乃至270Nのホストとして働く各ワークステーション170A乃至170Nの処理能力を活用する。これらタスクは互いから独立して実行され、技術計算ワーカー270A乃至270Nが互いと通信することを必要としない。 
【０１３１】
図9Aを続けて参照すると、ストリーミングすなわち逐次処理システム910により、逐次処理は、多数のワークステーション170A乃至170N上の多数の技術計算ワーカー270A乃至270Nを介して実行される。技術計算クライアント250はジョブを提出し、タスクが技術計算ワーカー270Aから技術計算ワーカー270Bへ、次に技術計算ワーカー270Nへと逐次処理されることを必要とする。技術計算ワーカー270Aがこのタスクの技術計算を終了すると、技術計算ワーカー270Aは、このタスクを更なる処理のため技術計算ワーカー270Bに提出する。同様に、このタスクはそのタスク定義に従って完了するまで、付加的技術計算ワーカー270Nに提出して追加処理を行うことができる。タスクに技術計算を最後に実行する技術計算ワーカー270Nは、結果を技術計算クライアント250に提出する。 
【０１３２】
ストリーミング処理システム920は、タスクの技術計算のうち高いプロセッサ能力を必要とする部分に関してより高速なプロセッサを持つワークステーション170A乃至170Nを利用したり、このタスク計算に必要な特定のデータセット又は外部制御計装にアクセスする技術計算ワーカー270A乃至270Nを利用したりできる。
【０１３３】
図9Bでは、図示した並列システム930は、図9Aに示した分散及びストリーミング構成のシステム（900及び910）を組み合わせたものである。概括的に述べると、技術計算ワーカー270A、270B、及び270Nは互いから独立して一組のタスクを実行できる。更に、これら技術計算ワーカーは、タスクの技術計算をストリーミング方式で実行するため他の技術計算ワーカーにタスクを提出できる。例えば、技術計算ワーカー270Aは、更なる処理のためにタスクを技術計算ワーカー270Bに提出でき、次に、技術計算ワーカー270Bは、技術計算ワーカー270Nによる更なる処理のためにタスクを提出できる。技術計算ワーカー270Nは処理を完了すると、自動タスク分散機構260又は技術計算クライアント250に結果を返す。この構成は、計算装置のタイプ及び可用性、ネットワークトポロジ、解いている技術計算問題の性質及び複雑性など多くの要素に基づいて、処理のために技術計算タスクを最適に分散する方法の決定に関して大きな柔軟性を実現する。
【０１３４】
B. 計器に基づいた分散計算システム
本発明の例示的な実施形態は、技術計算クライアント及び技術計算ワーカーを使用する、計器に基づいた分散計算システムを提供する。この計器に基づく分散計算システムは、ネットワークを介して接続された１つ又は複数の計器を含む。これら計器は、パーソナルコンピュータに基づいたプラットフォーム又は他のプラットフォーム上に設けることができ、技術計算クライアントや技術計算ワーカーなどの付加的ソフトウェア製品を走らせる能力がある。この計器に基づく分散計算システムは、テスト対象ユニットを検査するテスト環境で動作できる。通常の技術を備えた当業者であれば、こうした計器は例示的なテスト機器であって、本発明は、組み合わせると伝統的な計器の機能を実行するアプリケーションソフトウェア、プラグインボードなどのハードウェア、及びドライバソフトウェアを備えた業界基準コンピュータ又はワークステーションを含む仮想計器などの他のテスト機器又は構成要素にも適用できることは理解するはずである。
【０１３５】
この計器に基づく分散計算システムでは、技術計算クライアントは、ジョブを作成する機器又はクライアント装置内に存在できる。技術計算クライアントは、このジョブを分散実行するためそれを1つ又は複数のリモートワーカーに分散する。技術計算ワーカーは、ネットワーク上の他の機器又はワークステーション上に存在していてもよい。計器及び／又はワークステーション上でランするワーカーは技術計算クライアントが利用可能であって、このクライアントはジョブをこれらワークステーション及び計器に分散できる。技術計算ワーカーは受信したジョブ部分を実行し、実行結果を技術計算クライアントに返す。従って、本発明の代表例は、ネットワーク上の計器及び／又はワークステーションを用いて分散形様態でジョブ又はテストを実行する。
【０１３６】
図10は、分散計算環境における代表的な計器に基づいた分散システム1000を示すブロック図である。計器に基づく分散計算システム1000は、ネットワーク140に接続された1つ又は複数のクライアント150、サーバ160、ワークステーション170、及び計器180を含むことができる。これらクライアント150、サーバ160、及びワークステーションは、図1A乃至9Bを参照して上述したように、それぞれ技術計算クライアント250、自動分散機構260、及び術計算ワーカーを走らせることができる。図12A乃至12Cを参照しつつ後に詳述するように、計器180は、この計器に基づいた分散計算システムの構成によるが、技術計算クライアント250及び／又は技術計算ワーカーを走らせればよい。通常の技能を備えた当業者であれば、計器に基づいた分散システム1000は例示目的であって、クライアント150、サーバ160、ワークステーション170、及び計器180を全て含む必要はないことは理解するはずである。他の実施形態では、計器に基づく分散システム1000は、クライアント150、サーバ160、ワークステーション170、及び計器180を用いて実装できる。
【０１３７】
図10の例示的な実施形態では、クライアント150、サーバ160、ワークステーション170、及び計器180はネットワーク140に接続されている。クライアント150又は計器180は、図3Aを参照して上述したようにワークステーション170又は他の計器180と直接的に通信してもよい。クライアント150又は計器180は、図3B乃至4を参照して上述したように、自動タスク分散機構260を走らせるサーバ160を介してワークステーション170又は他の計器180と通信してもよい。ワークステーション170又は計器180は、図9A及び9Bを参照して上述したように、分散計算システム1000の通信トポロジによっては、互いに通信することもしないこともある。
【０１３８】
図11は、本発明の例示的な実施形態で使用される代表的な計器を示すブロック図である。計器180は、計装機能1110、技術計算クライアント250、技術計算ワーカー270、オペレーティングシステム1120、及びネットワークインターフェース118を含むことができる。計装機能1110は、オシロスコープ及びスペクトル分析器の機能のような、観察対象となっている量の現在値を求める計器自体の検査、測定、及び自動化機能を提供する。例示的な実施形態では、計器180は1つ又は複数の計装機能を含む任意ツールを指す。
【０１３９】
計器180上にインストールされている技術計算クライアント250及び技術計算ワーカー270は、図2A乃至2Cを参照して上述したように、MATLAB（登録商標）に基づいた分散計算アプリケーション120を含むことができる。技術計算クライアント250は1つ又は複数のタスクを含むジョブを作成する。技術計算クライアントは、このジョブを分散実行するためそれを技術計算ワーカーに分散する。技術計算ワーカー270は、クライアント250が定義する技術計算タスクを実行する。計器180は、技術計算クライアント250及び／又は技術計算ワーカー270を含むことができる。計器180が技術計算クライアント250と共に導入されていれば、クライアント150が行うように、計器110はジョブを作成し、ワークステーション170及び／又は他の計器180にそのジョブを分散するよう動作できる。計器180が技術計算クライアント270と共に導入されていれば、ワークステーション170が行うように、計器110はそのタスクを受け取り、タスクを実行するよう動作できる。
【０１４０】
計器180は、ユーザが技術計算クライアント250及び／又は技術計算ワーカー270のような自分のアプリケーションをインストール可能とするオペレーティングシステム1130を含むことができる。Windows（登録商標）オペレーティングシステムは、計器180に含むことができる代表的なオペレーティングシステムであり、オペレーティングシステム1130は、図1Aを参照して上述したように他のオペレーティングシステムを含んでもよい。
【０１４１】
計器180は、ネットワークインターフェース118を介してクライアント150、サーバ160、ワークステーション170、又は他の計器180と通信できる。このネットワークインターフェース118は、図1Aを参照して上述した任意のネットワークインターフェースを含むことができる。ネットワークインターフェース118は、汎用インターフェースバス（GPIB）インターフェースなどのバスインターフェースを含むことができる。ネットワークインターフェース1140は、ユニバーサル・シリアルバス(USB)、Myrinet、PCI、PCI-Xなどの他の任意バスインターフェースを含むこともできる。具体的には、ネットワークインターフェース1140は、業界標準のイーサネット（登録商標）技術に基づいたLXI(計装用LAN拡張)インターフェースを含むことができる。
【０１４２】
ワーカーを走らせる計器180は、タスクの実行を促進する能力を備えることができる。例えば、こうした計器は、高速フーリエ変換計算などの高速計算を実行するために、FPGA(書替え可能ゲートアレイ)、ASIC(特定用途向けIC)、DSP(ディジタル信号プロセッサ)、及びCPU(中央処理装置)などのハードウェア構成要素を含むことができる。具体的には、計器180はワーカーを走らせるために複数のプロセッサ又はCPUを備えていてもよい。
【０１４３】
計器180は、CPUでなくGPU(グラフィクス処理ユニット)を用いて計算を行うGPGPU(グラフィクス処理ユニット汎用計算(原語：General-purpose
Computing on Graphics Processing Units))処理をサポートできる。GPUは、コンピュータ又はゲームコンソール用のグラフィクスカード又はグラフィクス・アクセラレータのマイクロプロセッサである。GPUは、コンピュータグラフィックスを効率的に操作且つ表示でき、その並列構造により、一定の複雑なアルゴリズムに関しては典型的なCPUよりも効果的である。GPUは、暗号文、データベース演算、高速フーリエ変換、ニューラルネットワークなどのグラフィクス以外の分野でも汎用的に利用できる。通常の技能を備えた当業者なら、ワーカーを走らせるワークステーションはGPGPU処理をサポートできることは理解するはずである。
【０１４４】
図12Aは、別の代表的な計器に基づいた分散システムを示すブロック図である。この計器に基づく分散計算システムは、ネットワーク140に接続されたクライアント150、ワークステーション170、及び計器180を含むことができる。技術計算クライアント250はクライアント150上でランする。技術計算技術計算ワーカー270はワークステーション170及び計器180上でランできる。技術計算クライアント250は、ジョブを作成し、そのジョブをワークステーション170及び計器180上の技術計算ワーカー270に分散する。ワークステーション170及び計器180上の技術計算ワーカー270は、このジョブを実行し、実行結果をクライアント150上の技術計算クライアント250に返す。通常の技能を備えた当業者であれば、図10を参照して上述したように、本システムはタスクの自動分散用のサーバを含むことができることは理解するはずである。
【０１４５】
図12Bは、別の代表的な計器に基づいた分散計算システムを示すブロック図である。この計器に基づく分散計算システムは、ネットワーク140に接続されたワークステーション170及び計器180を含むことができる。技術計算クライアント250は計器180上でランする。技術計算技術計算ワーカー270はワークステーション170及び他の計器180上でランする。技術計算クライアント250はジョブを作成し、そのジョブをワークステーション150及び計器180上の技術計算ワーカー270に分散する。ワークステーション170及び計器180上の技術計算ワーカー270はこのジョブを実行し、実行結果をクライアント150上の技術計算クライアントに返す。通常の技能を備えた当業者であれば、図10を参照して上述したように、本システムはタスクの自動分散用のサーバを含むことができることは理解するはずである。
【０１４６】
図12Cは、計器に基づいた分散システムの代表的な階層構造を示すブロック図である。この計器に基づく分散計算システムは、ネットワーク140に接続されたクライアント150、ワークステーション170、及び計器180を含むことができる。このシステムは、ネットワーク140に接続されたサブクラスタ190を含むこともできる。サブクラスタ190は、クライアント、サーバ、ワークステーション、及び計器を含むことができる。サブクラスタ190は、付加的な技術計算クライアント及び技術計算ワーカーを走らせて、クライアント150又は計器180上の技術計算クライアント250が定義するジョブを分散且つ実行させてもよい。技術計算クライアント250はジョブを作成し、そのジョブをサブクラスタ190に分散できる。サブクラスタ190内の技術計算ワーカーは、このジョブを実行し、実行結果をクライアント150上の技術計算クライアント250に返す。サブクラスタ190は、サブクラスタ190内のワークステーション及び計器にジョブを分散するための分散機構を含むことができる。
【０１４７】
この計器に基づく分散計算システムは、図示した実施形態においてテスト環境で使用できる。技術計算クライアント250及び技術計算ワーカー270などの計算機能を備えた計器はテストを実行できる。この計器の計算機能を利用して、クライアントが定義するテストの部分を実行するためデータを処理できる。このテスト環境は、ネットワーク上で計器の計算機能力を利用してこのテストを分散実行する。例示的な実施形態の説明における、「テスト」という用語は、1つ又は複数のテスト対象ユニットのパラメータ及び特性を検証するため、そうしたユニットに対して行う動作又は一群の動作を指す。テスト対象ユニットとは、単一の構成要素から完全なシステムを含むテスト可能な実体を指す。テスト対象ユニットはソフトウェア製品及び／又はハードウェア装置を含むことができる。
【０１４８】
図13は、本発明の例示的な実施形態に設けられたテスト環境1200の一例である。テスト環境1200では、様々なタイプの資源1210を用いてテスト対象ユニット1230を提供できる通常の技能を備えた当業者であれば、資源1210はソフトウェアツール及びハードウェアツールを含みうることは理解するはずである。テスト環境1200はテストマネージャ1220を含むことができる。テストマネージャ1220を使用すれば、ユーザは制御データ1240を入力することで、テスト環境1200におけるテスト対象ユニット1230をテストするための条件を設定できる。制御データ1240は、テストマネージャ1220が使用する資源の順番を指定するテストステップの順序を含むことができる。又、ユ―ザは、資源1210が提供する関数を呼び出す引数として使用可能なテストの変数及びパラメータも入力できる。異なる変数やパラメータをテストで用いることで、テスト対象ユニットの関数は異なる値を返すことができる。テスト対象ユニット1230は、1つまたは複数のハードウェア、ソフトウェア、及び／又はプログラム（例えばモデル及び／又はコード）を含むことができる。通常の技能を備えた当業者であれば、テスト対象ユニット1230はソフトウェアツール及びハードウェアツールを含みうることは理解するはずである。テストマネージャ1230は、一連のテストステップ並びにテストの変数及びパラメータを用いて異なる条件でテストを行う。テストマネージャ1230の一例が、2004年8月24日付けで提出された「TEST
MANAGER FOR INTEGRATED TEST ENVIRONMENTS(統合テスト環境用のテストマネージャ)」と題した係属中の米国特許出願(米国特許出願第10/925,413号)により詳細に記載されている。
【０１４９】
本発明の例示的な実施形態は、ソフトウェアツールのユーザ(又は開発者)が、様々なタイプのテスト対象ユニット1230をテストするための試験を実行できるテスト環境を提供可能である。このテストには、テキスト形式プログラムをテストするためのテストステップや、グラフィカルプログラムをテストするためのテストステップや、ソフトウェアツールに備わっている関数をテストするためのテストステップや、ハードウェア装置をテストするためのテストステップなど1つ又は複数のテストステップを含めばよい。一例として、このテストはMATLAB（登録商標）表現式を実行可能なMATLAB（登録商標）ステップを含む。このMATLAB（登録商標）ステップは、ローカルにインストールされているか又はリモートの計算装置にインストールされたMATLAB（登録商標）と通信して、この表現式を走らせて結果をテストマネージャ120に返す。これらテストステップは、モデルと対話するSimulink（登録商標）ステップ及び外部ハードウェアと対話するためのInstrument
Control（MATLAB（登録商標）ツールボックスの一つ）ステップを含むこともできる。更に、Statistics Toolbox（MATLAB（登録商標）ツールボックスの一つ）ステップは他のステップで生成されたデータの統計分析を行うことができる。このテストのテストステップは、テスト実行時に実行される個別の動作を含む。これらテストステップ及びテストステップのプロパティーは、それぞれMコード及び関数呼び出し引数を生成するJava（登録商標）関数呼び出しと考えてもよい。
【０１５０】
図14は、本発明の例示的実施形態においてテストを分散するための代表的な動作を示すフローチャートである。クライアント150は、テスト対象ユニットをテストするためのテストを定義する（ステップ1302）。このテストは1つ又は複数のテストステップを含むものと定義できる。各テストステップは、異なるテスト対象ユニットをテストできる。次に、クライアント150は、このテストの少なくとも一部を技術計算ワーカー270を含む計器180又はワークステーション170に提出する（ステップ1304）。例えば、ここでクライアント150は、各ステップを異なるワークステーション170及び／又は計器180に提出する。技術計算ワーカー270はこのテストの少なくとも一部を受け取り(ステップ1306)、要求された技術計算をこのテストによる定義に従って実行する(ステップ1308)。このテストに技術計算を実行する時に、関連した結果が生成される(ステップ1310)。代替的な実施形態では、結果が生成されないか、クライアント150に結果を戻す必要がない。テストの計算から結果を生成した後、ワークステーション170及び／又は計器180は、クライアント150にこの結果を与え(ステップ1312)、クライアント150はワークステーション170及び／又は計器180からこの結果を得る（ステップ1314）。通常の技能を備えた当業者であれば、この分散処理は例示的なものであって、このテストは図5B乃至5Dを参照して上述した処理で分散できることは理解するはずである。通常の技能を備えた当業者であれば、このテストの分散は図6A乃至9Bを参照して上述したものと同じ方法で実行できることも理解するはずである。
【０１５１】
通常の技能を備えた当業者であれば、計器180を技術計算クライアント及び／又はワーカーとしても使用でき、計測用ツールとしても使用できることは理解するはずである。例示的な一実施形態では、計器180を、計器180が収集した情報を処理するテストの一部を実行する計測用ツールとして使用できる。別の実施形態では、計器180を、計器180の技術計算機能を利用する純粋な技術計算クライアント又はワーカーとして用いることもできる。別の実施形態では、計器180は技術計算クライアント／ワーカーと計測用ツールとの両方としても使用できる。この実施形態では、計器180が測定を行う必要があるときは従来の計測用ツールとして使用され、テストの少なくとも一部を計算する必要があるときは技術計算クライアント／ワーカーとして使用される。
【０１５２】
幾つかの実施形態では、計器180を技術計算クライアント／ワーカーと計測用ツールの両方として使う場合、計器180の技術計算機能と計測機能の両方を同時にサポートするための計器180の能力にも依るが、これら両者の機能を互いに調整する必要が生じることもある。これら機能を互いに調整する代表的な一方法では、計器180が測定を行う必要があるときは技術計算機能を一時停止／停止する。測定が完了すると、計器180は技術計算機能を続けて実行すればよい。これは上述の機能を互いに調整する代表的な例であって、他の実施形態では他の方法で調整できることは通常の技能を備えた当業者であれば理解するはずである。計器180の技術計算機能により、ユーザは、計器180の付加的な計算機能力を用いてテスト環境においてテストの高速結果計算を実行できる。
【０１５３】
更に、例示的実施形態は、多数の技術計算ワーカーにおいて並列的に実行するジョブ及びテストのプログラミング命令を開発するための技術プログラミング言語構成要素を提供する。これら技術プログラミング言語構成要素は、その機能性のために予約されたプログラミング言語の内蔵キーワードを備えている。これら構成要素の１つとしては、多数の技術計算ワーカーで実行する技術計算演算の分散配列要素がある。MATLAB（登録商標）の並列技術計算ワーカーの技術プログラミング言語は、ワーカーの現在の処理idをチェックするために分散配列をサポートする予約キーワード及び組み込みステートメントを与える。この分散配列は、2004年9月13日付けで提出された「Methods
and Systems For Executing A Program In Multiple Execution Environments(多数実行環境でプログラムを実行する方法及びシステム)」と題する同時継続中の米国特許出願第10/940,152号に記載されており、本明細書に引用して援用する。
【０１５４】
技術計算プログラミング言語で分散配列を与えるには、反復子を、この分散配列を処理することになる各ノード又はワーカーのために別々の反復子に分解する。各ワーカーは処理idすなわちpidにより識別され、それは1からpidの総数すなわちnprocの間である。pidの総数の各pidのワーカーについて、分散配列の一部が別個に独立して処理できる。次の反復子を例として示す。
var = start:fin
又は
var
= start:delta:fin ;     ここではstartが最初の反復で、finが最後の反復であり、deltaは最初の反復と最後の反復と間の一回の増分である。
【０１５５】
分散配列の一部を処理するには、次のような反復子は、上述した標準的な反復子から分解する必要がある。
var
= start(pid):delta:fin(pid); ここではstartがpidの最初の反復で、finがpidの最後の反復であり、deltaはpidの最初の反復と最後の反復との一回の増分である。
【０１５６】
代表的な一実施形態では、反復子を、等しい又は概ね等しい反復長さのnproc連続区間に分解する。次は、多数のワーカー間での等しい又は概ね等しい反復長さを求めるためのMATLAB（登録商標）のプログラミング言語で記述した例示的なアルゴリズムである。
function
[startp,finp] = djays(start,delta,fin,pid,nprocs)
ratio = floor((fin-start)/delta+1)/nprocs;
startp = start+ceil((pid-1)*ratio)*delta;
finp = start+(ceil(pid*ratio)-1)*delta;
【０１５７】
例えば、nproc = 4つのワーカーであれば、反復子j = 1:10は次のように分解される。
j = 1:3 on pid = 1
j = 4:5 on pid = 2
j = 6:8 on pid = 3
j = 9:10 on pid = 4
【０１５８】
代替的な実施形態では、他のアルゴリズムを用いて、多数のワーカー間で分散配列を処理するための反復子の分解とpid毎に適用する反復子長さとを求めることができる。例えば、反復子の分解は、その反復子の対応部分に関する各pidの推定処理時間から求めてもよい。或いは、どのワーカー270が現時点でプログラムを実行していないか、どのワーカー270がアイドル状態か或いは以前にプログラムを実行していないかによりこれを求めてもよい。別の例では、幾つかのpidが使用可能であっても、反復には2つのpidのみを用いることとしてもよい。別の実施形態では、各反復子を特定のワーカーに割り当ててもよい。それ以外の場合では、反復子の分解は、ワーカー又はワーカーを走らせている計算装置102の1つ又は複数の動作特性に基づくものとしてもよい。通常の技能を備えた当業者であれば、様々な順列及び組み合わせが、多数のワーカーにおける分散配列の複数分を処理するための反復子分解において可能であることを理解するはずである。
【０１５９】
MATLAB（登録商標）の並列技術計算環境では、分散配列は新しいキーワードdarrayにより示され、分散ランダム配列の場合は新しいキーワードdrandにより示される。これらキーワード又は予約語には様々な他の名前を適用できる。この並列技術計算環境のプログラミング言語のキーワード又は予約語として、これらはワーカーが決定する特別な意味を持ち、従ってこの言語の中に組み込まれる。従って、これらキーワードは変数又は関数名としては使用できない。
【０１６０】
分散配列は、分解アルゴリズムをこの配列の最後の次元に適用することにより分散される。例えば、1000
x 1000の配列は、第1ワーカーに最初の100列を記憶し、第2ワーカーに2番目の100列を記憶するなどして、10のプロセッサ又はワーカーに分散される。特定ワーカー上の分散配列の内容がその配列のローカル部分である。例えば、仮にAが分散配列であれば、A.locはAの各ワーカーにおける部分を示す。例えば、nproc
= 16として、次のステートメント、
A
= drand(1024,1024)        %      分散ランダム配列作成
は次のようになる。
A = darray(1024,1024)
A.loc = rand(1000,64)
【０１６１】
異なるランダム部分行列又は配列が16個のワーカーに生成される。別の一実施形態で、m
x n x 3の次元を持つ画像の赤/緑/青の色コーディングを表す分散アレーの場合は、この配列の分解と分散は、各ワーカーがそのローカル部分で全体画像からの完全色ストリップを処理できるように、2次元に沿って行われる。この分散配列の分配は列に基づく分散として説明したが、分散配列の複数部分を多数のワーカー間で分散する様々な代替的方法を使用できる。例えば、分散配列は、行又は行の一部と列により分散できる。別の例では、一部を、配列の全次元を持つデータの部分集合に基づいて分散することも可能である。任意タイプの任意写像を適用して、分散配列の一部を各ワーカーに写像できる。従って、通常の技能を備えた当業者なら、分散配列の複数部分を各ワーカーに分散する様々な置換があることを理解するはずである。
【０１６２】
別の様態では、分散配列はキャッシュメモリに入れてもよい。すなわち、あるワーカーは分散配列の該当部分、例えばA.locを記憶できるが、そのローカル部分に演算を行う以前は、このワーカーは分散配列のその他の部分にも読み出しアクセス可能としてもよい。例えば、第1ワーカーは、3つの列からなる分散配列の列1を割り当てられており、他の2つのワーカーには列2及び3が割り当てられている。第1ワーカーは、配列の列1に演算すなわち読み出し及び書き込みアクセスを行う前は、列2及び3にも読み出しアクセスできる。しかし、第1ワーカーが分散配列の該当ローカル部分に演算を実行すると、分散配列の他の部分にはアクセスできなくなる。例えば、第1ワーカー列1に演算を行ってしまうと、分散配列の列2及び3には読み出しアクセスできなくなる。
【０１６３】
配列加算のような基本的な要素に関する演算として、各ワーカーはA.locなどの該当ローカル部分に演算を行えばよい。分散配列のこのローカル部分を処理するためにワーカー間の通信は不要である。行列転置、行列乗算、及び様々な行列分解などのより複雑な演算はワーカー間の通信を必要とすることもある。こうした通信はこれらワーカーにおいて反復するパラダイムに従うことができる。
for p = 1:nprocs
if
p == pid
プロセッサpがこのステップを担当する
データを他のプロセッサに送る
ローカル計算を行う
他のプロセッサからデータを受け取ることもあり得る
そうでなければ
pからデータを受け取る
ローカル計算を行う
データをpに送り返すこともあり得る
end
end
【０１６４】
上述の例では、ワーカー間の通信メッセージの数は、分散配列のサイズでなくワーカー数に比例する。従って、配列が大きくなれば、配列計算を調節するたのメッセージ送信のオーバーヘッドは、各ワーカーにおける配列データ及び計算時間に対して小さくなる。
【０１６５】
一様態では、図15に示したように、本発明は、分散配列処理をプログラムにより可能とする方法に関する。図15のフローチャートでは、方法1500は、多数のワーカーにおいて実行する分散配列の処理を示す。ステップ1502では、ワーカーが、実行のため呼び出されたプログラム（ジョブ又はテスト）のプログラム流れを実行する。このプログラム流れのいずれかの地点で、ワーカー270はステップ1504においてキーワードdarrayを含むプログラムステートメントなどのプログラムステートメントにおける分散配列構成要素を解釈する。ステップ1506では、ワーカー270は、この分散配列構成要素を評価してローカルで記憶すべき分散配列の部分を特定する。上述のように、分散配列は様々な方法で分解できる。例えば、ワーカー270は、ローカル処理を行うためにこの配列の特定列を記憶してもよい。分散配列のこうした部分を特定し記憶した後、ワーカー270はこの配列部分に演算を実行できる。例えば、ワーカーは加算のような基本的な配列演算を行うことができる。この分散配列ステートメントを処理した後、プログラム流れはプログラムの他のプログラムステートメントへ続く。別の実施形態では、この配列のローカル部分への処理の前に、ワーカー270は、キャッシュメモリに入れられた配列の他の部分にアクセスしたり、それらのデータ値を得たりしてよい。方法1500は1つのワーカーに関して説明したが、同一のプログラムチャートを同一プログラムを走らせる多数のワーカー270に適用すれば、ステップ1504、1506、及び1508において、分散配列を解釈するワーカーが、配列のどの部分をローカルで記憶し且つ処理すべきかを決定できる。
【０１６６】
通常の技能を備えた当業者であれば本発明の精神及び範囲から逸脱することなく多くの変更及び修正が可能である。したがって、例示的な実施形態は例示目的のみで示したものであり、次の特許請求の範囲で定義される本発明を限定する意味で解釈すべきでないことは明確に理解すべきである。これら特許請求の範囲は、文字通り記載されたものを含むと共に、上述の例に図示し且つ説明したものと他の側面で同一ではなくても、差異が僅かな同等の要素とを含むものとして読むべきである。
【図面の簡単な説明】
【０１６７】
本発明の上述及び他の目的、側面、特徴、並びに利点は、添付の図面と共に次の説明を参照すればより良く理解できるはずである。
【図１】(A)  本発明の実施形態を実施する計算装置のブロック図である。  (B)  本発明の例示的な実施形態を実施する分散計算システムのブロック図である。
【図２】(A)  2ノードネットワーク接続されたコンピュータシステムとした、本発明の一実施形態の構成要素のブロック図である。  (B)  多段ネットワーク接続されたコンピュータシステムとした、本発明の代替的な実施形態の構成要素のブロック図である。  (C)  分散コンピュータシステムとした、本発明の代替的な実施形態の構成要素のブロック図である。
【図３】(A)  本発明の直接分散動作モードのブロック図である。  (B)  本発明の自動分散動作モードのブロック図である。  (C)  本発明のバッチ自動分散動作モードのブロック図である。  (D)  本発明のバッチ自動分散動作モードの代表的な一実施形態のブロック図である。
【図４】本発明の他モード動作実施形態を表すブロック図である。
【図５】(A)  図3Aの実施形態で実行されるステップのフローチャートである。  (B)  図3Bの実施形態で実行されるステップのフローチャートである。  (C)乃至(D)  本発明のバッチ自動モードで実行されるステップのフローチャートである。
【図６】(A)  自動タスク分散機構の詳細を示すブロック図である。  (B)  ジョブマネージャと自動タスク分散機構の詳細を示すブロック図である。  (C)   自動タスク分散機構を含むジョブマネージャの詳細を示すブロック図である。
【図７】サービスプロセスを用いた本発明の代表的な一実施形態を示すブロック図である。
【図８】(A)  分散システムとのユーザ対話のためのオブジェクトの使用を示すブロック図である。  (B)  分散システムの代表的な一実施形態とのユーザ対話のためのオブジェクトの使用を示すブロック図である。
【図９】(A)  分散及びストリーミング技術計算用の本発明の動作を示すブロック図である。  (B)  並列技術計算用の本発明の動作を示すブロック図である。
【図１０】本発明の例示的な実施形態における代表的な分散システムを示すブロック図である。
【図１１】図10に示した代表的な計器を示すブロック図である。
【図１２】(A)乃至(C)は、本発明の例示的実施形態における他の代表的な分散システムを示すブロック図である。
【図１３】本発明の例示的な実施形態における代表的なテスト環境を示すブロック図である。
【図１４】図13の分散テストシステムで実行されるステップのフローチャートである。
【図１５】本発明の例示的実施形態において分散配列を与えるための代表的な動作を示すフローチャートである。
【図１Ａ】
0005442999.tif 000035
【図１Ｂ】
0005442999.tif 000036
【図２Ａ】
0005442999.tif 000037
【図２Ｂ】
0005442999.tif 000038
【図２Ｃ】
0005442999.tif 000039
【図３Ａ】
0005442999.tif 000040
【図３Ｂ】
0005442999.tif 000041
【図３Ｃ】
0005442999.tif 000042
【図３Ｄ】
0005442999.tif 000043
【図４】
0005442999.tif 000044
【図５Ａ】
0005442999.tif 000045
【図５Ｂ】
0005442999.tif 000046
【図５Ｃ】
0005442999.tif 000047
【図５Ｄ】
0005442999.tif 000048
【図６Ａ】
0005442999.tif 000049
【図６Ｂ】
0005442999.tif 000050
【図６Ｃ】
0005442999.tif 000051
【図７】
0005442999.tif 000052
【図８Ａ】
0005442999.tif 000053
【図８Ｂ】
0005442999.tif 000054
【図９Ａ】
0005442999.tif 000055
【図９Ｂ】
0005442999.tif 000056
【図１０】
0005442999.tif 000057
【図１１】
0005442999.tif 000058
【図１２Ａ】
0005442999.tif 000059
【図１２Ｂ】
0005442999.tif 000060
【図１２Ｃ】
0005442999.tif 000061
【図１３】
0005442999.tif 000062
【図１４】
0005442999.tif 000063
【図１５】
0005442999.tif 000064