(57)【特許請求の範囲】
【請求項１】
高度な並行処理のためのコンピュータにより実装される方法であって、該方法はプロセッサとメモリとを備えるコンピューティングデバイスを含む方法であって、該方法は、
前記コンピューティングデバイスで実行可能なそれぞれのコードユニットを各コンポーネントが表す、複数のコンポーネントと、
外部処理システムによって充足すべき依存関係を表す明示的擬似コンポーネントと、
依存関係データ構造における対応するコンポーネントを実行するために充足すべき依存関係を各依存関係アークが表す、前記コンポーネント及び前記明示的擬似コンポーネントを接続する複数の依存関係アークであって前記明示的擬似コンポーネントから２以上の前記コンポーネントを含むセットへの依存関係アークを含む複数の依存関係アークと、
を含む前記メモリ内の前記依存関係データ構造に前記プロセッサを用いてアクセスするステップと、
前記メモリ内の前記依存関係データ構造について前記プロセッサを用いて並行状態メタデータを更新して、充足されるコンポーネント依存関係を示すステップであって、コンポーネントが前記コンピューティングデバイスで実行されたとの確定、及び、前記明示的擬似コンポーネントが前記外部処理システムによって充足されたとの確定、の少なくとも１以上に応じて前記プロセッサは前記並行状態メタデータを更新する、ステップと、
前記メモリ内の前記依存関係データ構造の前記更新された並行状態メタデータにもとづいて実行可能である、前記依存関係データ構造における２以上のコンポーネントを前記プロセッサを用いて同定するステップであって、前記並行状態メタデータを更新して前記明示的擬似コンポーネントが前記外部処理システムによって充足されたと示したことに応じて前記２以上のコンポーネントは実行可能であると同定される、ステップと、
前記プロセッサを用いて前記同定されたコンポーネントを前記コンピューティングデバイスで並行して実行するステップと、
を実行するコンピューティングデバイスを含む方法。
【請求項２】
請求項１に記載の方法であって、
前記コンピューティングデバイスで同定されたコンポーネントの実行に応じて前記メモリ内の前記並行状態メタデータを前記プロセッサを用いて更新する更新ステップを更に含む方法。
【請求項３】
請求項２に記載の方法であって、
前記並行状態メタデータを更新するステップが、前記依存関係データ構造のコンポーネントを実行することで生成されるアウトプットをキャッシュすることを含む方法。
【請求項４】
請求項１に記載の方法であって、
前記外部処理システムから外部インプットを受信すると、前記メモリ内の前記並行状態メタデータを前記プロセッサを用いて更新するステップを更に含む方法。
【請求項５】
請求項１に記載の方法であって、
コンポーネントは、当該コンポーネントの全ての依存関係が充足される場合に実行可能となる方法。
【請求項６】
請求項１に記載の方法であって、
前記同定されるコンポーネントを実行することに応じて前記メモリ内の前記並行状態メタデータを前記プロセッサを用いて更新するステップと、
前記依存関係データ構造の各コンポーネントが実行されるまで、前記依存関係データ構造の実行可能なコンポーネントを前記プロセッサを用いて同定し、前記更新するステップによる更新に応じて当該同定されたコンポーネントを実行するステップと、
を更に含む方法。
【請求項７】
請求項１に記載の方法であって、
前記同定されたコンポーネントの実行に応じて前記メモリ内の前記並行状態メタデータを前記プロセッサを用いて更新するステップと、
前記依存関係データ構造のアウトプット結果が生成されるまで、前記依存関係データ構造の実行可能なコンポーネントを前記プロセッサを用いて同定し、前記更新するステップによる更新に応じて前記同定されたコンポーネントを実行するステップと、
を更に含む方法。
【請求項８】
請求項１に記載の方法であって、
前記依存関係データ構造の実行によりアウトプット結果が生成され、
前記アウトプット結果をヒューマンマシンインターフェースデバイスでユーザに提示するステップと、
前記アウトプット結果をネットワークで送信するステップと、
前記アウトプット結果を非一時的なコンピュータ可読記憶媒体に記録するステップと、
のうちの１以上のステップを更に含む方法であって、該１以上のステップは前記プロセッサを用いて行われる、方法。
【請求項９】
請求項１に記載の方法であって、
前記同定されたコンポーネントは前記コンピューティングデバイスで実行され、当該コンピューティングデバイスは、仮想マシン、スレッド、プロセス、スクリプトインタープリタ、ネイティブ実行プラットフォーム、エミュレートされた実行プラットフォームのうちのいずれか１つの内部にある方法。
【請求項１０】
請求項１に記載の方法であって、
それぞれの処理タスクステップを実装するように構成されているそれぞれのコードユニットへ、複数の処理タスクステップを前記プロセッサを用いてカプセル化するステップと、
それぞれのコードユニットの間の依存関係を前記プロセッサを用いて同定するステップと、
前記メモリ内の前記依存関係データ構造を前記プロセッサを用いて生成するステップであって、前記コードユニットのそれぞれは前記依存関係データ構造の前記複数のコンポーネントのそれぞれ１つに対応し、前記依存関係データ構造の前記依存関係アークは同定された前記それぞれのコードユニットの間の依存関係に対応する、ステップと、
を更に含む方法。
【請求項１１】
請求項１０に記載の方法であって、
前記外部処理システムによって充足すべき外部依存関係を前記プロセッサを用いて同定するステップと、
当該外部依存関係を表すために前記メモリ内の前記依存関係データ構造に前記明示的擬似コンポーネントを前記プロセッサを用いて含めるステップを更に含む方法。
【請求項１２】
命令を含む非一時的なコンピュータ可読記憶媒体であって、該命令はプロセッサとメモリとを備えるコンピューティングデバイスに、
前記コンピューティングデバイスで実行可能なそれぞれのコードユニットを各コンポーネントが表す複数のコンポーネントと、
外部処理システムによって充足すべき依存関係を表す明示的擬似コンポーネントと、
依存関係データ構造における対応するコンポーネントを実行するために充足すべき依存関係を各依存関係アークが表す、前記コンポーネント及び前記明示的擬似コンポーネントを接続する複数の依存関係アークであって前記明示的擬似コンポーネントから２以上の前記コンポーネントを含むセットへの依存関係アークを含む複数の依存関係アークと、
を含む前記メモリ内の前記依存関係データ構造に前記プロセッサをアクセスさせるステップと、
前記メモリ内の前記依存関係データ構造について並行状態メタデータの更新を前記プロセッサに行わせて、充足されるコンポーネント依存関係を示すステップと、
前記メモリ内の前記依存関係データ構造の前記更新された並行状態メタデータにもとづいて実行可能な、前記依存関係データ構造における２以上のコンポーネントを前記プロセッサに同定させるステップであって、前記並行状態メタデータを更新して前記明示的擬似コンポーネントが前記外部処理システムによって充足されたと示したことに応じて当該２以上のコンポーネントは実行可能と同定される、ステップと、
前記同定されたコンポーネントを前記コンピューティングデバイスで並行して前記プロセッサに実行させるステップと、
を含む操作を行わせる命令である、記憶媒体。
【請求項１３】
請求項１２に記載の非一時的なコンピュータ可読記憶媒体であって、前記操作は、
前記同定されたコンポーネントを前記コンピューティングデバイスで実行することに応じて前記プロセッサに前記メモリ内の前記並行状態メタデータを更新させるステップを更に含み、前記並行状態メタデータを更新するステップは、コンポーネントが生成したアウトプットをキャッシュすることを含む記憶媒体。
【請求項１４】
請求項１２に記載の非一時的なコンピュータ可読記憶媒体であって、前記操作は、
前記外部処理システムから外部インプットを受信すると、前記メモリ内の前記並行状態メタデータを前記プロセッサに更新させるステップを更に含む、記憶媒体。
【請求項１５】
請求項１２に記載の非一時的なコンピュータ可読記憶媒体であって、
前記依存関係データ構造のコンポーネントを実行することと、前記外部処理システムから外部インプットを受信することと、の１以上に応じて、前記メモリ内の前記並行状態メタデータを前記プロセッサに更新させるステップと、
前記メモリ内の前記並行状態メタデータを更新することに応じて実行可能な追加コンポーネントを前記プロセッサに同定させるステップと、
前記追加コンポーネントを前記コンピューティングデバイスで並行して前記プロセッサに実行させるステップと、
を前記操作が更に含む記憶媒体。
【請求項１６】
請求項１５に記載の非一時的なコンピュータ可読記憶媒体であって、
前記メモリ内の前記並行状態メタデータを前記プロセッサに更新させ、当該更新に応じて実行可能な追加コンポーネントを同定させ、前記依存関係データ構造の同定されたアウトプット結果が生成されるまで前記追加コンポーネントを前記コンピューティングデバイスで実行させるステップと、
前記同定されたアウトプット結果をヒューマンマシンインターフェースデバイスでユーザに提示すること、前記同定されたアウトプット結果をネットワークで送信すること、及び、前記同定されたアウトプット結果を非一時的なコンピュータ可読記憶媒体に格納することのうち１以上を前記プロセッサに行わせるステップと、
を前記操作が更に含む記憶媒体。
【請求項１７】
請求項１２に記載の非一時的なコンピュータ可読記憶媒体であって、
前記同定されたコンポーネントは前記コンピューティングデバイスの実行プラットフォーム内で実行され、前記実行プラットフォームは、仮想マシン、スレッド、プロセス、スクリプトインタープリタ、ネイティブ実行プラットフォーム、エミュレートされた実行プラットフォームのうちのいずれか１つである記憶媒体。
【請求項１８】
請求項１２に記載の非一時的なコンピュータ可読記憶媒体であって、
複数の処理タスクステップのいずれか１つを実装するようにそれぞれのコードユニットを各コンポーネントが含む複数のコンポーネントへ、複数の処理タスクステップを、前記プロセッサにカプセル化させるステップと、
前記コンポーネントのそれぞれ１つを実行するために充足すべき依存関係を各コンポーネント依存関係が表すコンポーネント依存関係を前記プロセッサに同定させるステップと、
前記メモリ内の依存関係データ構造を前記プロセッサに定義させるステップと、
を前記操作が更に含む記憶媒体。
【請求項１９】
請求項１８に記載の非一時的なコンピュータ可読記憶媒体であって、
前記外部処理システムによって充足すべき依存関係を表すために前記依存関係データ構造に前記明示的擬似コンポーネントを含めるステップを前記操作が更に含む記憶媒体。
【請求項２０】
高度な並行処理方法を実行するコンピューティングデバイスであって、
メモリと、
プロセッサと、
前記プロセッサ上で動作する実行環境と、
を含み、前記実行環境は、
それぞれ実行可能なコードユニットを各コンポーネントが表す複数のコンポーネントと、
外部処理システムによって完了すべき外部依存関係を表す明示的擬似コンポーネントと、
依存関係データ構造における対応するコンポーネントを実行するために充足すべき依存関係を各依存関係アークが表す、前記コンポーネント及び前記明示的擬似コンポーネントを接続する複数の依存関係アークであって前記明示的擬似コンポーネントから２以上の前記コンポーネントを含むセットへの依存関係アークを含む複数の依存関係アークと、
を含む前記依存関係データ構造であって、前記メモリに格納された依存関係データ構造にアクセスし、
前記実行環境内でのコンポーネントの実行の完了、及び、前記外部処理システムによって前記明示的擬似コンポーネントが完了されたとの確定、の１以上に応じて前記依存関係データ構造の並行状態メタデータを更新し、
前記依存関係データ構造の前記更新された並行状態メタデータにもとづいて前記実行環境内で実行可能である前記依存関係データ構造におけるコンポーネントを同定し、前記同定されたコンポーネントの全ての依存関係が充足されることを前記更新された並行状態メタデータが示す場合に前記同定されたコンポーネントは実行可能とされ、
前記実行環境内で前記同定されたコンポーネントを実行する
ように設定される、コンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、並行処理、特に、高度並行処理タスクの登録及び実行に関する。
【図面の簡単な説明】
【０００２】
【図１】依存関係データ構造の一例を示す図である。
【図２】依存関係データ構造の他の一例を示す図である。
【図３】依存関係データ構造の他の一例を示す図である。
【図４】依存関係データ構造の一例を示す図である。
【図５Ａ】依存関係データ構造の他の一例を示す図である。
【図５Ｂ】依存関係データ構造及び並行状態メタデータの一例を示す図である。
【図５Ｃ】依存関係データ構造及び並行状態メタデータの一例を示す図である。
【図６Ａ】サブグラフが抽出される依存関係データ構造を示す図である。
【図６Ｂ】サブグラフの一例を示す図である。
【図６Ｃ】擬似コンポーネントを含むサブグラフの一例を示す図である。
【図６Ｄ】インプットパラメータの依存関係を有するサブグラフの一例を示す図である。
【図６Ｅ】アウトプットを生成するように設定されたサブグラフの一例を示す図である。
【図６Ｆ】依存関係データ構造内のサブグラフの一例を示す図である。
【図７】依存関係データ構造を示す図である。
【図８】並行処理方法の一実施例のフロー図である。
【図９】並行処理の他の方法の一実施例のフロー図である。
【図１０】並行処理システムのブロック図である。
【発明の概要】
【０００３】
多くのタスク処理は、活用されていない並行処理を含んでいる。本明細書で使用されている通り、“並行処理”とは、並行して又は同時に動作しうる２以上のタスク処理（例えば、タスク間に相互依存関係がないこと）をいう。開発者は、開発にかかわる困難性のせいで、潜在的な並行処理を十分に活用できていないかもしれない。典型的には、開発者は設計時に、演繹的依存関係やプログラム作成者のカスタムコード（例えば、マルチスレッディング及び/又はスレッド間通信）などの並行処理を同定しなければならないが、それでは高いコストがかかり、得られるシステムに潜在的問題を持ち込むのである。それ故、並行処理の登録のための体系的で効率的なアプローチ及びそれらの並行処理を効率よく活用するように構成される実行マネージャが必要とされている。
【０００４】
いくつかの実施例において、処理タスクは、独立した“コードユニット”に配列されている。本明細書で使用されている通り、“コードユニット”又は“コードのユニット”とは、論理的に異なる、コンピュータ実行可能命令のセットをいう。コードユニットは、より大きな処理タスクの一部又はコンポーネントであってもよい。コードユニットは、ハードディスク、不揮発性メモリ、光記憶媒体又は同様のもののような、非一時的なコンピュータ可読記憶媒体上で実現されてもよい。コードユニットは、汎用プロセッサ、特定用途集積回路(ＡＳＩＣ)、フィールド−プログラマブルゲートアレイ(ＦＰＧＡ)又は同様のもののような、コンピューティングデバイスによって実行される非一時的な記憶媒体からロードされてもよい。
【０００５】
依存関係はコードユニット間に存在してもよく、例えば最初のコードユニットのアウトプットは、２番目のコードユニットが必要とするインプットとすることができる。これらの依存関係は、依存関係データ構造に登録することができる。本明細書で使用されている通り、依存関係データ構造とは、コードユニット間の依存関係が登録されているデータ構造をいう。依存関係データ構造とは、有向非巡回グラフ(ＤＡＧ)、ツリー、アレイ又は任意の適切なデータ構造のようなグラフとして実装することができる。コードユニットは、データ構造内のコンポーネントとして表すことができる。本明細書で使用されている通り、コンポーネントは、カプセル化とコードユニットの呼び出しを許可する、依存関係データ構造におけるノードである。コードユニット間の依存関係は、データ構造におけるコンポーネント間の接続によって表すことができる。本明細書で使用されている通り、他のコードユニットに必要とされるインプットを形成するために１番目のコードユニットのアウトプットが用いられる場合に、依存関係が生じる。データ構造において、“依存コンポーネント”とは他のコンポーネントのアウトプットを必要とするコンポーネントをいう。反対に、“独立”コードユニットとは、他のコンポーネントのアウトプットを必要としないコードユニットをいう。コンポーネント間の依存関係は、コンポーネント間の接続（例えば、アーク）として表すことができる。
【０００６】
いくつかの実施例において、実行マネージャは、依存関係データ構造によって定義される処理タスクを実装する。実行マネージャは依存関係データ構造を用いて実行することができるコンポーネントを同定する（例えば、依存関係が充足されているコンポーネントを同定する）。ある場合には、コードユニットは“外部”エンティティ（実行マネージャ以外のエンティティ）によって充足されている依存関係を有していてもよい。例えばコンポーネントは、別個のＩ／Ｏ処理システムのアウトプット、リモート処理タスクのアウトプット又は同様のものに依存してもよい。外部エンティティは依存関係データ構造において、“擬似コンポーネント”として表すことができる。本明細書で使用されている通り、擬似コンポーネントは、そのデータ構造内の他のコンポーネント（又は実行マネージャ）によって充足されえない、依存関係データ構造外の依存関係を表す。反対に、その依存関係データ構造の他のコンポーネント（そのデータ構造の“内部コンポーネント”）への依存関係は、そのコンポーネントに関連したコードユニットを実行する実行マネージャによって解決されうる。
【０００７】
本明細書で使用されている通り、“明示的擬似コンポーネント”とは、開発者又は他のエンティティによって明示的に依存関係データ構造に追加される擬似コンポーネントをいう。“黙示的擬似コンポーネント”とは、サブグラフ（下記で説明される）のエントリコンポーネントとしてコンポーネントが示されるときのような特定の状況において依存関係データ構造に自動的に追加される（又は、データ構造における既存のコンポーネントの代わりに用いられる）擬似コンポーネントをいう。
【発明を実施するための形態】
【０００８】
図１は、依存関係データ構造１００の一例を示す。データ構造１００は、ハードディスク、不揮発性メモリ、光記憶媒体又は同様のものなどのような、非一時的なコンピュータ可読記憶媒体上に実現することができる。データ構造１００は、インターネットプロトコル（ＩＰ）ネットワーク、ワイヤレスネットワークなどのようなコミュニケーションネットワークで通信されてもよい。
【０００９】
図１の例では、データ構造１００はＤＡＧを含む。しかしながら、本開示はこの事項に限らず、任意の適切なデータ構造を用いることにも適合しうる。データ構造１００は、独立コンポーネント１１０を含み、この独立コンポーネント１１０は、データ構造１００における他のコードユニットへの依存関係がないコードユニットを表す。依存コンポーネント１１２は、コンポーネント１１０のアウトプットに依存する。この依存関係は、コンポーネント１１０とコンポーネント１１２の間の依存関係アーク１１１として表される。依存関係アーク１１１の“方向”は、コンポーネント１１０のアウトプットが、コンポーネント１１２に必要とされるインプットであることを示している。
【００１０】
依存関係アーク１１１の“方向”は、必要とされるアウトプットがコンポーネント１１０によって生成されるまでは、コンポーネント１１２のコードユニットが実行されてはならないことを示している。アーク１１１は、名前、データタイプ、インターフェース定義（例えばアプリケーションプログラミングインターフェース（ＡＰＩ）、コールバック登録など）、依存関係の“方向”、又は同様のものなどの依存関係を記述するメタデータを含むことができる。
【００１１】
図２は独立コンポーネント２１０のアウトプットが複数の依存コンポーネント２１２及び２１４に必要とされる依存関係データ構造２００の他の一例を示す。依存関係は、コンポーネント２１０とコンポーネント２１２及び２１４との間の依存関係アーク２１１で表される。前述の通り、アーク２１１は、依存関係の特質に関するメタデータを含んでもよい。
【００１２】
図３に示される他の一例においては、依存関係データ構造３００は、複数のコンポーネント（コンポーネント３２２及び３２４）のアウトプットに依存するコンポーネント３２０を含む。これらの依存関係は、それぞれアーク３２１及び３２３で表される。
【００１３】
図４は、擬似コンポーネント（例えば、外部依存関係）を含む依存関係データ構造４００の一例を示す。図４の例では、コンポーネント４３０は、外部の擬似コンポーネント４３２のアウトプットに依存する（依存関係アーク４３１にて表されている）ほかに、非擬似コンポーネント４３４のアウトプットにも依存する（依存関係アーク４３３にて表されている）。以下に記述する通り、依存関係４３１は依存関係データ構造４００の実行マネージャによっては解決されない。反対に、依存関係４３３は、コンポーネント４３０によって必要とされる１以上のアウトプットを生成するコンポーネント４３４のコードユニットを実行する実行マネージャによって解決される。
【００１４】
本明細書で開示されている依存関係データ構造は、多数の異なる“世代”を含んでいてもよい。本明細書で使用されている通り、“世代”とは、コンポーネント間の依存関係アークの数をいう。第１世代は、内部依存関係のない独立コンポーネントを含んでいる。第２世代は、第１世代からのアウトプットに依存するコンポーネントを含むと言ったように、各世代は順次前の世代からのアウトプットに依存するコンポーネントを含む。
【００１５】
図５Ａは、多数の異なる世代を含む依存関係データ構造５００を示す。図５Ａの例では、データ構造５００は独立コンポーネント５０２、５０４及び５０６を含み、それらはデータ構造５００の“第１世代”５０１を構成する。コンポーネント５０６は擬似コンポーネントを表す。
【００１６】
第２世代５１１の依存コンポーネント（コンポーネント５１０、５１２及び５１４を含む）は、第１世代のコンポーネント（コンポーネント５０２及び／又は５０４）により生成されるアウトプットを必要とする。コンポーネント５１２はコンポーネント５０２及び５０４の両方のアウトプットに依存する。
【００１７】
第３世代５２１のコンポーネント（コンポーネント５２０、５２２、５２４、５２６及び５２８を含む）は、“第２世代”のコンポーネントにより生成されるアウトプットを必要とする。依存関係は、しかしながら、複数の世代に及んでもよい。図５Ａに示される通り、コンポーネント５２４は、第２世代のコンポーネント５１０により生成されるアウトプットのほかに、第１世代のコンポーネント５０２により生成されるアウトプットも必要とする。それ故、多階層の依存関係データ構造を記述するときに“世代”に言及することは便利かもしれないが、データ構造５００におけるコンポーネント間の実際の依存関係及び／又はコンポーネントに関連するコードユニットの並行実行は、隣接する世代に限られない。
【００１８】
依存関係データ構造５００は、第４世代５３１における１以上の“アウトプット”コンポーネント５３０及び５３２で“終了”する。本明細書で用いられている通り、“アウトプット”コンポーネントとは、依存関係データ構造における他のコンポーネントにより必要とされないアウトプットを生成する、その依存関係データ構造におけるコンポーネントをいう。アウトプットコンポーネントとは、それ故、依存関係データ構造自体の“アウトプット”（例えば、処理タスク又はサブグラフのアウトプット）を生成するコンポーネントをいう。図５Ａの例では、コンポーネント５３０及び５３２は、依存関係データ構造５００の“アウトプット”を生成する。
【００１９】
本明細書で説明される依存関係データ構造は、コードユニットの並行実行を管理するために用いられてもよい。いくつかの実施例では、実行マネージャ（又は他のエンティティ）が、処理タスクに関連する依存関係データ構造にアクセスする。実行環境は、実行可能な（例えば、依存関係が“充足された”）コンポーネントを同定する。まず、依存関係データ構造の独立（例えば、リーフ）コンポーネントは実行可能である。独立（及び他の）コンポーネントの実行は、依存関係データ構造における他のコンポーネントの依存関係を充足する。本明細書で使用されている通り、“充足されたコンポーネント”とは、実行可能なコンポーネント及び／又はそれが必要とするインプットが利用可能であるコンポーネントをいう。
【００２０】
実行環境は、依存関係データ構造の“並行状態”を維持する。本明細書で使用されている通り、依存関係データ構造の“並行状態”とは、どのコンポーネントが実行されたか、及び／又はどのコンポーネントのアウトプットが利用可能であるかのランタイム表現をいう。依存関係データ構造の並行状態は、依存関係データ構造自体及び／又は他の異なるデータ構造において維持されてもよい。実行環境は依存関係データ構造におけるコンポーネントを実行するので、実行環境は、実行可能な次の組の充足されたコンポーネントを同定するために、並行状態を更新する。
【００２１】
図５Ｂは並行状態メタデータを含むように適合された依存関係データ構造（図５Ａの依存関係データ構造５００）の一例を示す。並行状態メタデータは、コンポーネント５０２、５０４及び５１０が実行されたことを示す（コンポーネント５０２、５０４及び５１０が塗りつぶされて示されている）。あるいは又は更に、並行状態メタデータは、どの依存関係アークが充足されているかの指示を含んでもよい（例えば、依存関係アーク５４１、５４２、５４３、５４４、５４５、５５１、５５２及び５５３が充足されていることを示す）。
【００２２】
依存関係データ構造５０３及び／又は並行状態メタデータを用いて、実行環境（又は他のエンティティ）は、実行可能なコンポーネント（依存関係が充足されたコンポーネント）を同定する。並行状態メタデータは、充足されたコンポーネントの指示を維持する。図５Ｂの例において、並行状態メタデータは、“充足され”且つ実行可能なコンポーネント（例えば、５１２、５２０、５２２及び５２４）を同定するそれぞれの指示を含んでもよい。並行状態メタデータはまた、依存関係が充足されていないコンポーネント（例えば、コンポーネント５１４、５２６、５２８、５３０及び５３２）を同定することもできる。
【００２３】
図５Ｂに示される通り、一度に実行可能なコンポーネントは２以上あってもよい。依存関係データ構造５０３（及び並行状態メタデータ）は、コンポーネント５１２、５２０、５２２及び５２４が実行可能であることを示す。コンポーネント５１２、５２０、５２２及び／又は５２４の実行は、同時に（並行して）起こる。コンポーネント５１２、５２０、５２２及び５２４の並行処理は、依存関係データ構造におけるコードユニットの表現及び並行状態メタデータの可用性から容易に同定できる。
【００２４】
図５Ｂで例示される通り、並行処理の機会は、依存関係が充足される順番に依存する。例えば、コンポーネント５１４は、擬似コンポーネント５０６のアウトプットへの依存関係がまだ充足されていないため、実行可能でない。しかしながら、他の場合には、異なった順番でコンポーネントが実行し終えると、異なった並行状態となり、異なる組のコンポーネントが同時並行処理に使用可能となる。並行状態の違いは、処理負荷、通信待ち時間、Ｉ／Ｏ時間などを含むが、これらに限られるものではない多くの種々のファクターに起因する。例えば、コンポーネント５０２は、データベースのデータにアクセスする動作に対応する。ある場合には（例えば、データベースの負荷が軽い場合）、この動作は比較的すぐに完了する。しかしながら、別の場合には（例えば、データベースの負荷が重い場合）、コンポーネントの実行には、他のコンポーネントの実行に比べて比較的長い時間がかかる。依存関係データ構造のコンポーネントの配列は、並行状態の維持とともに、順番の変動の変化や他のコンポーネントが実行される速度には無関係に、リアルタイム並行処理の活用を可能にする。
【００２５】
図５Ｃは、並行状態メタデータを含む依存関係データ構造の他の一例を示す。図５Ｃの例では、コンポーネントが実行されると、コンポーネントは、そこで充足された依存関係アークとともにデータ構造５０５から除去される。それに応じて、実行可能なコンポーネント（例えば、依存関係が充足されたコンポーネント）はデータ構造５０５におけるリーフノードとして同定される。図５Ｂのように、図５Ｃは、コンポーネント５０２、５０４及び５１０が実行され、そしてそのアウトプットがそのデータ構造における他のコンポーネントに利用可能となっていることを示す。そのため、これらのコンポーネント及び対応する依存関係アーク（図５Ｂのアーク５４１、５４２、５４３、５４４、５４５、５５１、５５２及び５５３）はデータ構造５０５から除去されている。
【００２６】
実行可能なコンポーネント（例えば、依存関係が充足されているコンポーネント）は、データ構造５０５においてリーフノードとして同定される。いくつかの実施例では、並行状態メタデータは、上述の通り更にそれぞれ指標５６０を含んでもよい。あるいは、コンポーネントは、リーフノード（例えば、明示の指標５６０とは独立している）を同定するためにデータ構造５０５をトラバースすることで同定することができる。
【００２７】
依存関係データ構造のコンポーネントのコードユニットを実行することで生成されるアウトプットは、実行環境（又は他のエンティティ）によって格納（例えば、キャッシュ）され、他の依存コンポーネントへのインプットとして利用可能になることができる。
【００２８】
いくつかの実施例では、サブグラフを依存関係データ構造から抽出することができる。サブグラフは、１以上のコンポーネントを含み、“ルート”コンポーネント及び１以上の“エントリ”コンポーネントを含んでいる。“ルート”コンポーネントは、エントリコンポーネントによって生成されるアウトプットに（直接又は間接に）依存する。“エントリ”コンポーネントは、サブグラフ外から生成されるインプットに依存するコンポーネントである。いくつかの実施例では、サブグラフは、ルートコンポーネントから生じるパス上にエントリコンポーネントが存在するようになっている。それ故に、サブグラフは、すべてのパスがリーフコンポーネント（依存関係のないコンポーネント）又はエントリコンポーネントで終わるまでルートコンポーネントからトラバースされる。サブグラフは、コードユニット、コンポーネント又は同様のものとしてカプセル化、及び／又はそれらのようなものとして表すことができ、それが抽出された依存関係データ構造とは無関係に実行することができる。
【００２９】
図６Ａは、サブグラフが抽出される依存関係データ構造６００の一例を示す。依存関係データ構造６００は、前述した通り依存関係アークによって相互に接続されるコンポーネント６１０、６１２、６１３、６１４、６１５、６１６、６１７及び６１８を含む。ルートコンポーネント６１０及びエントリコンポーネント６１２を含むサブグラフ６２０は、依存関係データ構造６００から抽出される。コンポーネント６１３及び６１６は、ルートノード６１０の依存関係を充足するためにサブグラフに含まれる。図６Ｂは、依存関係データ構造６００から抽出されたサブグラフ６０１を示す。いくつかの実施例では、サブグラフのエントリコンポーネントの依存関係は、擬似コンポーネントとして表すことができる。図６Ｃは、コンポーネント６１２の依存関係を表す擬似コンポーネント６３２を含むサブグラフ６０２を示す。
【００３０】
すでに説明した通り、擬似コンポーネント６３２のような擬似コンポーネントは、外部の依存関係（特定の依存関係データ構造又はサブグラフ内のコンポーネントによって充足されない依存関係）を表す。それ故、サブグラフ（又はサブグラフを実装している実行環境）は、依存コンポーネントのインプット／アウトプットデータをマッピングすることになっている。
【００３１】
図６Ｄは、図６Ｃのサブグラフ６０２から生成されたファンクションを例示する。図６Ｄの例では、擬似コンポーネント６３２はサブグラフ６０２のカプセル化を表す関数“ｆｏｏ”の引数(ａｒｇ０)への論理的依存関係を有している。
【００３２】
いくつかの実施例においては、サブグラフの“レスポンス”又はアウトプット値が返されてもよく、並びに／又は他の処理タスク及び／若しくは処理タスクのアウトプットのために用いられてもよい。そのため、サブグラフのカプセル化表現は、サブグラフ内のコンポーネントの１以上のアウトプットを捕捉して、それらのアウトプットを実行環境又は他のエンティティに利用可能にするように設定することができる。図６Ｅは、他のエンティティ及び／又はコンポーネントに利用可能となるアウトプットデータ６１１を与えるサブグラフ６０２を例示する。
【００３３】
前述した通り、サブグラフは、実行可能なコードユニットとして表すことができる。それ故、いくつかの実施例においては、サブグラフはコンポーネント内でカプセル化される。図６Ｆは、前述したサブグラフ６２０をカプセル化しているコンポーネント６４０を含む依存関係データ構造６０４を例示する。図６Ｆの例においては、コンポーネント６４０を実行すると、コンポーネント６４０内のカプセル化されたサブグラフ６２０が実行され、依存関係データ構造及び／又はサブグラフが階層的に又は再帰的に実行されることになる。
【００３４】
前述した通り、依存関係データ構造のコンポーネントとして処理タスクを表すことで、実行環境（又は他のエンティティ）が並行処理を同定し活用することが可能となる。更に、前記表現は、並行処理関連タスクをオフロードし、及び／又はコードユニットを分離可能なコンポーネントにカプセル化することで、コード展開を簡単にする。
【００３５】
次の例は、本明細書で教えられるシステム及び方法がどのように処理タスクの実行の複雑さを簡単にするのかを説明する。この例では、処理機能（又は方法）のセットが、ジャバスクリプトを用いて定義される。しかしながら、本開示はこの事項に限られず、任意の適切なプログラミング言語又は環境に関連して実装することができる。
【数１】
0005989097.tif 000002
【００３６】
処理タスクは次のように定義される。
【数２】
0005989097.tif 000003
【００３７】
最初のアプローチでは、処理タスクは、前述した処理ステップに従って、連続して実装される。
【数３】
0005989097.tif 000004
0005989097.tif 000005
【００３８】
代わりの実施例では、処理タスクの一部（ステップ１−８）は、個別の非同期なコードユニットコンポーネントにカプセル化される。非同期コードユニットは最後のパラメータとしてコールバックを受信するが、それは、コードユニットの実行が完了するときにコントロールを返すのに用いられる。非同期コードユニット内で起こるエラーは、所与のコールバックのパラメータとして渡される。
【００３９】
処理タスクのステップは、コードユニット（例えば、コンポーネント）にセグメント化され、コードユニットは依存関係データ構造に配列される。図７は、前述した処理タスクに対応する模範的な依存関係データ構造を示す。図７に示される通り、依存関係データ構造７０１は、ステップ３  ７１３が依存する“ｉｎＶａｌｕｅ”を表す擬似コンポーネント７１１を含む。データ構造７０１は、依存関係を持たないステップ２を表すコンポーネント７１２を更に含む。ステップ４はコンポーネント７１４により表され、ステップ２  ７１２により生成されるアウトプットをステップ４  ７１４が必要とすることを示す依存関係アークを含む。ステップ５はコンポーネント７１５により表され、それぞれステップ２  ７１２及びステップ３  ７１３のアウトプットへの依存関係を示す依存関係アークを含む。ステップ６はコンポーネント７１６により表され、ステップ５  ７１５のアウトプットへの依存関係に対応する依存関係アークを含む。ステップ７はコンポーネント７１７により表され、それぞれステップ６  ７１６及びステップ４  ７１４のアウトプットへの依存関係を示す依存関係アークを含む。図７には示されていないが、依存関係データ構造７０１のアウトプット（例えば、ステップ７  ７１７のアウトプット）を表すために、追加のコンポーネント又はアークを含めることもできる。
【００４０】
依存関係データ構造は、前述の通り、実行環境内で実行することができる。この例では、実行環境は“ＳｙｎｃＧｒａｐｈ”ライブラリとして称され、そのライブラリは、依存関係データ構造を定義することを考慮し、依存関係データ構造を解釈し、実行の準備ができたコンポーネントを同定し、並行状態メタデータを維持するなどの目的で構成される。次のコードリスティングは、前述した処理タスクを定義し実行する“ＳｙｎｃＧｒａｐｈ”の使用の一例を提供する。
【数４】
0005989097.tif 000006
【００４１】
“ＳｙｎｃＧｒａｐｈ”ライブラリの初期化は、図７に示される依存関係データ構造７０１に従う。最初の“ｒｎｄ０”エントリは処理タスクのステップ２（図７のコンポーネント７１２）を定義する。ステップ３（コンポーネント７１３）は“ａｄｄ０”エントリにより定義され、ステップ２（ｒｎｄ０）のアウトプット及び＃ｉｎインプット値への依存関係を含む。図７では、これらの依存関係は、コンポーネント７１３から擬似コンポーネント７１１及びステップ２のコンポーネント７１２への依存関係アークにより例示される。“ｄｂ１０”エントリはステップ４（図７のコンポーネント７１４）を定義し、ステップ２のアウトプットへの依存関係（図７においてコンポーネント７１４からコンポーネント７１２への依存関係アークとして例示される）を含む。“ａｄｄ１”エントリは処理タスクのステップ５を定義し、ステップ２及び３のアウトプットへの依存関係を含む。これらの依存関係は、図７において、コンポーネント７１５から、それぞれコンポーネント７１２及び７１３への依存関係アークとして例示される。“ｄｂｌ１”エントリは処理タスクのステップ６を定義し、ステップ５のアウトプットへの依存関係（コンポーネント７１６からコンポーネント７１５への依存関係アーク）を含む。最後に、“ａｄｄ２”エントリはステップ７を定義し、それぞれステップ４及び６のアウトプットへの依存関係（コンポーネント７１７から、それぞれコンポーネント７１４及び７１６への依存関係アーク）を含む。
【００４２】
上記で例示した通り、実行環境（ＳｙｎｃＧｒａｐｈ）を用いる処理タスクを実装するために必要とされるコードは、命令的なアプローチよりも相当に簡単である。更には、ＳｙｎｃＧｒａｐｈアプローチは、処理タスクにおける並行処理を実行環境が同定し活用することを可能にするのだが、さもなければそれは活用されないままになってしまうであろう（あるいは、活用すべき追加のカスタムコードを必要とするであろう）。例えば、ステップ２のアウトプットが一旦利用可能になれば、ステップ３  ７１３及びステップ４  ７１４は並行して実行されるのである。
【００４３】
前述した通り、コードユニットはコンポーネント内でカプセル化することができ、コードユニットは依存関係データ構造内に含まれる。実行環境は、依存関係データ構造にアクセスし、並行処理を同定し、そしてコンポーネントを実行する。本開示はこの事項に限られないが、しかしながら、アプリケーションプログラミングインターフェース、オブジェクトインターフェースなどのようなインターフェース、シンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）、ウェブサービス説明言語（ＷＳＤＬ）などのようなサービス定義説明、機能プロトタイプなどを含むが、これらに限定されない任意の適切なメカニズムを用いても実行されうる。実行環境は、１以上のカプセル化メカニズム（例えば、１以上の実行プラットフォーム）を用いて実装されたコンポーネントを解釈及び／又は実行するように構成される。実行プラットフォームは、スレッド、プロセス、仮想マシン（例えば、Ｊａｖａ（登録商標）仮想マシン）、スクリプトインタープリタ（例えば、ジャバスクリプトインタープリタ）、ネイティブの実行プラットフォーム、エミュレートされた実行プラットフォーム又は同様のものを含むが、それらに限られない。実行環境は、異なるカプセル化メカニズムを用いて実装されたコンポーネントを実行するように構成される、１以上の実行プラットフォームを含んでもよい。例えば、実行環境は、ジャバ仮想マシン実行プラットフォームのＪａｖａ（登録商標）バイトコードのコードユニットからなる最初のコンポーネント、スクリプトインタープリタを用いるジャバスクリプトコードユニットからなるコンポーネント、“ネイティブの”コードユニットからなる他のコンポーネントなどを実行するように構成されてもよい。それ故に、実行プラットフォームは、スレッド、プロセス、仮想マシン（例えば、Ｊａｖａ（登録商標）仮想マシン）、スクリプトインタープリタ（例えば、ジャバスクリプトインタープリタ）、ネイティブの実行プラットフォーム、エミュレートされる実行プラットフォーム又は同様のものを含んでよいが、それらに限られない。
【００４４】
図８はタスク並行処理を活用する方法８００の一実施例のフロー図である。
【００４５】
ステップ８１０では、本方法８００が始まり、初期化される。ステップ８１０は、ハードディスク、不揮発性メモリ又は同様のものなどの、非一時的なコンピュータ可読記憶媒体からの、１以上のコンピュータ可読命令をロードすることを含むことができる。ステップ８１０は更に、処理リソース、実行環境及び／又は仮想マシンリソースへのアクセス及び／又はそれらを初期化することを含むことができる。
【００４６】
ステップ８２０は、複数のコンポーネントを含む依存関係データ構造へのアクセスを含む。１以上のコンポーネントは実行可能なコードのユニット（コードユニット）をカプセル化することができる。いくつかの実施例においては、依存関係データ構造は、外部依存関係を表す１以上の擬似コンポーネントを含む。依存関係データ構造は更に、前述の通り、コンポーネントの依存関係を表す依存関係アークを含んでもよい。
【００４７】
ステップ８３０は、実行の準備ができているコンポーネントを同定することを含む。いくつかの実施例においては、ステップ８３０は、リーフコンポーネント（依存関係が充足されたコンポーネント及び／又は依存関係を有さないコンポーネント）を同定するためにステップ８２０でアクセスされた依存関係データ構造をトラバースすることを含む。あるいは又は更に、ステップ８３０は、（もしあれば）どのコンポーネントが実行されたかを示す並行状態メタデータへのアクセス並びに／又は、コンポーネント及び／若しくは外部の擬似コンポーネントの実行によって利用可能となったインプット及び／若しくはアウトプットの同定が含まれてもよい。ステップ８３０は、同時に実行しうる複数のコンポーネントの同定を含んでもよい。
【００４８】
ステップ８３０は更に、依存関係データ構造において定義された、ステップ８２０の処理タスクが完了したこと（例えば、全てのコンポーネントが実行され、及び／又は全ての必要とされるアウトプットが生成されたこと）を確定することを含んでもよい。もしステップ８３０が、処理タスクが完了していることを示すのであれば、フローはステップ８７０へと続く。さもなければ、つまり、もし処理されるべき状態で残っている追加のコンポーネントが存在するならば、フローは８４０へと続く。
【００４９】
ステップ８４０において、実行環境は同定されたコンポーネントを実行する。ステップ８４０の実行は、並行して（例えば、同時に）及び／又は順次に、同定されたコンポーネントを実行することを含んでもよい。いくつかの実施例においては、コンポーネントの実行は、１以上のインプットをコンポーネントに与えること及び／又はコンポーネントが実行を完了するときに呼び出されるコールバック（又は他の同期メカニズム）を登録することを含む。コールバックメカニズムは、前述の通り、アウトプットを渡すこと及び／又はエラーに対処することを考慮する。いくつかの実施例においては、ステップ８４０はコンポーネントのための複数の異なる実行プラットフォーム又は環境（例えば、Ｊａｖａ（登録商標）仮想マシン、ジャバスクリプトインタープリタ、など）を選択することを含む。
【００５０】
ステップ８５０は、ステップ８２０における依存関係データ構造へのアクセスに関連する並行処理タスクメタデータを維持することを含む。それ故、ステップ８５０はステップ８４０でコンポーネントを実行することで生成される、及び／又は外部ソース（例えば、擬似コンポーネント）から与えられるアウトプットにアクセスすることを含んでもよい。ステップ８５０は更に、依存関係データ構造の他のコンポーネントのインプットデータとして、及び／又は依存関係データ構造の処理タスクのアウトプットとして使用されるアウトプットデータを格納又はキャッシュすることを含んでもよい。いくつかの実施例においては、アウトプット／インプットデータは前述した並行処理メタデータの一部としてキャッシュ及び／又は格納されてもよい。
【００５１】
いくつかの実施例において、ステップ８５０は、ステップ８４０でのコンポーネントの実行とは非同期で動作する（例えば、ステップ８５０はステップ８４０でのコンポーネントの実行とは別のスレッド又はプロセスで実行される）。非同期の実行は、本方法８００がより速くコンポーネントの完了を検知し、及び／又は利用可能である新しい外部インプットをより速く同定することを可能にする。それ故、ステップ８５０は、ステップ８４０と並行に動作するように示すことができる。
【００５２】
ステップ８６０は、コンポーネントが実行を完了したこと及び／又は１以上のインプットデータ値が受信されたことを確定することを含む。確定されれば、前述の通り、実行するのに利用できる追加コンポーネント同定するステップ８３０へとフローは続く。さもなければ、フローはステップ８５０へと続く。ステップ８４０、８５０及び／又は８６０は互いに非同期で動作するので、依存関係が充足されるとすぐ、以前に呼び出されたコンポーネントの実行が完了するのを待たずに、新しいコンポーネントは利用可能なものとして同定される。
【００５３】
本方法は前述の通り、実行可能な１以上の追加コンポーネントを同定し、及び／又は処理タスクが完了しているかどうか（例えば、依存関係データ構造の全てのコンポーネントが実行されているかどうか）を確定するために、依存関係データ構造及び更新された並行状態メタデータが使用されるステップ８３０へと戻る。
【００５４】
ステップ８７０において、次の処理タスク及び／又は依存関係データ構造が受信されるまで、フローは終了しているが、受信された時点でフローはステップ８２０へと続く。
【００５５】
図９は、並行タスク処理の方法９００の一実施例でのフロー図である。
【００５６】
ステップ９１０において、本方法９００は始まり、前述した通り初期化される。
【００５７】
ステップ９２０において、処理タスクが受信される。処理タスクは１以上の処理ステップを含み、処理ステップは１以上のそれぞれのコードユニットにより実装される。
【００５８】
ステップ９３０は、ステップ９２０の処理タスクを実装するために依存関係データ構造を定義することを含む。ステップ９３０は、処理タスクを１以上のコンポーネントにセグメント化することを含むが、各コンポーネントは、処理タスクの一部に対応し、そのコードユニットに関連する。各コンポーネントは、それ故、それぞれのコードユニットをカプセル化し、実行環境内のコードユニットの実行に備える。ステップ９３０は更に、前述したコンポーネント間の依存関係を定義することを含んでもよい。
【００５９】
ステップ９４０は、ステップ９３０のコンポーネントを含む依存関係データ構造を定義することを含む。ステップ９４０は更に、コンポーネント間の依存関係アークを定義することを含んでもよく、各依存関係アークはコンポーネント間の依存関係に対応する。
【００６０】
ステップ９５０において、依存関係データ構造は実行環境へ与えられ、実行環境は、図８につき前述した通り、依存関係データ構造を用いて処理タスクを実行する。
【００６１】
ステップ９６０において、本方法９００は、ステップ９２０で次なる処理タスクが受信されるまで終了している。
【００６２】
図１０は、同時並行処理システム１０００の一実施例のブロック図である。システム１０００はコンピューティングデバイス１０１０を含み、コンピューティングデバイス１０１０は、プロセッサ１０１２、メモリ１０１４、ヒューマンマシンインターフェースデバイス１０１６（ディスプレイ、キーボード、マウス、スピーカーなど）及び／又は非一時的なコンピュータ可読媒体１０１８を含んでもよい。コンピューティングデバイス１０１０は更に、コンピューティングデバイス１０１０をネットワーク１０２１へ通信のためにつなぐべく、ネットワークインターフェース、インプット／アウトプットデバイス又は同様のものなどのような、１以上の通信インターフェース１０２０を含んでもよい。
【００６３】
実行環境１０３０はコンピューティングデバイス１０１０上で動作する。実行環境１０３０は、非一時的なコンピュータ可読記憶媒体１０１８に格納される１以上の命令として実現することができる。実行環境１０３０は、１以上の実行プラットフォーム１０３２を含んでよく、実行プラットフォーム１０３２は、スレッド、プロセス、仮想マシン（例えば、Ｊａｖａ（登録商標）仮想マシン）、スクリプトインタープリタ（例えば、ジャバスクリプトインタープリタ）、ネイティブ実行プラットフォーム、エミュレートされた実行プラットフォーム又は同様のものを含んでよいが、それらには限られない。
【００６４】
実行環境１０３０は、処理タスクを実装するように構成される。いくつかの実施例においては、実行環境１０３０（又は他のツール）は、処理タスクを実装するために依存関係データ構造を定義することに備える（例えば、図９につき前述した通りである）。いくつかの実施例においては、依存関係データ構造１０３３は、実行環境１０３０による実行のために、媒体のような非一時的なコンピュータ可読記憶媒体に格納され、及び／又はメモリ１０１６にロードされる。
【００６５】
実行環境１０３０は、コンピュータ可読記憶媒体１０１８又は他のソース（例えば、ネットワークコネクション、ヒューマンマシンインターフェースデバイス１０１６又は同様のもの）におけるタスクに対応する依存関係データ構造１０３３にアクセスすることで、処理タスクを実行するように構成されてよい。実行環境１０３０は、前述した通り、依存関係データ構造及び／又は並行状態メタデータ１０３５を用いて実行可能であるコンポーネントを同定する。いくつかの実施例においては、実行環境１０３０は、依存関係データ構造１０３３の複数のコンポーネントを並行して（例えば、同時に）実行する。コンポーネントは１以上の実行プラットフォーム又は環境１０３２において実行されてよい。
【００６６】
どのコンポーネントが実行されたかを示し、及び／又はインプット／アウトプットデータが利用できるかどうかを同定する並行状態メタデータ１０３５を、実行環境１０３０は維持する。実行環境１０３０は、依存関係が充足され、実行可能であるコンポーネントを同定するため、並行状態メタデータ１０３５及び／又は依存関係データ構造を用いる。実行環境１０３０は、処理タスクが完了するまで（例えば、望まれたアウトプットが得られ、及び／又は依存関係データ構造１０３３の全てのコンポーネントが実行されるまで）、依存関係データ構造のコンポーネントの実行（及び同時並行状態メタデータ１０３５の維持）を続ける。
【００６７】
依存関係データ構造１０３３の処理タスクの１以上のアウトプットは、コンピュータ可読記憶媒体１０１８に格納され、ネットワーク１０２１（ネットワークインターフェース１０２０経由）で送信され、及び／又はヒューマンマシンインターフェースデバイス１０１６でユーザに提示されてよい。
【００６８】
上記の説明では、本明細書で説明される実施例の完全な理解のために多くの具体的な詳細を提供している。しかしながら、当業者であれば、１以上の具体的な詳細が除外されていること又は、他の方法、コンポーネント若しくはデータが用いられてもよいことを認識するであろう。いくつかの実施例においては、動作が詳細に示されていない、又は説明されていない。
【００６９】
更に、説明された特徴、動作又は特性は、１以上の実施例において任意の適切な方法によって組み合わされてもよい。当業者にとって自明であれば、開示された実施例について説明された方法のステップや作用の順番が変更されてもよいことはすぐに理解されるであろう。このように、図面又は詳細な説明におけるいかなる順番も、例示の目的のみのものであり、ある順番を必要とするように指定されない限り必須の順番を含意するものではない。
【００７０】
実施例は様々なステップを含んでもよく、ステップは、汎用目的又は特定目的のコンピュータ（又は他の電子デバイス）により実行される、コンピュータで実行可能な命令で実現されてよい。あるいは、ステップは、ステップを実行する特定論理を含むハードウェアコンポーネントによって、又は、ハードウェア、ソフトウェア及び／若しくはファームウェアによって実行されてもよい。
【００７１】
実施例は又、本明細書で説明されるプロセスを実行するコンピュータ（又は他の電子デバイス）をプログラムするために用いられる命令を格納した非一時的なコンピュータ可読記憶媒体を含む、コンピュータプログラムの製品として提供されてよい。コンピュータ可読記憶媒体は、ハードドライブ、フロッピーディスク、光ディスク、ＣＤ―ＲＯＭ、ＤＶＤ―ＲＯＭ、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、固体メモリデバイス又は電子的な命令を格納するのに適した他のタイプの媒体／コンピュータ可読媒体を含んでよいが、これらに限られるものではない。
【００７２】
本明細書で使用されている通り、ソフトウェアモジュール又はコンポーネントは、メモリデバイス及び／又はコンピュータ可読記憶媒体に設けられる、任意のタイプのコンピュータ命令又はコンピュータで実行可能なコードを含んでよい。ソフトウェアモジュールは、例えば、１以上の物理的又は論理的なコンピュータ命令のブロックを含んでよく、それらは１以上のタスクを実行し特定の抽象的なデータタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、などとして編成されてよい。
【００７３】
特定の実施例において、特定のソフトウェアモジュールはメモリデバイスの異なる場所に格納された全く異なる命令を含んでよく、これらの命令はモジュールの前述した機能性と一緒に実装する。実際、モジュールは、単一の命令又は多くの命令を含んでもよいし、いくつかの異なるコードセグメント、異なるプログラム及びいくつかのメモリデバイスへ分散されてもよい。いくつかの実施例は、通信ネットワークを通じてリンクされるリモート処理タスクデバイスによってタスクが実行される分散コンピューティング環境において実行されてもよい。分散型コンピューティング環境では、ソフトウェアモジュールはローカル及び／又はリモートのメモリ記憶デバイスに設けられてもよい。更に、データベースレコードにおいて互いに結合又はレンダリングされるデータは、同一のメモリデバイスに、又はいくつかのメモリデバイスに常駐してもよいし、単一のネットワーク間のデータベースにおけるレコードの複数のフィールドに互いにリンクされてもよい。
【００７４】
発明の基礎をなす本質からそれることなく、上記で説明された実施例の詳細に対していくつも変更が加えられてもよいことは、当業者に理解されるであろう。
【００７５】
本出願人は特許請求の範囲の権利を要求する。
【図１】
0005989097.tif 000007
【図２】
0005989097.tif 000008
【図３】
0005989097.tif 000009
【図４】
0005989097.tif 000010
【図５Ａ】
0005989097.tif 000011
【図５Ｂ】
0005989097.tif 000012
【図５Ｃ】
0005989097.tif 000013
【図６Ａ】
0005989097.tif 000014
【図６Ｂ】
0005989097.tif 000015
【図６Ｃ】
0005989097.tif 000016
【図６Ｄ】
0005989097.tif 000017
【図６Ｅ】
0005989097.tif 000018
【図６Ｆ】
0005989097.tif 000019
【図７】
0005989097.tif 000020
【図８】
0005989097.tif 000021
【図９】
0005989097.tif 000022
【図１０】
0005989097.tif 000023