【文献】
境隆二,マルチコア時代の並列プログラミング方式,東芝レビュー,日本,株式会社東芝,2007年 8月 1日,第62巻 第8号,62−63ページ
【文献】
岡本雅巳ほか,Fortranプログラムの階層的マクロデータフロー処理手法,情報処理学会研究報告,日本,社団法人情報処理学会,1992年 8月20日,Vol.92 No.64,105−112ページ
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
図1は、依存関係データ構造100の一例を示す。データ構造100は、ハードディスク、不揮発性メモリ、光記憶媒体又は同様のものなどのような、非一時的なコンピュータ可読記憶媒体上に実現することができる。データ構造100は、インターネットプロトコル(IP)ネットワーク、ワイヤレスネットワークなどのようなコミュニケーションネットワークで通信されてもよい。
【0009】
図1の例では、データ構造100はDAGを含む。しかしながら、本開示はこの事項に限らず、任意の適切なデータ構造を用いることにも適合しうる。データ構造100は、独立コンポーネント110を含み、この独立コンポーネント110は、データ構造100における他のコードユニットへの依存関係がないコードユニットを表す。依存コンポーネント112は、コンポーネント110のアウトプットに依存する。この依存関係は、コンポーネント110とコンポーネント112の間の依存関係アーク111として表される。依存関係アーク111の“方向”は、コンポーネント110のアウトプットが、コンポーネント112に必要とされるインプットであることを示している。
【0010】
依存関係アーク111の“方向”は、必要とされるアウトプットがコンポーネント110によって生成されるまでは、コンポーネント112のコードユニットが実行されてはならないことを示している。アーク111は、名前、データタイプ、インターフェース定義(例えばアプリケーションプログラミングインターフェース(API)、コールバック登録など)、依存関係の“方向”、又は同様のものなどの依存関係を記述するメタデータを含むことができる。
【0011】
図2は独立コンポーネント210のアウトプットが複数の依存コンポーネント212及び214に必要とされる依存関係データ構造200の他の一例を示す。依存関係は、コンポーネント210とコンポーネント212及び214との間の依存関係アーク211で表される。前述の通り、アーク211は、依存関係の特質に関するメタデータを含んでもよい。
【0012】
図3に示される他の一例においては、依存関係データ構造300は、複数のコンポーネント(コンポーネント322及び324)のアウトプットに依存するコンポーネント320を含む。これらの依存関係は、それぞれアーク321及び323で表される。
【0013】
図4は、擬似コンポーネント(例えば、外部依存関係)を含む依存関係データ構造400の一例を示す。
図4の例では、コンポーネント430は、外部の擬似コンポーネント432のアウトプットに依存する(依存関係アーク431にて表されている)ほかに、非擬似コンポーネント434のアウトプットにも依存する(依存関係アーク433にて表されている)。以下に記述する通り、依存関係431は依存関係データ構造400の実行マネージャによっては解決されない。反対に、依存関係433は、コンポーネント430によって必要とされる1以上のアウトプットを生成するコンポーネント434のコードユニットを実行する実行マネージャによって解決される。
【0014】
本明細書で開示されている依存関係データ構造は、多数の異なる“世代”を含んでいてもよい。本明細書で使用されている通り、“世代”とは、コンポーネント間の依存関係アークの数をいう。第1世代は、内部依存関係のない独立コンポーネントを含んでいる。第2世代は、第1世代からのアウトプットに依存するコンポーネントを含むと言ったように、各世代は順次前の世代からのアウトプットに依存するコンポーネントを含む。
【0015】
図5Aは、多数の異なる世代を含む依存関係データ構造500を示す。
図5Aの例では、データ構造500は独立コンポーネント502、504及び506を含み、それらはデータ構造500の“第1世代”501を構成する。コンポーネント506は擬似コンポーネントを表す。
【0016】
第2世代511の依存コンポーネント(コンポーネント510、512及び514を含む)は、第1世代のコンポーネント(コンポーネント502及び/又は504)により生成されるアウトプットを必要とする。コンポーネント512はコンポーネント502及び504の両方のアウトプットに依存する。
【0017】
第3世代521のコンポーネント(コンポーネント520、522、524、526及び528を含む)は、“第2世代”のコンポーネントにより生成されるアウトプットを必要とする。依存関係は、しかしながら、複数の世代に及んでもよい。
図5Aに示される通り、コンポーネント524は、第2世代のコンポーネント510により生成されるアウトプットのほかに、第1世代のコンポーネント502により生成されるアウトプットも必要とする。それ故、多階層の依存関係データ構造を記述するときに“世代”に言及することは便利かもしれないが、データ構造500におけるコンポーネント間の実際の依存関係及び/又はコンポーネントに関連するコードユニットの並行実行は、隣接する世代に限られない。
【0018】
依存関係データ構造500は、第4世代531における1以上の“アウトプット”コンポーネント530及び532で“終了”する。本明細書で用いられている通り、“アウトプット”コンポーネントとは、依存関係データ構造における他のコンポーネントにより必要とされないアウトプットを生成する、その依存関係データ構造におけるコンポーネントをいう。アウトプットコンポーネントとは、それ故、依存関係データ構造自体の“アウトプット”(例えば、処理タスク又はサブグラフのアウトプット)を生成するコンポーネントをいう。
図5Aの例では、コンポーネント530及び532は、依存関係データ構造500の“アウトプット”を生成する。
【0019】
本明細書で説明される依存関係データ構造は、コードユニットの並行実行を管理するために用いられてもよい。いくつかの実施例では、実行マネージャ(又は他のエンティティ)が、処理タスクに関連する依存関係データ構造にアクセスする。実行環境は、実行可能な(例えば、依存関係が“充足された”)コンポーネントを同定する。まず、依存関係データ構造の独立(例えば、リーフ)コンポーネントは実行可能である。独立(及び他の)コンポーネントの実行は、依存関係データ構造における他のコンポーネントの依存関係を充足する。本明細書で使用されている通り、“充足されたコンポーネント”とは、実行可能なコンポーネント及び/又はそれが必要とするインプットが利用可能であるコンポーネントをいう。
【0020】
実行環境は、依存関係データ構造の“並行状態”を維持する。本明細書で使用されている通り、依存関係データ構造の“並行状態”とは、どのコンポーネントが実行されたか、及び/又はどのコンポーネントのアウトプットが利用可能であるかのランタイム表現をいう。依存関係データ構造の並行状態は、依存関係データ構造自体及び/又は他の異なるデータ構造において維持されてもよい。実行環境は依存関係データ構造におけるコンポーネントを実行するので、実行環境は、実行可能な次の組の充足されたコンポーネントを同定するために、並行状態を更新する。
【0021】
図5Bは並行状態メタデータを含むように適合された依存関係データ構造(
図5Aの依存関係データ構造500)の一例を示す。並行状態メタデータは、コンポーネント502、504及び510が実行されたことを示す(コンポーネント502、504及び510が塗りつぶされて示されている)。あるいは又は更に、並行状態メタデータは、どの依存関係アークが充足されているかの指示を含んでもよい(例えば、依存関係アーク541、542、543、544、545、551、552及び553が充足されていることを示す)。
【0022】
依存関係データ構造503及び/又は並行状態メタデータを用いて、実行環境(又は他のエンティティ)は、実行可能なコンポーネント(依存関係が充足されたコンポーネント)を同定する。並行状態メタデータは、充足されたコンポーネントの指示を維持する。
図5Bの例において、並行状態メタデータは、“充足され”且つ実行可能なコンポーネント(例えば、512、520、522及び524)を同定するそれぞれの指示を含んでもよい。並行状態メタデータはまた、依存関係が充足されていないコンポーネント(例えば、コンポーネント514、526、528、530及び532)を同定することもできる。
【0023】
図5Bに示される通り、一度に実行可能なコンポーネントは2以上あってもよい。依存関係データ構造503(及び並行状態メタデータ)は、コンポーネント512、520、522及び524が実行可能であることを示す。コンポーネント512、520、522及び/又は524の実行は、同時に(並行して)起こる。コンポーネント512、520、522及び524の並行処理は、依存関係データ構造におけるコードユニットの表現及び並行状態メタデータの可用性から容易に同定できる。
【0024】
図5Bで例示される通り、並行処理の機会は、依存関係が充足される順番に依存する。例えば、コンポーネント514は、擬似コンポーネント506のアウトプットへの依存関係がまだ充足されていないため、実行可能でない。しかしながら、他の場合には、異なった順番でコンポーネントが実行し終えると、異なった並行状態となり、異なる組のコンポーネントが同時並行処理に使用可能となる。並行状態の違いは、処理負荷、通信待ち時間、I/O時間などを含むが、これらに限られるものではない多くの種々のファクターに起因する。例えば、コンポーネント502は、データベースのデータにアクセスする動作に対応する。ある場合には(例えば、データベースの負荷が軽い場合)、この動作は比較的すぐに完了する。しかしながら、別の場合には(例えば、データベースの負荷が重い場合)、コンポーネントの実行には、他のコンポーネントの実行に比べて比較的長い時間がかかる。依存関係データ構造のコンポーネントの配列は、並行状態の維持とともに、順番の変動の変化や他のコンポーネントが実行される速度には無関係に、リアルタイム並行処理の活用を可能にする。
【0025】
図5Cは、並行状態メタデータを含む依存関係データ構造の他の一例を示す。
図5Cの例では、コンポーネントが実行されると、コンポーネントは、そこで充足された依存関係アークとともにデータ構造505から除去される。それに応じて、実行可能なコンポーネント(例えば、依存関係が充足されたコンポーネント)はデータ構造505におけるリーフノードとして同定される。
図5Bのように、
図5Cは、コンポーネント502、504及び510が実行され、そしてそのアウトプットがそのデータ構造における他のコンポーネントに利用可能となっていることを示す。そのため、これらのコンポーネント及び対応する依存関係アーク(
図5Bのアーク541、542、543、544、545、551、552及び553)はデータ構造505から除去されている。
【0026】
実行可能なコンポーネント(例えば、依存関係が充足されているコンポーネント)は、データ構造505においてリーフノードとして同定される。いくつかの実施例では、並行状態メタデータは、上述の通り更にそれぞれ指標560を含んでもよい。あるいは、コンポーネントは、リーフノード(例えば、明示の指標560とは独立している)を同定するためにデータ構造505をトラバースすることで同定することができる。
【0027】
依存関係データ構造のコンポーネントのコードユニットを実行することで生成されるアウトプットは、実行環境(又は他のエンティティ)によって格納(例えば、キャッシュ)され、他の依存コンポーネントへのインプットとして利用可能になることができる。
【0028】
いくつかの実施例では、サブグラフを依存関係データ構造から抽出することができる。サブグラフは、1以上のコンポーネントを含み、“ルート”コンポーネント及び1以上の“エントリ”コンポーネントを含んでいる。“ルート”コンポーネントは、エントリコンポーネントによって生成されるアウトプットに(直接又は間接に)依存する。“エントリ”コンポーネントは、サブグラフ外から生成されるインプットに依存するコンポーネントである。いくつかの実施例では、サブグラフは、ルートコンポーネントから生じるパス上にエントリコンポーネントが存在するようになっている。それ故に、サブグラフは、すべてのパスがリーフコンポーネント(依存関係のないコンポーネント)又はエントリコンポーネントで終わるまでルートコンポーネントからトラバースされる。サブグラフは、コードユニット、コンポーネント又は同様のものとしてカプセル化、及び/又はそれらのようなものとして表すことができ、それが抽出された依存関係データ構造とは無関係に実行することができる。
【0029】
図6Aは、サブグラフが抽出される依存関係データ構造600の一例を示す。依存関係データ構造600は、前述した通り依存関係アークによって相互に接続されるコンポーネント610、612、613、614、615、616、617及び618を含む。ルートコンポーネント610及びエントリコンポーネント612を含むサブグラフ620は、依存関係データ構造600から抽出される。コンポーネント613及び616は、ルートノード610の依存関係を充足するためにサブグラフに含まれる。
図6Bは、依存関係データ構造600から抽出されたサブグラフ601を示す。いくつかの実施例では、サブグラフのエントリコンポーネントの依存関係は、擬似コンポーネントとして表すことができる。
図6Cは、コンポーネント612の依存関係を表す擬似コンポーネント632を含むサブグラフ602を示す。
【0030】
すでに説明した通り、擬似コンポーネント632のような擬似コンポーネントは、外部の依存関係(特定の依存関係データ構造又はサブグラフ内のコンポーネントによって充足されない依存関係)を表す。それ故、サブグラフ(又はサブグラフを実装している実行環境)は、依存コンポーネントのインプット/アウトプットデータをマッピングすることになっている。
【0031】
図6Dは、
図6Cのサブグラフ602から生成されたファンクションを例示する。
図6Dの例では、擬似コンポーネント632はサブグラフ602のカプセル化を表す関数“foo”の引数(arg0)への論理的依存関係を有している。
【0032】
いくつかの実施例においては、サブグラフの“レスポンス”又はアウトプット値が返されてもよく、並びに/又は他の処理タスク及び/若しくは処理タスクのアウトプットのために用いられてもよい。そのため、サブグラフのカプセル化表現は、サブグラフ内のコンポーネントの1以上のアウトプットを捕捉して、それらのアウトプットを実行環境又は他のエンティティに利用可能にするように設定することができる。
図6Eは、他のエンティティ及び/又はコンポーネントに利用可能となるアウトプットデータ611を与えるサブグラフ602を例示する。
【0033】
前述した通り、サブグラフは、実行可能なコードユニットとして表すことができる。それ故、いくつかの実施例においては、サブグラフはコンポーネント内でカプセル化される。
図6Fは、前述したサブグラフ620をカプセル化しているコンポーネント640を含む依存関係データ構造604を例示する。
図6Fの例においては、コンポーネント640を実行すると、コンポーネント640内のカプセル化されたサブグラフ620が実行され、依存関係データ構造及び/又はサブグラフが階層的に又は再帰的に実行されることになる。
【0034】
前述した通り、依存関係データ構造のコンポーネントとして処理タスクを表すことで、実行環境(又は他のエンティティ)が並行処理を同定し活用することが可能となる。更に、前記表現は、並行処理関連タスクをオフロードし、及び/又はコードユニットを分離可能なコンポーネントにカプセル化することで、コード展開を簡単にする。
【0035】
次の例は、本明細書で教えられるシステム及び方法がどのように処理タスクの実行の複雑さを簡単にするのかを説明する。この例では、処理機能(又は方法)のセットが、ジャバスクリプトを用いて定義される。しかしながら、本開示はこの事項に限られず、任意の適切なプログラミング言語又は環境に関連して実装することができる。
【数1】
【0036】
処理タスクは次のように定義される。
【数2】
【0037】
最初のアプローチでは、処理タスクは、前述した処理ステップに従って、連続して実装される。
【数3】
【0038】
代わりの実施例では、処理タスクの一部(ステップ1−8)は、個別の非同期なコードユニットコンポーネントにカプセル化される。非同期コードユニットは最後のパラメータとしてコールバックを受信するが、それは、コードユニットの実行が完了するときにコントロールを返すのに用いられる。非同期コードユニット内で起こるエラーは、所与のコールバックのパラメータとして渡される。
【0039】
処理タスクのステップは、コードユニット(例えば、コンポーネント)にセグメント化され、コードユニットは依存関係データ構造に配列される。
図7は、前述した処理タスクに対応する模範的な依存関係データ構造を示す。
図7に示される通り、依存関係データ構造701は、ステップ3 713が依存する“inValue”を表す擬似コンポーネント711を含む。データ構造701は、依存関係を持たないステップ2を表すコンポーネント712を更に含む。ステップ4はコンポーネント714により表され、ステップ2 712により生成されるアウトプットをステップ4 714が必要とすることを示す依存関係アークを含む。ステップ5はコンポーネント715により表され、それぞれステップ2 712及びステップ3 713のアウトプットへの依存関係を示す依存関係アークを含む。ステップ6はコンポーネント716により表され、ステップ5 715のアウトプットへの依存関係に対応する依存関係アークを含む。ステップ7はコンポーネント717により表され、それぞれステップ6 716及びステップ4 714のアウトプットへの依存関係を示す依存関係アークを含む。
図7には示されていないが、依存関係データ構造701のアウトプット(例えば、ステップ7 717のアウトプット)を表すために、追加のコンポーネント又はアークを含めることもできる。
【0040】
依存関係データ構造は、前述の通り、実行環境内で実行することができる。この例では、実行環境は“SyncGraph”ライブラリとして称され、そのライブラリは、依存関係データ構造を定義することを考慮し、依存関係データ構造を解釈し、実行の準備ができたコンポーネントを同定し、並行状態メタデータを維持するなどの目的で構成される。次のコードリスティングは、前述した処理タスクを定義し実行する“SyncGraph”の使用の一例を提供する。
【数4】
【0041】
“SyncGraph”ライブラリの初期化は、
図7に示される依存関係データ構造701に従う。最初の“rnd0”エントリは処理タスクのステップ2(
図7のコンポーネント712)を定義する。ステップ3(コンポーネント713)は“add0”エントリにより定義され、ステップ2(rnd0)のアウトプット及び#inインプット値への依存関係を含む。
図7では、これらの依存関係は、コンポーネント713から擬似コンポーネント711及びステップ2のコンポーネント712への依存関係アークにより例示される。“db10”エントリはステップ4(
図7のコンポーネント714)を定義し、ステップ2のアウトプットへの依存関係(
図7においてコンポーネント714からコンポーネント712への依存関係アークとして例示される)を含む。“add1”エントリは処理タスクのステップ5を定義し、ステップ2及び3のアウトプットへの依存関係を含む。これらの依存関係は、
図7において、コンポーネント715から、それぞれコンポーネント712及び713への依存関係アークとして例示される。“dbl1”エントリは処理タスクのステップ6を定義し、ステップ5のアウトプットへの依存関係(コンポーネント716からコンポーネント715への依存関係アーク)を含む。最後に、“add2”エントリはステップ7を定義し、それぞれステップ4及び6のアウトプットへの依存関係(コンポーネント717から、それぞれコンポーネント714及び716への依存関係アーク)を含む。
【0042】
上記で例示した通り、実行環境(SyncGraph)を用いる処理タスクを実装するために必要とされるコードは、命令的なアプローチよりも相当に簡単である。更には、SyncGraphアプローチは、処理タスクにおける並行処理を実行環境が同定し活用することを可能にするのだが、さもなければそれは活用されないままになってしまうであろう(あるいは、活用すべき追加のカスタムコードを必要とするであろう)。例えば、ステップ2のアウトプットが一旦利用可能になれば、ステップ3 713及びステップ4 714は並行して実行されるのである。
【0043】
前述した通り、コードユニットはコンポーネント内でカプセル化することができ、コードユニットは依存関係データ構造内に含まれる。実行環境は、依存関係データ構造にアクセスし、並行処理を同定し、そしてコンポーネントを実行する。本開示はこの事項に限られないが、しかしながら、アプリケーションプログラミングインターフェース、オブジェクトインターフェースなどのようなインターフェース、シンプルオブジェクトアクセスプロトコル(SOAP)、ウェブサービス説明言語(WSDL)などのようなサービス定義説明、機能プロトタイプなどを含むが、これらに限定されない任意の適切なメカニズムを用いても実行されうる。実行環境は、1以上のカプセル化メカニズム(例えば、1以上の実行プラットフォーム)を用いて実装されたコンポーネントを解釈及び/又は実行するように構成される。実行プラットフォームは、スレッド、プロセス、仮想マシン(例えば、Java(登録商標)仮想マシン)、スクリプトインタープリタ(例えば、ジャバスクリプトインタープリタ)、ネイティブの実行プラットフォーム、エミュレートされた実行プラットフォーム又は同様のものを含むが、それらに限られない。実行環境は、異なるカプセル化メカニズムを用いて実装されたコンポーネントを実行するように構成される、1以上の実行プラットフォームを含んでもよい。例えば、実行環境は、ジャバ仮想マシン実行プラットフォームのJava(登録商標)バイトコードのコードユニットからなる最初のコンポーネント、スクリプトインタープリタを用いるジャバスクリプトコードユニットからなるコンポーネント、“ネイティブの”コードユニットからなる他のコンポーネントなどを実行するように構成されてもよい。それ故に、実行プラットフォームは、スレッド、プロセス、仮想マシン(例えば、Java(登録商標)仮想マシン)、スクリプトインタープリタ(例えば、ジャバスクリプトインタープリタ)、ネイティブの実行プラットフォーム、エミュレートされる実行プラットフォーム又は同様のものを含んでよいが、それらに限られない。
【0044】
図8はタスク並行処理を活用する方法800の一実施例のフロー図である。
【0045】
ステップ810では、本方法800が始まり、初期化される。ステップ810は、ハードディスク、不揮発性メモリ又は同様のものなどの、非一時的なコンピュータ可読記憶媒体からの、1以上のコンピュータ可読命令をロードすることを含むことができる。ステップ810は更に、処理リソース、実行環境及び/又は仮想マシンリソースへのアクセス及び/又はそれらを初期化することを含むことができる。
【0046】
ステップ820は、複数のコンポーネントを含む依存関係データ構造へのアクセスを含む。1以上のコンポーネントは実行可能なコードのユニット(コードユニット)をカプセル化することができる。いくつかの実施例においては、依存関係データ構造は、外部依存関係を表す1以上の擬似コンポーネントを含む。依存関係データ構造は更に、前述の通り、コンポーネントの依存関係を表す依存関係アークを含んでもよい。
【0047】
ステップ830は、実行の準備ができているコンポーネントを同定することを含む。いくつかの実施例においては、ステップ830は、リーフコンポーネント(依存関係が充足されたコンポーネント及び/又は依存関係を有さないコンポーネント)を同定するためにステップ820でアクセスされた依存関係データ構造をトラバースすることを含む。あるいは又は更に、ステップ830は、(もしあれば)どのコンポーネントが実行されたかを示す並行状態メタデータへのアクセス並びに/又は、コンポーネント及び/若しくは外部の擬似コンポーネントの実行によって利用可能となったインプット及び/若しくはアウトプットの同定が含まれてもよい。ステップ830は、同時に実行しうる複数のコンポーネントの同定を含んでもよい。
【0048】
ステップ830は更に、依存関係データ構造において定義された、ステップ820の処理タスクが完了したこと(例えば、全てのコンポーネントが実行され、及び/又は全ての必要とされるアウトプットが生成されたこと)を確定することを含んでもよい。もしステップ830が、処理タスクが完了していることを示すのであれば、フローはステップ870へと続く。さもなければ、つまり、もし処理されるべき状態で残っている追加のコンポーネントが存在するならば、フローは840へと続く。
【0049】
ステップ840において、実行環境は同定されたコンポーネントを実行する。ステップ840の実行は、並行して(例えば、同時に)及び/又は順次に、同定されたコンポーネントを実行することを含んでもよい。いくつかの実施例においては、コンポーネントの実行は、1以上のインプットをコンポーネントに与えること及び/又はコンポーネントが実行を完了するときに呼び出されるコールバック(又は他の同期メカニズム)を登録することを含む。コールバックメカニズムは、前述の通り、アウトプットを渡すこと及び/又はエラーに対処することを考慮する。いくつかの実施例においては、ステップ840はコンポーネントのための複数の異なる実行プラットフォーム又は環境(例えば、Java(登録商標)仮想マシン、ジャバスクリプトインタープリタ、など)を選択することを含む。
【0050】
ステップ850は、ステップ820における依存関係データ構造へのアクセスに関連する並行処理タスクメタデータを維持することを含む。それ故、ステップ850はステップ840でコンポーネントを実行することで生成される、及び/又は外部ソース(例えば、擬似コンポーネント)から与えられるアウトプットにアクセスすることを含んでもよい。ステップ850は更に、依存関係データ構造の他のコンポーネントのインプットデータとして、及び/又は依存関係データ構造の処理タスクのアウトプットとして使用されるアウトプットデータを格納又はキャッシュすることを含んでもよい。いくつかの実施例においては、アウトプット/インプットデータは前述した並行処理メタデータの一部としてキャッシュ及び/又は格納されてもよい。
【0051】
いくつかの実施例において、ステップ850は、ステップ840でのコンポーネントの実行とは非同期で動作する(例えば、ステップ850はステップ840でのコンポーネントの実行とは別のスレッド又はプロセスで実行される)。非同期の実行は、本方法800がより速くコンポーネントの完了を検知し、及び/又は利用可能である新しい外部インプットをより速く同定することを可能にする。それ故、ステップ850は、ステップ840と並行に動作するように示すことができる。
【0052】
ステップ860は、コンポーネントが実行を完了したこと及び/又は1以上のインプットデータ値が受信されたことを確定することを含む。確定されれば、前述の通り、実行するのに利用できる追加コンポーネント同定するステップ830へとフローは続く。さもなければ、フローはステップ850へと続く。ステップ840、850及び/又は860は互いに非同期で動作するので、依存関係が充足されるとすぐ、以前に呼び出されたコンポーネントの実行が完了するのを待たずに、新しいコンポーネントは利用可能なものとして同定される。
【0053】
本方法は前述の通り、実行可能な1以上の追加コンポーネントを同定し、及び/又は処理タスクが完了しているかどうか(例えば、依存関係データ構造の全てのコンポーネントが実行されているかどうか)を確定するために、依存関係データ構造及び更新された並行状態メタデータが使用されるステップ830へと戻る。
【0054】
ステップ870において、次の処理タスク及び/又は依存関係データ構造が受信されるまで、フローは終了しているが、受信された時点でフローはステップ820へと続く。
【0055】
図9は、並行タスク処理の方法900の一実施例でのフロー図である。
【0056】
ステップ910において、本方法900は始まり、前述した通り初期化される。
【0057】
ステップ920において、処理タスクが受信される。処理タスクは1以上の処理ステップを含み、処理ステップは1以上のそれぞれのコードユニットにより実装される。
【0058】
ステップ930は、ステップ920の処理タスクを実装するために依存関係データ構造を定義することを含む。ステップ930は、処理タスクを1以上のコンポーネントにセグメント化することを含むが、各コンポーネントは、処理タスクの一部に対応し、そのコードユニットに関連する。各コンポーネントは、それ故、それぞれのコードユニットをカプセル化し、実行環境内のコードユニットの実行に備える。ステップ930は更に、前述したコンポーネント間の依存関係を定義することを含んでもよい。
【0059】
ステップ940は、ステップ930のコンポーネントを含む依存関係データ構造を定義することを含む。ステップ940は更に、コンポーネント間の依存関係アークを定義することを含んでもよく、各依存関係アークはコンポーネント間の依存関係に対応する。
【0060】
ステップ950において、依存関係データ構造は実行環境へ与えられ、実行環境は、
図8につき前述した通り、依存関係データ構造を用いて処理タスクを実行する。
【0061】
ステップ960において、本方法900は、ステップ920で次なる処理タスクが受信されるまで終了している。
【0062】
図10は、同時並行処理システム1000の一実施例のブロック図である。システム1000はコンピューティングデバイス1010を含み、コンピューティングデバイス1010は、プロセッサ1012、メモリ1014、ヒューマンマシンインターフェースデバイス1016(ディスプレイ、キーボード、マウス、スピーカーなど)及び/又は非一時的なコンピュータ可読媒体1018を含んでもよい。コンピューティングデバイス1010は更に、コンピューティングデバイス1010をネットワーク1021へ通信のためにつなぐべく、ネットワークインターフェース、インプット/アウトプットデバイス又は同様のものなどのような、1以上の通信インターフェース1020を含んでもよい。
【0063】
実行環境1030はコンピューティングデバイス1010上で動作する。実行環境1030は、非一時的なコンピュータ可読記憶媒体1018に格納される1以上の命令として実現することができる。実行環境1030は、1以上の実行プラットフォーム1032を含んでよく、実行プラットフォーム1032は、スレッド、プロセス、仮想マシン(例えば、Java(登録商標)仮想マシン)、スクリプトインタープリタ(例えば、ジャバスクリプトインタープリタ)、ネイティブ実行プラットフォーム、エミュレートされた実行プラットフォーム又は同様のものを含んでよいが、それらには限られない。
【0064】
実行環境1030は、処理タスクを実装するように構成される。いくつかの実施例においては、実行環境1030(又は他のツール)は、処理タスクを実装するために依存関係データ構造を定義することに備える(例えば、
図9につき前述した通りである)。いくつかの実施例においては、依存関係データ構造1033は、実行環境1030による実行のために、媒体のような非一時的なコンピュータ可読記憶媒体に格納され、及び/又はメモリ1016にロードされる。
【0065】
実行環境1030は、コンピュータ可読記憶媒体1018又は他のソース(例えば、ネットワークコネクション、ヒューマンマシンインターフェースデバイス1016又は同様のもの)におけるタスクに対応する依存関係データ構造1033にアクセスすることで、処理タスクを実行するように構成されてよい。実行環境1030は、前述した通り、依存関係データ構造及び/又は並行状態メタデータ1035を用いて実行可能であるコンポーネントを同定する。いくつかの実施例においては、実行環境1030は、依存関係データ構造1033の複数のコンポーネントを並行して(例えば、同時に)実行する。コンポーネントは1以上の実行プラットフォーム又は環境1032において実行されてよい。
【0066】
どのコンポーネントが実行されたかを示し、及び/又はインプット/アウトプットデータが利用できるかどうかを同定する並行状態メタデータ1035を、実行環境1030は維持する。実行環境1030は、依存関係が充足され、実行可能であるコンポーネントを同定するため、並行状態メタデータ1035及び/又は依存関係データ構造を用いる。実行環境1030は、処理タスクが完了するまで(例えば、望まれたアウトプットが得られ、及び/又は依存関係データ構造1033の全てのコンポーネントが実行されるまで)、依存関係データ構造のコンポーネントの実行(及び同時並行状態メタデータ1035の維持)を続ける。
【0067】
依存関係データ構造1033の処理タスクの1以上のアウトプットは、コンピュータ可読記憶媒体1018に格納され、ネットワーク1021(ネットワークインターフェース1020経由)で送信され、及び/又はヒューマンマシンインターフェースデバイス1016でユーザに提示されてよい。
【0068】
上記の説明では、本明細書で説明される実施例の完全な理解のために多くの具体的な詳細を提供している。しかしながら、当業者であれば、1以上の具体的な詳細が除外されていること又は、他の方法、コンポーネント若しくはデータが用いられてもよいことを認識するであろう。いくつかの実施例においては、動作が詳細に示されていない、又は説明されていない。
【0069】
更に、説明された特徴、動作又は特性は、1以上の実施例において任意の適切な方法によって組み合わされてもよい。当業者にとって自明であれば、開示された実施例について説明された方法のステップや作用の順番が変更されてもよいことはすぐに理解されるであろう。このように、図面又は詳細な説明におけるいかなる順番も、例示の目的のみのものであり、ある順番を必要とするように指定されない限り必須の順番を含意するものではない。
【0070】
実施例は様々なステップを含んでもよく、ステップは、汎用目的又は特定目的のコンピュータ(又は他の電子デバイス)により実行される、コンピュータで実行可能な命令で実現されてよい。あるいは、ステップは、ステップを実行する特定論理を含むハードウェアコンポーネントによって、又は、ハードウェア、ソフトウェア及び/若しくはファームウェアによって実行されてもよい。
【0071】
実施例は又、本明細書で説明されるプロセスを実行するコンピュータ(又は他の電子デバイス)をプログラムするために用いられる命令を格納した非一時的なコンピュータ可読記憶媒体を含む、コンピュータプログラムの製品として提供されてよい。コンピュータ可読記憶媒体は、ハードドライブ、フロッピーディスク、光ディスク、CD―ROM、DVD―ROM、ROM、RAM、EPROM、EEPROM、磁気カード又は光カード、固体メモリデバイス又は電子的な命令を格納するのに適した他のタイプの媒体/コンピュータ可読媒体を含んでよいが、これらに限られるものではない。
【0072】
本明細書で使用されている通り、ソフトウェアモジュール又はコンポーネントは、メモリデバイス及び/又はコンピュータ可読記憶媒体に設けられる、任意のタイプのコンピュータ命令又はコンピュータで実行可能なコードを含んでよい。ソフトウェアモジュールは、例えば、1以上の物理的又は論理的なコンピュータ命令のブロックを含んでよく、それらは1以上のタスクを実行し特定の抽象的なデータタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、などとして編成されてよい。
【0073】
特定の実施例において、特定のソフトウェアモジュールはメモリデバイスの異なる場所に格納された全く異なる命令を含んでよく、これらの命令はモジュールの前述した機能性と一緒に実装する。実際、モジュールは、単一の命令又は多くの命令を含んでもよいし、いくつかの異なるコードセグメント、異なるプログラム及びいくつかのメモリデバイスへ分散されてもよい。いくつかの実施例は、通信ネットワークを通じてリンクされるリモート処理タスクデバイスによってタスクが実行される分散コンピューティング環境において実行されてもよい。分散型コンピューティング環境では、ソフトウェアモジュールはローカル及び/又はリモートのメモリ記憶デバイスに設けられてもよい。更に、データベースレコードにおいて互いに結合又はレンダリングされるデータは、同一のメモリデバイスに、又はいくつかのメモリデバイスに常駐してもよいし、単一のネットワーク間のデータベースにおけるレコードの複数のフィールドに互いにリンクされてもよい。
【0074】
発明の基礎をなす本質からそれることなく、上記で説明された実施例の詳細に対していくつも変更が加えられてもよいことは、当業者に理解されるであろう。
【0075】
本出願人は特許請求の範囲の権利を要求する。