(57)【要約】【課題】  階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品を提供すること。【解決手段】  階層型分散処理システム用にソフトウェアをコンパイルすることは、コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供することであって、コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものである、提供することと、コンパイル・ノードによりソフトウェアをコンパイルすることと、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持することと、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択することと、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信することとを含む。【選択図】      図８
2013528856.tif 000002
【特許請求の範囲】
【請求項１】
階層型分散処理システム用にソフトウェアをコンパイルするための方法であって、
コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供することであって、前記コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものである、提供することと、
前記コンパイル・ノードにより前記ソフトウェアをコンパイルすることと、
前記コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアを前記コンパイル・ノードにより保持することと、
前記分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイル・ノードにより選択することと、
前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを、前記選択されたノードに送信することと、
を含む、方法。
【請求項２】
前記方法が、
選択されたノードにより、コンパイル済みソフトウェアを受信することと、
前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定することと、
前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持することと、
前記コンパイル済みソフトウェアが前記子孫のうちの１つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記方法が、前記１つ又は複数のコンパイル・ノードを識別することをさらに含む、請求項１又は請求項２に記載の方法。
【請求項４】
前記１つ又は複数のコンパイル・ノードを前記識別することが、コンパイルに関して計算的に最適化された１つ又は複数のノードを選択することをさらに含む、請求項３に記載の方法。
【請求項５】
前記１つ又は複数のコンパイル・ノードを前記識別することが、コンパイルに最適化された１つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択することをさらに含む、請求項３又は請求項４に記載の方法。
【請求項６】
前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、
複数の計算ノードと、
前記計算ノードをデータ通信のために結合する、ポイント・ツー・ポイント・データ通信用に最適化された第１のデータ通信ネットワークと、
前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第２のデータ通信ネットワークと
を含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置（「ＡＬＵ」）を有する、前記請求項のいずれか１項に記載の方法。
【請求項７】
前記階層型分散処理システムは、ハイブリッド型コンピューティング環境をさらに含み、前記ハイブリッド型コンピューティング環境は、複数の計算ノードを含み、前記計算ノードの各々は、
ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、
アクセラレータ・アーキテクチャを有するアクセラレータと
を含み、前記アクセラレータ・アーキテクチャは、前記ホスト・コンピュータ・アーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されており、前記ホスト・コンピュータ及び前記アクセラレータは互いに、システム・レベル・メッセージ・パッシング・モジュールによるデータ通信に関して適合されている、
前記請求項のいずれか１項に記載の方法。
【請求項８】
階層型分散処理システム用にソフトウェアをコンパイルするための装置であって、前記装置は、コンピュータ・プロセッサと、前記コンピュータ・プロセッサに動作可能に結合されたコンピュータ・メモリとを備え、前記コンピュータ・メモリはその内部にコンピュータ・プログラム命令が配置されており、前記コンピュータ・プログラム命令は、
コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供し、前記コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものであり、
前記コンパイル・ノードにより前記ソフトウェアをコンパイルし、
前記コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアを前記コンパイル・ノードにより保持し、
前記分散処理システムの階層構造の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイル・ノードにより選択し、
前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを前記選択されたノードに送信する、
ためのものである、装置。
【請求項９】
前記コンピュータ・メモリは、その内部に、
選択されたノードにより、コンパイル済みソフトウェアを受信し、
前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定し、
前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持し、
前記コンパイル済みソフトウェアが前記子孫のうちの１つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信する、
ためのコンピュータ・プログラム命令がさらに配置されている、請求項８に記載の装置。
【請求項１０】
前記コンピュータ・メモリは、その内部に、前記１つ又は複数のコンパイル・ノードを識別するためのコンピュータ・プログラム命令がさらに配置されている、請求項８又は請求項９に記載の装置。
【請求項１１】
前記１つ又は複数のコンパイル・ノードを識別するための前記コンピュータ・プログラム命令が、コンパイルに関して計算的に最適化された１つ又は複数のノードを選択するためのコンピュータ・プログラム命令をさらに含む、請求項１０に記載の装置。
【請求項１２】
前記１つ又は複数のコンパイル・ノードを識別するための前記コンピュータ・プログラム命令が、コンパイルに最適化された１つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択するためのコンピュータ・プログラム命令をさらに含む、請求項１０又は請求項１１に記載の装置。
【請求項１３】
前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、
複数の計算ノードと、
前記計算ノードをデータ通信のために結合する、ポイント・ツー・ポイント・データ通信用に最適化された第１のデータ通信ネットワークと、
前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第２のデータ通信ネットワークと
を含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置（「ＡＬＵ」）を有する、請求項８乃至請求項１２のいずれか１項に記載の装置。
【請求項１４】
前記階層型分散処理システムは、ハイブリッド型コンピューティング環境をさらに含み、前記ハイブリッド型コンピューティング環境は、複数の計算ノードを含み、前記計算ノードの各々は、
ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、
アクセラレータ・アーキテクチャを有するアクセラレータと
を含み、前記アクセラレータ・アーキテクチャは、前記ホスト・コンピュータ・アーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されており、前記ホスト・コンピュータ及び前記アクセラレータは互いに、システム・レベル・メッセージ・パッシング・モジュールによるデータ通信に関して適合されている、
請求項８乃至請求項１３のいずれか１項に記載の装置。
【請求項１５】
階層型分散処理システム用にソフトウェアをコンパイルするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供し、前記コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものであり、
前記コンパイル・ノードにより前記ソフトウェアをコンパイルし、
前記コンパイル・ノードにより、前記コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアを保持し、
前記分散処理システムの階層構造の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイル・ノードにより選択し、
前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを前記選択されたノードに送信する
ためのコンピュータ・プログラム命令を含む、コンピュータ・プログラム。
【請求項１６】
選択されたノードにより、コンパイル済みソフトウェアを受信し、
前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定し、
前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持し、
前記コンパイル済みソフトウェアが前記子孫のうちの１つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信する
ためのコンピュータ・プログラム命令をさらに含む、請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
前記１つ又は複数のコンパイル・ノードを識別するためのコンピュータ・プログラム命令をさらに含む、請求項１５又は請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記１つ又は複数のコンパイル・ノードを識別するための前記コンピュータ・プログラム命令が、コンパイルに関して計算的に最適化された１つ又は複数のノードを選択するためのコンピュータ・プログラム命令をさらに含む、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
前記１つ又は複数のコンパイル・ノードを識別するための前記コンピュータ・プログラム命令が、コンパイルに最適化された１つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択するためのコンピュータ・プログラム命令をさらに含む、請求項１７又は請求項１８に記載のコンピュータ・プログラム。
【請求項２０】
前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、
複数の計算ノードと、
前記計算ノードをデータ通信のために結合する、ポイント・ツー・ポイント・データ通信用に最適化された第１のデータ通信ネットワークと、
前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第２のデータ通信ネットワークと
を含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置（「ＡＬＵ」）を有する、請求項１５乃至請求項１９のいずれか１項に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野はデータ処理であり、又は、より詳細には、階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品である。
【背景技術】
【０００２】
１９４８年のＥＤＶＡＣ（電子式離散的変数自動計算機：Ｅｌｅｃｔｒｏｎｉｃ  Ｄｉｓｃｒｅｔｅ  Ｖａｒｉａｂｌｅ  Ａｕｔｏｍａｔｉｃ  Ｃｏｍｐｕｔｅｒ）コンピュータ・システムの開発は、コンピュータ時代の始まりとしてよく引用される。その時以来、コンピュータ・システムは、極めて複雑な装置に発展してきた。今日のコンピュータは、ＥＤＶＡＣのような初期のシステムに比べてはるかに高性能である。コンピュータ・システムは、典型的には、ハードウェア・コンポーネント及びソフトウェア・コンポーネントの組み合わせ、アプリケーション・プログラム、オペレーティング・システム、プロセッサ、バス、メモリ、入力／出力装置、等を含む。半導体の加工及びコンピュータ・アーキテクチャの進歩がコンピュータの高性能化をさらに押し進めるにつれて、より高いハードウェアの性能を生かすために、より高度なコンピュータ・ソフトウェアが発展し、その結果として、現在のコンピュータ・システムは、ほんの数年前よりもはるかに強力なものになっている。
【０００３】
分散コンピューティングは、進歩を遂げたコンピュータ技術の一分野である。分散コンピューティングは、一般に、データ通信ネットワークを通じて通信する複数の半自律的なコンピュータ・システムによるコンピューティングのことを指す。半自律的なコンピュータ・システムは、互いに対話して共通の目標を達成する。分散コンピューティング・システムにおいて実行されるコンピュータ・プログラム又はアプリケーションは、分散プログラムと呼ばれることがある。分散コンピューティングは、計算問題を解くための分散コンピューティング・システムの使用のことを指す場合もある。分散コンピューティングにおいては、問題は多数のタスクに分割され、その各々を半自律的なコンピュータ・システムのうちの１つが解くことができる。
【０００４】
ある種の分散コンピューティング・システムは、並列コンピューティングを行うように最適化されている。並列コンピューティングとは、より速く結果が得られるように、同じタスク（分割され、特別に適合されている）を同時に複数プロセッサ上で実行することである。並列コンピューティングは、問題を解くプロセスは通常はさらに小さなタスクに分割することができ、ある程度調整しながらそれらを同時に実行することができるという事実に基づくものである。
【０００５】
並列コンピュータは、並列アルゴリズムを実行する。多数の異なる処理デバイス上で１度に１断片ずつ実行されるように並列アルゴリズムを分割することができ、次にこれらを最終的に元通り一緒にしてデータ処理結果を得ることができる。ある種のアルゴリズムは、断片に分割することが容易である。例えば、１から１０万までの全ての数をチェックしてどれが素数であるか探すという仕事は、数の部分集合を利用可能な各々のプロセッサに割り当て、次いで肯定の結果のリストを元通り連結することによって遂行することができるであろう。本明細書においては、ある並列プログラムの個々の断片を実行する複数の処理デバイスを「計算ノード」と呼ぶ。並列コンピュータは、計算ノードに加えて、例えば入力／出力（「Ｉ／Ｏ」）ノード及びサービス・ノードを含む他の処理ノードから構成される。
【０００６】
現代のプロセッサの作業方式上、ある種の大規模計算タスクは直列（非並列）アルゴリズムよりも並列アルゴリズムによる方が高速に行われるので、並列アルゴリズムは価値がある。単一の高速プロセッサを有するコンピュータを構築するのは、多数の低速プロセッサで同等のスループットを実現するコンピュータを構築するよりもはるかに困難である。また、直列プロセッサの到達可能な速度には、特定の理論的限界が存在する。他方、どの並列アルゴリズムも直列部分を有しているので、並列アルゴリズムには飽和点が存在する。その点を過ぎると、さらに多くのプロセッサを追加してもそれ以上スループットは上がらず、かえってオーバーヘッド及びコストが増大する結果になる。
【０００７】
並列アルゴリズムはまた、もう１つのリソースである、並列コンピュータのノード間のデータ通信要件を最適化するように設計される。並列コンピュータが通信するには、共有メモリ又はメッセージ・パッシングという２つの方式がある。共有メモリ処理の場合は、データの付加的なロッキングが必要とされ、付加的なプロセッサ及びバス・サイクルのオーバーヘッドを課すことになり、またアルゴリズムの一部が直列化される。
【０００８】
メッセージ・パッシング処理は、高速データ通信及びメッセージ・バッファを使用するが、メッセージ・バッファのための付加的なメモリ需要、及びノード間のデータ通信における待ち時間のみならず、この通信は、データ通信ネットワークに転送オーバーヘッドを追加する。並列コンピュータの設計は、通信オーバーヘッドが小さくなるように特別に設計されたデータ通信リンクを使用するが、トラフィックの量を決めるのは並列アルゴリズムである。
【０００９】
並列コンピュータのノード間のメッセージ・パッシングには、多数のデータ通信ネットワーク・アーキテクチャが使用される。計算ノードは、例えば「トーラス」又は「メッシュ」としてのネットワークに組織化することができる。また、計算ノードは、ツリーとしてのネットワークに組織化することもできる。トーラス・ネットワークは、ノードを、ラップアラウンド・リンクを有する３次元構造のメッシュとして接続する。どのノードもこのトーラス・ネットワークを通じて６つの隣接ノードと接続し、各ノードは、そのｘ、ｙ、ｚ座標によってメッシュ内でアドレス指定される。このような方式なので、トーラス・ネットワークはポイント・ツー・ポイント操作に適している。ツリー・ネットワークの場合、ノードは、典型的には二分木になるように接続される。各ノードは１つの親及び２つの子を有する（但し、ハードウェア構成に応じて、いくつかのノードは０個の子又は１つの子のみを有する場合がある）。ツリー・ネットワークは、典型的にはポイント・ツー・ポイント通信には非効率的であるが、ツリー・ネットワークは、特定のコレクティブ操作、即ち、全ての計算ノードが同時に関与する、例えばａｌｌｇａｔｈｅｒ操作のようなメッセージ・パッシング操作には、高い帯域幅及び短い待ち時間を提供する。トーラス及びツリー・ネットワークの両方を使用するコンピュータにおいては、２つのネットワークは典型的には互いに独立して実装され、独立した経路指定回路、独立した物理リンク及び独立したメッセージ・バッファを有する。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品を提供することである。
【課題を解決するための手段】
【００１１】
階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品であって、コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供することであって、コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものである、提供することと、コンパイル・ノードによりソフトウェアをコンパイルすることと、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアを該コンパイル・ノードにより保持することと、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが、選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択することと、選択されたノード又は選択されたノードの子孫によって実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信することと、選択されたノードにより、コンパイル済みソフトウェアを受信することと、コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定することと、コンパイル済みソフトウェアが選択されたノードのためのものである場合に、実行のために該ソフトウェアを選択されたノードにより保持することと、コンパイル済みソフトウェアが子孫のうちの１つのためのものである場合に、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信すること、とを含む、方法、装置及び製品。
【００１２】
本発明の上記並びに他の目的、特徴及び利点は、添付の図面に示されているような、以下の本発明の例示的な実施形態のより具体的な説明から明らかになり、図中、同様の参照符号は、本発明の例示的な実施形態の同様の部分を一般的に表す。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための例示的な分散コンピューティング・システムを図示する。
【図２】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができる並列コンピュータにおいて有用な、例示的な計算ノードのブロック図を示す。
【図３】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なポイント・ツー・ポイント・アダプタを図示する。
【図４】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なグローバル・コンバイニング・ネットワーク・アダプタを図示する。
【図５】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、ポイント・ツー・ポイント操作用に最適化された例示的なデータ通信ネットワークを図示する線図を示す。
【図６】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、コレクティブ操作用に最適化された例示的なデータ通信ネットワークを図示する線図を示す。
【図７】分散コンピューティング・システムがハイブリッド型コンピューティング環境として実装された、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための更なる例示的な分散コンピューティング・システムを示す。
【図８】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする例示的な方法を示す。
【図９】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする別の例示的な方法を図示するフローチャートを示す。
【図１０】本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするためのシステムの例示的な使用例のブロック図を示す。
【発明を実施するための形態】
【００１４】
本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための例示的な方法、装置及び製品を、添付の図面を最初に図１から参照して説明する。図１は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための例示的な分散コンピューティング・システムを図示する。図１のシステムは、並列コンピュータ（１００）と、このコンピュータのためのデータ・ストレージ・デバイス（１１８）の形の不揮発性メモリと、このコンピュータのためのプリンタ（１２０）の形の出力デバイスと、このコンピュータのためのコンピュータ端末（１２２）の形の入力／出力デバイスとを含む。図１の例における並列コンピュータ（１００）は、複数の計算ノード（１０２）を含む。
【００１５】
計算ノード（１０２）は、Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ（「ＪＴＡＧ」）ネットワーク（１０４）、コレクティブ操作用に最適化されたグローバル・コンバイニング・ネットワーク（１０６）、及びポイント・ツー・ポイント操作用に最適化されたトーラス・ネットワーク（１０８）を含む幾つかの独立した通信ネットワークによって、データ通信のために結合されている。グローバル・コンバイニング・ネットワーク（１０６）は、計算ノードをツリーとして組織化するように計算ノードに接続されたデータ通信リンクを含む、データ通信ネットワークである。各データ通信ネットワークは、計算ノード（１０２）間のデータ通信リンクにより実装される。データ通信リンクは、並列コンピュータの計算ノード間の並列操作のためのデータ通信を提供する。計算ノード間のリンクは、典型的には２つの独立した指向性データ通信経路を用いて実装される、双方向リンクである。
【００１６】
さらに、並列コンピュータの計算ノード（１０２）は、並列コンピュータ（１００）上でのコレクティブ並列操作のために、少なくとも１つの、計算ノードの操作グループ（１３２）に組織化される。計算ノードの操作グループは、コレクティブ並列操作がそれに対して実行される計算ノードの集合である。コレクティブ操作は、操作グループの計算ノード間のデータ通信により実装される。コレクティブ操作は、操作グループの全ての計算ノードが関与するような機能である。コレクティブ操作は、計算ノードの操作グループの全ての計算ノードによって同時に、即ちほぼ同時刻に実行されるメッセージ・パッシング・コンピュータ・プログラム命令である、操作である。このような操作グループは、並列コンピュータ（１００）内の全ての計算ノードを含む場合もあり、又は全計算ノードの部分集合を含む場合もある。コレクティブ操作は、ポイント・ツー・ポイント操作を中核にして構築される（ｂｕｉｌｔ  ａｒｏｕｎｄ）場合が多い。コレクティブ操作では、１つの操作グループ内の全計算ノード上の全プロセスが、一致した引数で同じコレクティブ操作を呼び出すことを必要とする。「ｂｒｏａｄｃａｓｔ」は、操作グループの計算ノード間でデータを移動させるためのコレクティブ操作の一例である。「ｒｅｄｕｃｅ」操作は、操作グループの計算ノード間に分散されたデータに対して算術関数又は論理関数を実行するコレクティブ操作の一例である。操作グループは、例えばＭＰＩ「コミュニケータ」として実装することができる。
【００１７】
「ＭＰＩ」は、従来技術の並列通信ライブラリである「メッセージ・パッシング・インターフェース」のことを指し、並列コンピュータ上でのデータ通信のためのコンピュータ・プログラム命令のモジュールである。本発明の実施形態によるシステムと共に用いるように改良することができる従来技術の並列通信ライブラリの例には、ＭＰＩ及び「並列仮想マシン」（「ＰＶＭ」）ライブラリが含まれる。ＰＶＭは、テネシー大学、オークリッジ国立研究所及びエモリー大学により開発された。ＭＰＩは、ＭＰＩ標準を定義し、保守する多数の機関の代表者によるオープン・グループであるＭＰＩフォーラムによって公表されている。本稿の記述時におけるＭＰＩは、分散メモリ型並列コンピュータ上で並列プログラムを実行する計算ノード間の通信におけるデファクトスタンダードである。本明細書は説明を簡単にするためにＭＰＩ用語を用いることがあるが、ＭＰＩをそのまま使用することは、本発明の要件又は限定ではない。
【００１８】
幾つかのコレクティブ操作は、操作グループ内の特定の計算ノード上で実行される単一の発信又は受信プロセスを有する。例えば、「ｂｒｏａｄｃａｓｔ」型コレクティブ操作の場合、データを他の全ての計算ノードに配信する計算ノード上のプロセスは、発信プロセスである。例えば「ｇａｔｈｅｒ」操作の場合、他の計算ノードから全てのデータを受信した計算ノード上のプロセスは、受信プロセスである。そのような発信又は受信プロセスが実行される計算ノードのことを論理根（ｌｏｇｉｃａｌ  ｒｏｏｔ）と呼ぶ。
【００１９】
ほとんどのコレクティブ操作は、ｂｒｏａｄｃａｓｔ、ｇａｔｈｅｒ、ｓｃａｔｔｅｒ及びｒｅｄｕｃｅの４つの基本操作の変形又は組み合わせである。これらのコレクティブ操作のためのインターフェースは、ＭＰＩフォーラムが公表したＭＰＩ標準の中で定義されている。しかしながら、コレクティブ操作を実行するためのアルゴリズムはＭＰＩ標準の中では定められていない。ｂｒｏａｄｃａｓｔ操作の場合、全てのプロセスは、そのバッファ内容が送信されることになる同じ根プロセスを指定する。根以外の全てのプロセスは、受信バッファを指定する。操作後、全てのバッファは根プロセスからのメッセージを収容していることになる。
【００２０】
ｓｃａｔｔｅｒ操作の場合、論理根は根上のデータをセグメントに分割し、操作グループ内の各計算ノードに異なるセグメントを配信する。ｓｃａｔｔｅｒ操作においては、全てのプロセスは典型的には同じｒｅｃｅｉｖｅ  ｃｏｕｎｔを指定する。送信（ｓｅｎｄ）の引数は、そのバッファが実際にｓｅｎｄｃｏｕｎｔ＊Ｎ個の所与のデータ型の要素を収容している根プロセスにとってのみ有効であり、ここでＮは所与の計算ノード・グループ内のプロセスの数である。送信バッファは分割され、全プロセス（論理根上のプロセスを含む）に散布される。各計算ノードには「ランク」と呼ばれる逐次的な識別子が割り当てられている。操作後、根は、各プロセスにランクの昇順でｓｅｎｄｃｏｕｎｔデータ要素を送信済みとなる。ランク０は、送信バッファから第１のｓｅｎｄｃｏｕｎｔデータ要素を受信する。ランク１は、送信バッファから第２のｓｅｎｄｃｏｕｎｔデータ要素を受信し、以下同様である。
【００２１】
ｇａｔｈｅｒ操作は多対一のコレクティブ操作であり、ｓｃａｔｔｅｒ操作の説明とは全く逆である。即ち、ｇａｔｈｅｒは、あるデータ型の要素が、ランク付けされた計算ノードから根ノードの受信バッファに集められる、多対一のコレクティブ操作である。
【００２２】
ｒｅｄｕｃｅ操作もまた多対一のコレクティブ操作であり、２つのデータ要素に対して実行される算術関数又は論理関数を含む。全てのプロセスは、同じ「ｃｏｕｎｔ」、及び同じ算術関数又は論理関数を指定する。リダクション後には、全てのプロセスは、計算ノードの送信バッファから根プロセスにｃｏｕｎｔデータ要素を送信済みとなる。リダクション操作においては、対応する送信バッファ位置からのデータ要素が算術演算又は論理演算によって１対ずつ組み合わされ、根プロセスの受信バッファ内に単一の対応する要素を与える。特定用途向けのリダクション操作は、実行時に定義することができる。並列通信ライブラリは、事前定義された操作をサポートすることができる。例えばＭＰＩは、以下の事前定義リダクション操作を提供する。
ＭＰＩ＿ＭＡＸ    最大値
ＭＰＩ＿ＭＩＮ    最小値
ＭＰＩ＿ＳＵＭ    和
ＭＰＩ＿ＰＲＯＤ  積
ＭＰＩ＿ＬＡＮＤ  論理積
ＭＰＩ＿ＢＡＮＤ  ビット演算の積
ＭＰＩ＿ＬＯＲ    論理和
ＭＰＩ＿ＢＯＲ    ビット演算の和
ＭＰＩ＿ＬＸＯＲ  排他的論理和
ＭＰＩ＿ＢＸＯＲ  ビット演算の排他的論理和
【００２３】
計算ノードに加えて、並列コンピュータ（１００）は、グローバル・コンバイニング・ネットワーク（１０６）を通じて計算ノード（１０２）に結合された入力／出力（「Ｉ／Ｏ」）ノード（１１０、１１４）を含む。並列コンピュータ（１００）内の計算ノードは、処理セットに分割され、１つの処理セット内の各々の計算ノードは、データ通信のために同一のＩ／Ｏノードに接続されるようになっている。したがって、各々の処理セットは、１つのＩ／Ｏノードと計算ノード（１０２）の部分集合とから構成される。システム全体における計算ノードの数とＩ／Ｏノードの数との比率は、典型的には並列コンピュータのハードウェア構成に依存する。例えば、幾つかの構成では、各処理セットは、８つの計算ノード及び１つのＩ／Ｏノードから構成することができる。他の幾つかの構成では、各処理セットは、６４個の計算ノード及び１つのＩ／Ｏノードから構成することができる。しかしながらそのような例は説明のためのものに過ぎず、限定のためのものではない。各Ｉ／Ｏノードは、その処理セットの計算ノード（１０２）とＩ／Ｏデバイスのセットとの間のＩ／Ｏサービスを提供する。図１の例では、Ｉ／Ｏノード（１１０、１１４）は、高速イーサネットを用いて実装されたローカル・エリア・ネットワーク（「ＬＡＮ」）（１３０）を通じて、データ通信のためにＩ／Ｏデバイス（１１８、１２０、１２２）に接続される。
【００２４】
図１の並列コンピュータ（１００）はまた、ネットワークの１つ（１０４）を通じて計算ノードに結合されるサービス・ノード（１１６）を含む。サービス・ノード（１１６）は、計算ノードの構成の管理、計算ノードへのプログラムのロード、計算ノード上でのプログラム実行の開始、計算ノード上のプログラム操作の結果の取り出しなど、複数の計算ノードに共通のサービスを提供する。サービス・ノード（１１６）は、サービス・アプリケーション（１２４）を実行し、コンピュータ端末（１２２）上で実行されるサービス・アプリケーション・インターフェース（１２６）を通じてユーザ（１２８）と通信する。
【００２５】
図１の例では、計算ノードの１つに、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる自動化計算機のモジュールである階層型分散コンパイラ（１５５）がインストールされている。階層型分散コンパイラ（１５５）は、コンパイル・ノードによりソフトウェアをコンパイルし、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持し、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するための、コンピュータ・プログラム命令を含む。図１の他の計算ノード（１０２）の各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの１つのためのものである場合には、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。
【００２６】
図１に図示された例示的なシステムを構成するノード、ネットワーク及びＩ／Ｏデバイスの配置は説明のためのものに過ぎず、本発明を限定するためのものではない。本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるデータ処理システムは、当業者が想到するような図１に示されていない付加的なノード、ネットワーク、デバイス及びアーキテクチャを含むことができる。図１の例では並列コンピュータ（１００）は１６個の計算ノード（１０２）を含んでいるが、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができる並列コンピュータは任意の数の計算ノードを含むことができることに読者は気づくであろう。イーサネット及びＪＴＡＧに加えて、このようなデータ処理システムにおけるネットワークは、例えばＴＣＰ（転送制御プロトコル）、ＩＰ（インターネット・プロトコル）、及び当業者が想到するようなその他のプロトコルを含む、多数のデータ通信プロトコルをサポートすることができる。本発明の種々の実施形態は、図１に図示されたものに加えて、様々なハードウェア・プラットフォーム上で実装することができる。
【００２７】
本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることは、一般に、複数の計算ノードを含む並列コンピュータ上に実装することができる。実際、そのようなコンピュータは、そのような計算ノードを何千と含むことができる。各計算ノードはそれ自体が、１つ又は複数のコンピュータ・プロセッサ（又は処理コア）と、それ自体のコンピュータ・メモリと、それ自体の入力／出力アダプタとから成る一種のコンピュータである。従って、更なる説明のために、図２は、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる並列コンピュータにおいて有用な、例示的な計算ノードのブロック図を示す。図２の計算ノード（１５２）は、１つ又は複数の処理コア（１６４）及びランダム・アクセス・メモリ（「ＲＡＭ」）（１５６）を含む。処理コア（１６４）は高速メモリ・バス（１５４）を通じてＲＡＭ（１５６）に接続され、かつ、バス・アダプタ（１９４）及び拡張バス（１６８）を通じて、計算ノード（１５２）の他のコンポーネントに接続される。ＲＡＭ（１５６）内には、並列アルゴリズムを用いてユーザ・レベルの並列データ処理を行うコンピュータ・プログラム命令のモジュールである、アプリケーション・プログラム（１５８）が格納される。
【００２８】
ＲＡＭ（１５６）内には、ポイント・ツー・ポイント操作並びにコレクティブ操作を含む計算ノード間の並列通信を行うコンピュータ・プログラム命令のライブラリである、メッセージング・モジュール（１６０）もまた格納される。アプリケーション・プログラム（１５８）は、メッセージング・モジュール（１６０）内のソフトウェア・ルーチンを呼び出すことにより、コレクティブ操作を実行する。本発明の実施形態によるシステムで使用するための並列通信ルーチンのライブラリは、白紙の状態から、Ｃプログラミング言語などの従来のプログラミング言語を用い、かつ、従来のプログラミング方法を用いて、２つの独立したデータ通信ネットワーク上のノード間でデータを送信及び受信する並列通信ルーチンを記述することで開発することができる。代替的に、既存の従来のライブラリを、本発明の実施形態に従って動作するように改良することができる。従来の並列通信ライブラリの例には、「メッセージ・パッシング・インターフェース」（「ＭＰＩ」）ライブラリ及び「並列仮想マシン」（「ＰＶＭ」）ライブラリが含まれる。
【００２９】
ＲＡＭ内には、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる自動計算機のモジュールである階層型分散コンパイラ（１５５）もまた格納される。階層型分散コンパイラ（１５５）は、コンパイル・ノードによりソフトウェアをコンパイルし、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持し、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するための、コンピュータ・プログラム命令を含む。並列コンピュータ内の他の計算ノードの各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの１つのためのものである場合には、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。
【００３０】
ＲＡＭ（１５６）には、アプリケーション・プログラムが計算ノードの他のリソースにアクセスするためのコンピュータ・プログラム命令及びルーチンのモジュールである、オペレーティング・システム（１６２）もまた格納される。並列コンピュータの計算ノード内のアプリケーション・プログラム及び並列通信ライブラリは、ユーザ・ログイン及びセキュリティの問題なしに単一の実行スレッドを実行するのが一般的であるが、それは、そのスレッドがそのノードの全てのリソースへの完全なアクセスを許可されているからである。従って、オペレーティング・システムが並列コンピュータ上の計算ノード上で行うタスクの量及び複雑度は、多数のスレッドが同時に実行される直列コンピュータ上でのオペレーティング・システムのタスクよりも小さく、複雑度が低い。さらに、図２の計算ノード（１５２）上にはビデオＩ／Ｏが存在せず、このことがオペレーティング・システムに課される要求を減らす別の要因となっている。従って、このオペレーティング・システムは汎用コンピュータのオペレーティング・システムに比べて非常に軽い、いわば簡易版（ｐａｒｅｄ  ｄｏｗｎ  ｖｅｒｓｉｏｎ）であってもよく、又は特定の並列コンピュータ上での操作専用に開発されたオペレーティング・システムであってもよい。計算ノードでの使用のために有用に改良され、簡略化することができるオペレーティング・システムには、ＵＮＩＸ（商標）、Ｌｉｎｕｘ（商標）、Ｍｉｃｒｏｓｏｆｔ  ＸＰ（商標）、ＡＩＸ（商標）、ＩＢＭのｉ５／ＯＳ（商標）、及び当業者が想到するような他のオペレーティング・システムが含まれる。
【００３１】
図２の例示的な計算ノード（１５２）は、並列コンピュータの他のノードとのデータ通信を実装するための幾つかの通信アダプタ（１７２、１７６、１８０、１８８）を含む。そのようなデータ通信は、シリアルに、ＲＳ−２３２接続を通じて、ユニバーサル・シリアル・バス（「ＵＳＢ」）のような外部バスを通じて、ＩＰネットワークのようなデータ通信ネットワークを通じて、及び当業者が想到するような他の方式で行うことができる。通信アダプタは、これを通じて１つのコンピュータが別のコンピュータに直接又はネットワークを通じてデータ通信を送信する、データ通信のハードウェア・レベルを実装する。本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするためのシステムにおいて有用な通信アダプタの例には、有線通信のためのモデム、有線ネットワーク通信のためのイーサネット（ＩＥＥＥ８０２．３）アダプタ、及び無線ネットワーク通信のための８０２．１１ｂアダプタが含まれる。
【００３２】
図２の例におけるデータ通信アダプタは、例示的な計算ノード（１５２）をデータ通信のためにギガビット・イーサネット（１７４）に結合するギガビット・イーサネット・アダプタ（１７２）を含む。ギガビット・イーサネットは、ＩＥＥＥ８０２．３規格で定義されたネットワーク転送規格であり、１秒間に１０億ビット（１ギガビット）のデータ転送速度を提供する。ギガビット・イーサネットは、マルチモード光ファイバ・ケーブル、シングルモード光ファイバ・ケーブル又は非シールド撚り対線を介して動作する、イーサネットの一種である。
【００３３】
図２の例におけるデータ通信アダプタは、例示的な計算ノード（１５２）をデータ通信のためにＪＴＡＧマスタ回路（１７８）に結合するＪＴＡＧスレーブ回路（１７６）を含む。ＪＴＡＧは、バウンダリ・スキャンを用いたプリント回路基板の試験に使用されるテスト・アクセス・ポートのための、Ｓｔａｎｄａｒｄ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ  ａｎｄ  Ｂｏｕｎｄａｒｙ−Ｓｃａｎ  Ａｒｃｈｉｔｅｃｔｕｒｅという名称のＩＥＥＥ  １１４９．１規格に用いられる通称である。ＪＴＡＧは広汎に採用されているため、現時点では、バウンダリ・スキャンはＪＴＡＧとほぼ同義になっている。ＪＴＡＧはプリント回路基板に使用されるだけでなく、集積回路にバウンダリ・スキャンを行うためにも使用され、また埋込みシステムをデバッグする機構としても有用であり、システムへの使いやすい「バックドア」を提供している。図２の例示的な計算ノードは、これらの３つの全てであり得る。即ち、この計算ノードは、典型的には、プリント回路基板に装着された１つ又は複数の集積回路を含み、且つ、それ自体のプロセッサ、それ自体のメモリ、及びそれ自体のＩ／Ｏ能力を有する埋込みシステムとして実装することができる。ＪＴＡＧスレーブ（１７６）を通じたＪＴＡＧバウンダリ・スキャンにより、計算ノード（１５２）内のプロセッサ・レジスタ及びメモリを、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用するように効率的に構成することができる。
【００３４】
図２の例におけるデータ通信アダプタは、ポイント・ツー・ポイント・メッセージ・パッシング操作に最適な、例示的な計算ノード（１５２）を、例えば３次元トーラス又はメッシュとして構成されたネットワークのようなネットワーク（１０８）にデータ通信のために結合する、ポイント・ツー・ポイント・アダプタ（１８０）を含む。ポイント・ツー・ポイント・アダプタ（１８０）は、３つの通信軸ｘ、ｙ、及びｚ上の６つの双方向リンク＋ｘ（１８１）、−ｘ（１８２）、＋ｙ（１８３）、−ｙ（１８４）、＋ｚ（１８５）、及び−ｚ（１８６）を通じて、６方向のデータ通信を提供する。
【００３５】
図２の例におけるデータ通信アダプタは、例示的な計算ノード（１５２）を、コレクティブ・メッセージ・パッシング操作に最適な、例えば二分木として構成されたグローバル・コンバイニング・ネットワーク上のネットワーク（１０６）にデータ通信のために結合する、グローバル・コンバイニング・ネットワーク・アダプタ（１８８）を含む。グローバル・コンバイニング・ネットワーク・アダプタ（１８８）は、子ノード（１９０）への２つのリンクと、親ノード（１９２）への１つリンクの、３つの双方向リンクを通じたデータ通信を提供する。
【００３６】
例示的な計算ノード（１５２）は、２つの算術論理演算装置（「ＡＬＵ」）を含む。ＡＬＵ（１６６）は、各処理コア（１６４）の構成部品であり、それとは別のＡＬＵ（１７０）は、もっぱらグローバル・コンバイニング・ネットワーク・アダプタ（１８８）がｒｅｄｕｃｅ操作の算術関数及び論理関数を行う際に用いるための使用専用である。並列通信ライブラリ（１６０）内のリダクション・ルーチンのコンピュータ・プログラム命令は、算術関数又は論理関数のための命令を命令レジスタ（１６９）内にラッチすることができる。リダクション操作の算術関数又は論理関数が例えば「和」又は「論理和」である場合には、グローバル・コンバイニング・ネットワーク・アダプタ（１８８）は、プロセッサ（１６４）内のＡＬＵ（１６６）を使用することにより、又は典型的にはより高速な専用ＡＬＵ（１７０）を使用することにより、算術演算又は論理演算を実行することができる。
【００３７】
図２の例示的な計算ノード（１５２）は、直接メモリ・アクセスのためのコンピュータ・ハードウェアである直接メモリ・アクセス（「ＤＭＡ」）コントローラ（１９５）と、直接メモリ・アクセスのためのコンピュータ・ソフトウェアであるＤＭＡエンジン（１９７）とを含む。図２のＤＭＡエンジン（１９７）は、典型的には、ＤＭＡコントローラ（１９５）のコンピュータ・メモリ内に格納される。直接メモリ・アクセスは、中央処理装置（１６４）の動作負荷が少ない、計算ノードのメモリの読み出し及び書き込みを含む。ＤＭＡ転送は、本質的には、１つの位置から別の位置へ、典型的には１つの計算ノードから別の計算ノードへ、メモリ・ブロックをコピーすることである。ＣＰＵは、ＤＭＡ転送を開始することはできるが、ＣＰＵがＤＭＡ転送を実行することはない。
【００３８】
更なる説明のために、図３は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なポイント・ツー・ポイント・アダプタ（１８０）を図示する。ポイント・ツー・ポイント・アダプタ（１８０）は、ポイント・ツー・ポイント操作用に最適化されたデータ通信ネットワーク、即ち、計算ノードを３次元のトーラス又はメッシュに組織化するネットワークでの使用のために設計されている。図３の例におけるポイント・ツー・ポイント・アダプタ（１８０）は、ｘ軸に沿った４つの単方向のデータ通信リンクを通じた、−ｘ方向（１８２）の隣接ノードへの／からのデータ通信及び＋ｘ方向（１８１）の隣接ノードへの／からのデータ通信を提供する。ポイント・ツー・ポイント・アダプタ（１８０）はまた、ｙ軸に沿った４つの単方向のデータ通信リンクを通じた、−ｙ方向（１８４）の隣接ノードへの／からのデータ通信及び＋ｙ方向（１８３）の隣接ノードへの／からのデータ通信を提供する。図３におけるポイント・ツー・ポイント・アダプタ（１８０）はまた、ｚ軸に沿った４つの単方向のデータ通信リンクを通じた、−ｚ方向（１８６）の隣接ノードへの／からのデータ通信及び＋ｚ方向（１８５）の隣接ノードへの／からのデータ通信を提供する。
【００３９】
更なる説明のために、図４は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なグローバル・コンバイニング・ネットワーク・アダプタ（１８８）を図示する。グローバル・コンバイニング・ネットワーク・アダプタ（１８８）は、コレクティブ操作用に最適化されたネットワーク、即ち、並列コンピュータの計算ノードを二分木に組織化するネットワークでの使用のために設計されている。図４の例におけるグローバル・コンバイニング・ネットワーク・アダプタ（１８８）は、４つの単方向のデータ通信リンク（１９０）を通じて、２つの子ノードへの／からのデータ通信を提供する。グローバル・コンバイニング・ネットワーク・アダプタ（１８８）はまた、２つの単方向のデータ通信リンク（１９０）を通じて、１つの親ノードへの／からのデータ通信も提供する。
【００４０】
更なる説明のために、図５は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、ポイント・ツー・ポイント操作のために最適化された例示的なデータ通信ネットワーク（１０８）を図示する線図を示す。図５の例では、点は並列コンピュータの計算ノード（１０２）を表し、点の間の点線は計算ノード間のデータ通信リンク（１０３）を表す。データ通信リンクは、例えば図３に図示されたものと同様の、３つの軸ｘ、ｙ、及びｚ上を行き来する６つの方向＋ｘ（１８１）、−ｘ（１８２）、＋ｙ（１８３）、−ｙ（１８４）、＋ｚ（１８５）、及び−ｚ（１８６）上のデータ通信リンクを備えた、ポイント・ツー・ポイント・データ通信アダプタによって実装される。リンク及び計算ノードは、このポイント・ツー・ポイント操作用に最適化されたデータ通信ネットワークにより、３次元メッシュ（１０５）に組織化される。メッシュ（１０５）は、メッシュ（１０５）内のメッシュ（１０５）の対向する側にある最も外側の計算ノードを接続するラップアラウンド・リンクを各軸上に有する。これらのラップアラウンド・リンクは、トーラス（１０７）の一部を形成する。トーラス内の各計算ノードは、ｘ、ｙ、ｚの座標の組により一意に指定される、トーラス内での位置を有する。分かりやすくするために、ｙ及びｚ方向におけるラップアラウンド・リンクは省略されているが、ｘ方向に描かれたラップアラウンド・リンクと同様の方式で構成されることに読者は気づくであろう。説明を分かりやすくするために、図５のデータ通信ネットワークは２７個の計算ノードのみで描かれているが、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用されるポイント・ツー・ポイント操作用に最適化されたデータ通信ネットワークは、ごく少数の計算ノードを含むことも、又は何千もの計算ノードを含むこともできることを読者は認識するであろう。
【００４１】
更なる説明のために、図６は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、コレクティブ操作のために最適化された例示的なデータ通信ネットワーク（１０６）を図示する線図を示す。図６の例示的なデータ通信ネットワークは、計算ノードをツリーとして組織化するように計算ノードに接続されたデータ通信リンクを含む。図６の例では、点は並列コンピュータの計算ノード（１０２）を表し、点の間の点線（１０３）は計算ノード間のデータ通信リンクを表す。データ通信リンクは、例えば図４に図示されたものと同様のグローバル・コンバイニング・ネットワーク・アダプタによって実装され、各ノードは、一部の例外を除き、典型的には、２つの子ノードへの／からのデータ通信リンク、及び１つの親ノードへの／からのデータ通信を提供する。二分木（１０６）内のノードは、物理根ノード（２０２）、分岐ノード（２０４）及び葉ノード（２０６）として特徴付けることができる。根ノード（２０２）は２つの子を有し、親をもたない。葉ノード（２０６）は各々１つの親を有するが、子をもたない。分岐ノード（２０４）は各々、１つの親と２つの子の両方を有する。このようにして、リンク及び計算ノードは、コレクティブ操作用に最適化されたこのデータ通信ネットワークにより、二分木（１０６）に組織化される。説明をわかりやすくするために、図６のデータ通信ネットワークは３１個の計算ノードのみで描かれているが、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用されるコレクティブ操作用に最適化されたデータ通信ネットワークは、ごく少数の計算ノードを含むことも、又は何千もの計算ノードを含むこともできることを読者は認識するであろう。
【００４２】
図６の例では、ツリー内の各ノードに、「ランク」（２５０）と呼ばれるユニット識別子が割り当てられる。ノードのランクは、ツリー・ネットワークにおけるポイント・ツー・ポイント操作及びコレクティブ操作の両方での使用のために、ツリー・ネットワーク内でのノードの位置を一意に識別する。この例におけるランクは、根ノード（２０２）に割り当てられた０で始まる整数として割り当てられ、ツリーの第２層内の第１のノードに１が割り当てられ、ツリーの第２層内の第２のノードに２が割り当てられ、ツリーの第３層内の第１のノードに３が割り当てられ、ツリーの第３層内の第２のノードに４が割り当てられ、以下同様である。説明を分かりやすくするために、ここではツリーの最初の３つの層のランクのみを示すが、ツリー・ネットワーク内の全ての計算ノードに一意のランクが割り当てられる。
【００４３】
更なる説明のために、図７は、分散コンピューティング・システムがハイブリッド型コンピューティング環境として実装された、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするための更なる例示的な分散コンピューティング・システムを示す。「ハイブリッド型コンピューティング環境」は、この用語が本明細書において用いられる場合、メモリ内に格納されプロセッサ上で実行されるコンピュータ・プログラム命令の実行という形でデータ処理が実装されるように、コンピュータ・メモリに動作可能に結合されたコンピュータ・プロセッサを含むという点で、コンピューティング環境である。図７のハイブリッド型コンピューティング環境（６００）は、小規模な独立したハイブリッド型コンピューティング環境を表す１つの計算ノード（６０３）を含み、これは、他の同様の計算ノード（６０２）と共に使用されたときに、一緒に大規模なハイブリッド型コンピューティング環境を形成する。
【００４４】
図７の例示的な計算ノード（６０３）は、データ通信ネットワークを通じて計算ノード（６０３）に接続されたサービス・ノード上で実行されるサービス・アプリケーションから、初期プログラムのロードなどのような管理サービスを受け入れて、主ユーザ・レベル・コンピュータ・プログラムの実行を行うことができる。例示的な計算ノードはまた、データ通信のために、計算ノードがデータ・ストレージ及び他のＩ／Ｏ機能へのアクセスを得ることができるようにする１つ又は複数の入力／出力（Ｉ／Ｏ）ノードにも結合することができる。Ｉ／Ｏノード及びサービス・ノードは、高速イーサネットを用いて実装されるローカル・エリア・ネットワーク（「ＬＡＮ」）、又は当業者が想到するような別のファブリック・タイプのデータ通信ファブリックを通じて、例示的な計算ノード（６０３）、より大規模なハイブリッド型コンピューティング環境内の他の計算ノード（６０２）、及びＩ／Ｏデバイスに接続することができる。計算ノード（６０３）を含むより大規模なハイブリッド型コンピューティング環境において有用なＩ／Ｏデバイスは、データ記憶装置の形でコンピューティング環境のための不揮発性メモリを、プリンタの形でハイブリッド型コンピューティング環境のための出力デバイスを、及び、ハイブリッド型コンピューティング環境内の計算ノードを構成し、計算ノードによる主ユーザ・レベル・コンピュータ・プログラム命令の実行を開始するためのインターフェースをユーザに提供するサービス・アプリケーション・インターフェースを実行するコンピュータ端末の形でユーザＩ／Ｏデバイスを、含むことができる。
【００４５】
図７の例における計算ノード（６０３）は、他の計算ノード（６０２）などの他のハイブリッド型コンピューティング環境と組み合わせてより大規模なハイブリッド型コンピューティング環境を形成することができるハイブリッド型コンピューティング環境（６００）のより詳細な説明を助けるために、拡大図で示されている。図７の例における計算ノード（６０３）は、ホスト・コンピュータ（６１０）を含む。ホスト・コンピュータ（６１０）は、計算ノードと、ハイブリッド型コンピューティング環境においていずれかの特定の計算ノードの外部にある他のコンポーネントとの間のインターフェース機能を行うホスト・コンピュータであるという意味で「ホスト」である。即ち、初期ブート手続き、電源投入セルフ・テスト、基本的なＩ／Ｏ機能、サービス・ノードからのユーザ・レベル・プログラム・ロードの受け入れ、等を実行するのは、ホスト・コンピュータである。
【００４６】
図７の例におけるホスト・コンピュータ（６１０）は、高速メモリ・バス（６５３）を通じて、ランダム・アクセス・メモリ（「ＲＡＭ」）（６４２）であるコンピュータ・メモリに動作可能に結合された、コンピュータ・プロセッサ（６５２）を含む。各ホスト・コンピュータ（６１０）内のプロセッサ（６５２）は、ホスト・コンピュータ・アーキテクチャを定める一組のアーキテクチャ・レジスタ（６５４）を有する。
【００４７】
図７の計算ノード（６０３）はまた、１つ又は複数のアクセラレータ（６０４、６０５）を含む。アクセラレータ（６０４）は、各アクセラレータが、ホスト・コンピュータ・アーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されたアクセラレータ・アーキテクチャを有するという点で、「アクセラレータ」である。そのように加速されるコンピューティング機能には、例えば、ベクトル処理、浮動小数点数演算、及び当業者が想到するような他の機能が含まれる。図７の例における各アクセラレータ（６０４、６０５）は、高速メモリ・バス（６５１）を通じてＲＡＭ（６４０）に動作可能に結合されたコンピュータ・プロセッサ（６４８）を含む。ホスト・コンピュータ及びアクセラレータ（６０４、６０５）のＲＡＭ（６４０、６４２）内に、オペレーティング・システム（６４５）が格納される。本発明の実施形態によるハイブリッド型コンピューティング環境のホスト・コンピュータ及びアクセラレータにおいて有用なオペレーティング・システムには、ＵＮＩＸ（商標）、Ｌｉｎｕｘ（商標）、Ｍｉｃｒｏｓｏｆｔ  ＸＰ（商標）、Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｔａ（商標）、Ｍｉｃｒｏｓｏｆｔ  ＮＴ（商標）、ＡＩＸ（商標）、ＩＢＭのｉ５／ＯＳ（商標）、及び当業者であれば想到するような他のオペレーティング・システムが含まれる。ホスト・コンピュータ内のオペレーティング・システムがアクセラレータ上で用いられるオペレーティング・システムと同じものである必要はない。
【００４８】
各々のアクセラレータ（６０４、６０５）のプロセッサ（６４８）は、アクセラレータ・アーキテクチャを定める一組のアーキテクチャ・レジスタ（６５０）を有する。各アクセラレータのプロセッサ（６４８）のアーキテクチャ・レジスタ（６５０）は、ホスト・コンピュータ（６１０）内のプロセッサ（６５２）のアーキテクチャ・レジスタ（６５４）とは異なる。アーキテクチャ・レジスタは、各アーキテクチャ上で実行されるコンピュータ・プログラム命令によってアクセス可能なレジスタであり、命令レジスタ、プログラム・カウンタ、メモリインデックス・レジスタ、スタック・ポインタなどのレジスタである。アーキテクチャが異なるので、ホスト・コンピュータとアクセラレータとが同じ命令セットをサポートすることは、可能ではあるが一般的ではないであろう。従って、アクセラレータ（６０４）のプロセッサ（６４８）上で実行されるためにコンパイルされたコンピュータ・プログラム命令がホスト・コンピュータ（６１０）のプロセッサ（６５２）上でネイティブに実行されることは一般に予測しがたく、逆もまた同様である。しかも、ホスト・コンピュータとアクセラレータとの間のハードウェア・アーキテクチャの典型的な違いから、仮にアクセラレータがホストの命令セットをサポートしていたとしても、ホスト・コンピュータ（６１０）のプロセッサ（６５２）上で実行されるためにコンパイルされたコンピュータ・プログラム命令がアクセラレータ（６０４）のプロセッサ（６４８）上でネイティブに実行されることは一般に予測しがたい。図７の例におけるアクセラレータ・アーキテクチャは、ホスト・コンピュータ・アーキテクチャに対して、特定のクラスのコンピュータ機能の実行速度に関して最適化されている。即ち、アクセラレータが最適化されている１つ又は複数の機能に関して、これらの機能の実行は、それらがホスト・コンピュータのプロセッサ上で実行された場合に比べて、アクセラレータ上での方がより速く進行するであろう。
【００４９】
ハイブリッド型コンピューティング環境の例にはデータ処理システムが含まれ、データ処理システムは、各々がｘ８６プロセッサを有する１つ又は複数のホスト・コンピュータと、そのアーキテクチャ・レジスタがＰｏｗｅｒＰＣ命令セットを実装するアクセラレータとを含む。ホスト・コンピュータ内のｘ８６プロセッサ上での実行用にコンパイルされたコンピュータ・プログラム命令は、アクセラレータ内のＰｏｗｅｒＰＣプロセッサによってネイティブに実行することはできない。本明細書において説明される例示的なハイブリッド型コンピューティング環境のうちの幾つかは、ロスアラモス国立研究所（「ＬＡＮＬ」）Ｒｏａｄｒｕｎｎｅｒプロジェクト（ニューメキシコ州の州鳥にちなみ名づけられた）において開発された、ＬＡＮＬスーパーコンピュータ・アーキテクチャ、即ち、世界で初めて毎秒千兆回の浮動小数点数演算である「ペタフロップ」を達成したことで有名なスーパーコンピュータ・アーキテクチャに基づくことを、読者はさらに認識するであろう。ＬＡＮＬスーパーコンピュータ・アーキテクチャは、ＩＢＭ  Ｃｅｌｌプロセッサを有する多数のアクセラレータに結合された、デュアルコアＡＭＤ  Ｏｐｔｅｒｏｎプロセッサを有する多数のホスト・コンピュータを含むが、ＯｐｔｅｒｏｎプロセッサとＣｅｌｌプロセッサとは、異なるアーキテクチャを有している。
【００５０】
図７の例では、ホスト・コンピュータ（６１０）及びアクセラレータ（６０４、６０５）は、システム・レベル・メッセージング・パッシング・モジュール（「ＳＬＭＰＭ」）（６４６）及び少なくとも２つの異なるファブリック・タイプの２つのデータ通信ファブリック（６２８、６３０）により、データ通信のために互いに適合されている。データ通信ファブリック（６２８、６３０）は、ホスト・コンピュータとアクセラレータとの間を結合するデータ通信を実装する、データ通信ハードウェア及びソフトウェアの構成である。データ通信ファブリック・タイプの例には、周辺装置相互接続（「ＰＣＩ」）、ＰＣＩ  ｅｘｐｒｅｓｓ（「ＰＣＩｅ」）、イーサネット、Ｉｎｆｉｎｉｂａｎｄ、ファイバ・チャネル、小型コンピュータ・システム・インターフェース（「ＳＣＳＩ」）、Ｅｘｔｅｒｎａｌ  Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（「ｅＳＡＴＡ」）、ユニバーサル・シリアル・バス（「ＵＳＢ」）、及び当業者が想到するようなその他のものが含まれる。図７の例では、ホスト・コンピュータ（６１０）及びアクセラレータ（６０４、６０５）は、ＰＣＩｅ通信アダプタ（６６０）を通じたＰＣＩｅファブリック（６３０）、及びイーサネット通信アダプタ（６６１）を通じたイーサネット・ファブリック（６２８）により、データ通信のために互いに適合されている。ＰＣＩｅ及びイーサネットの使用は説明のためのものであり、本発明を限定するためのものではない。本発明の実施形態によるハイブリッド型コンピューティング環境は、例えばＰＣＩ、Ｉｎｆｉｎｉｂａｎｄ、ファイバ・チャネル、ＳＣＳＩ、ｅＳＡＴＡ、ＵＳＢなど、その他のファブリック・タイプのファブリックを含むことができることを当業者である読者は直ちに認識するであろう。
【００５１】
ＳＬＭＰＭ（６４６）は、ホスト・コンピュータ（６１０）とアクセラレータ（６０４、６０５）との間でメッセージに基づくデータ通信を行うために、アプリケーション・プログラミング・インターフェース（「ＡＰＩ」）をユーザ・レベル・アプリケーションに露出する、モジュール又はコンピュータ・プログラム命令のライブラリである。本発明の実施形態によりＳＬＭＰＭとして使用するために改良することができる、メッセージに基づくデータ通信ライブラリの例には、以下のものが含まれる。
・２つのバージョンがある業界標準インターフェースであり、Ｓｕｐｅｒｃｏｍｐｕｔｉｎｇ  １９９４で初めて提示され、主要な標準化団体による認可を受けていない、メッセージ・パッシング・インターフェース又は「ＭＰＩ」、
・ＬＡＮＬスーパーコンピュータのＤａｔａ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  ａｎｄ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎインターフェース（「ＤＡＣＳ」）、
・分散型マルチスレッド処理に関するＩＥＥＥ標準である、ＰＯＳＩＸ  Ｔｈｒｅａｄｓライブラリ（「Ｐｔｈｒｅａｄｓ」）、
・並列プログラミングに関する業界認定仕様である、Ｏｐｅｎ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇインターフェース（「ＯｐｅｎＭＰ」）、及び
・当業者が想到するその他のライブラリ。
【００５２】
この例では、ホスト・コンピュータ（６１０）とアクセラレータ（６０４）との間のメッセージに基づくデータ通信をサポートするために、ホスト・コンピュータ（６１０）とアクセラレータ（６０４）の両方がＳＬＭＰＭ（６４６）を有しているので、データ通信のためのいずれの結合でも、その両側でメッセージに基づくデータ通信の発信と受信の両方ができるようになっている。
【００５３】
この例におけるＳＬＭＰＭ（６４６）は、ホスト・コンピュータ（６１０）とアクセラレータ（６０４）との間の複数のデータ通信モードについてデータ通信パフォーマンスをモニタし、あるデータ通信モードに従ってホスト・コンピュータからアクセラレータにデータを伝送することを求める要求（６６８）を受信し、要求されたデータ通信モードに従ってデータを伝送するか否かを判定し、データが要求されたデータ通信モードに従って伝送されない場合には、別のデータ通信モードを選択し、選択されたデータ通信モードに従ってデータを伝送することにより、一般にハイブリッド型コンピューティング環境（６００）におけるデータ処理のために動作する。図７の例では、モニタされるパフォーマンスは、計算ノード（６０３）の動作中にホスト・コンピュータ（６１０）のＲＡＭ（６４２）内のＳＬＭＰＭ（６４６）により格納される、モニタされるパフォーマンス・データ（６７４）として示されている。
【００５４】
データ通信モードは、データ通信ファブリック・タイプ、データ通信リンク、及びデータ通信プロトコル（６７８）を指定する。データ通信リンク（６５６）は、ホスト・コンピュータとアクセラレータとの間のデータ通信接続である。図７の例において、ホスト・コンピュータ（６１０）とアクセラレータ（６０４）との間のリンク（６５６）は、ＰＣＩｅ接続（６３８）、又はイーサネット・ネットワーク（６０６）を通じたイーサネット接続（６３１、６３２）を含むことができる。図７の例におけるホスト・コンピュータ（６１０）とアクセラレータ（６０５）との間のリンク（６５６）は、ＰＣＩｅ接続（６３６）、又はイーサネット・ネットワーク（６０６）を通じたイーサネット接続（６３１、６３４）を含むことができる。図７の例では、ホスト・コンピュータとアクセラレータとの間には、各ファブリック・タイプにつき、１つのリンクのみが図示されているが、当業者であれば、各ファブリック・タイプにつき、任意の数のリンクが存在し得ることを直ちに認識するであろう。
【００５５】
データ通信プロトコルは、ホスト・コンピュータ（６１０）からアクセラレータ（６０４）に情報を送信するのに必要とされるデータ表現、信号送信、認証及びエラー検出に関する標準規則の組である。図７の例では、ＳＬＭＰＭ（６４６）は、ホスト・コンピュータ（６１０）とアクセラレータとの間のデータ通信のために、幾つかあるプロトコル（６７８）の中から１つを選択することができる。そのようなプロトコル（６７８）の例には、送信操作及び受信操作（６８１）を用いて実行される共有メモリ転送（「ＳＭＴ」）（６８０）、並びに、ＰＵＴ操作及びＧＥＴ操作（６８３）を用いて実行される直接メモリ・アクセス（「ＤＭＡ」）（６８２）が含まれる。
【００５６】
共有メモリ転送は、ホスト・コンピュータとアクセラレータとの間のデータを、その目的のために割り当てられた共有メモリ空間（６５８）の中へと渡して、いつでもただ１つのデータ・インスタンスだけがメモリ内に存在するようにするデータ通信プロトコルである。図７のホスト・コンピュータ（６１０）とアクセラレータ（６０４）との間の例示的な共有メモリ転送として、以下の例を考える。アプリケーション（６６９）は、ＳＭＴプロトコル（６８０）に従ったホスト・コンピュータ（６１０）からアクセラレータ（６０４）へのデータ（６７６）の伝送を要求する（６６８）。このような要求（６６８）は、そのような共有メモリに割り当てられたメモリ・アドレスを含むことができる。この例では、共有メモリ・セグメント（６５８）はアクセラレータ（６０４）上のメモリ位置に図示されているが、共有メモリ・セグメントは、アクセラレータ（６０４）上、ホスト・コンピュータ（６１０）上、若しくはホスト・コンピュータ及びアクセラレータの両方の上に配置することができ、又は、ホスト及びアクセラレータが必要に応じてそのセグメントにアクセスできる限りは、ローカルの計算ノード（６０３）から完全に離れて配置することさえできることを読者は認識するであろう。共有メモリ転送を行うために、ホスト・コンピュータ（６１０）上のＳＬＭＰＭ（６４６）は、ＴＣＰプロトコルにおける手続きと同様のハンドシェーキング手続きにより、アクセラレータ（６０４）上で実行されるＳＬＭＰＭ（６４６）とのデータ通信接続を確立する。次いで、ＳＬＭＰＭ（６４６）は、ヘッダ及びペイロード・データが含まれたメッセージ（６７０）を作成し、特定のファブリックの特定のリンクのためのメッセージ伝送キューにこのメッセージを挿入する。メッセージを作成する際に、ＳＬＭＰＭは、メッセージのヘッダ内に、アクセラレータの識別情報及びアクセラレータ上で実行されるプロセスの識別情報を挿入する。ＳＬＭＰＭはまた、要求（６６８）に由来するメモリ・アドレスを、ヘッダ内又はペイロード・データの一部としてメッセージ内に挿入する。ＳＬＭＰＭはまた、伝送されるデータ（６７６）を、メッセージのペイロード・データの一部としてメッセージ（６７０）の中に挿入する。次いで、メッセージは、通信アダプタ（６６０、６６１）により、ファブリック（６２８、６３０）を介して、アクセラレータ（６０４）上で実行されるＳＬＭＰＭに伝送され、ここでＳＬＭＰＭは、伝送されたデータ（６７６）であるペイロード・データをメッセージ内のメモリ・アドレスに従いＲＡＭ（６４０）内の共有メモリ空間（６５８）に格納する。
【００５７】
直接メモリ・アクセス（「ＤＭＡ」）は、コンピュータ・プロセッサ（６５２）にかかる動作負荷を抑えて、ホスト・コンピュータとアクセラレータとの間でデータを渡すためのデータ通信プロトコルである。ＤＭＡ転送は、本質的には、１つの位置から別の位置への、典型的にはホスト・コンピュータからアクセラレータへの、又はその逆への、メモリ・ブロックのコピーを行うものである。ホスト・コンピュータ及びアクセラレータの一方又は両方が、直接メモリ・アクセスのためのハードウェア及びソフトウェアの集約である、ＤＭＡコントローラ及びＤＭＡエンジンを含むことができる。直接メモリ・アクセスには、それぞれのプロセッサにかかる動作負荷が低減された、アクセラレータ及びホスト・コンピュータのメモリの読み出し及び書き込みが含まれる。アクセラレータのＤＭＡエンジンは、例えば、ＤＭＡの目的に割り当てられたメモリに対する書き込み又は読み出しを行うことができ、その間、アクセラレータのプロセッサは、コンピュータ・プログラム命令を実行し、又はそれ以外の動作を続行する。即ち、コンピュータ・プロセッサは、ＤＭＡ転送を実行する命令を発行することができるが、転送を行うのはプロセッサではなく、ＤＭＡエンジンである。
【００５８】
図７の例では、アクセラレータ（６０４）のみがＤＭＡコントローラ（６８５）及びＤＭＡエンジン（６８４）を含み、一方、ホスト・コンピュータはそれらを含まない。この実施形態では、ホスト・コンピュータ上のプロセッサ（６５２）が、ＳＭＴプロトコルに従ってアクセラレータに遠隔「ＧＥＴ」操作を実施するように命令するメッセージをアクセラレータに送信することにより、ホストからアクセラレータへのデータのＤＭＡ転送を開始する。アクセラレータ（６０４）がＤＭＡエンジンを含む唯一のデバイスである図７の例において図示された構成は、説明のみのためのものであり、限定のためのものではない。さらに他の実施形態においては、ホスト・コンピュータのみがＤＭＡコントローラ及びＤＭＡエンジンを含む一方で、多くの実施形態においては、ホスト・コンピュータとアクセラレータの両方がＤＭＡコントローラ及びＤＭＡエンジンを含むことができることを、当業者は直ちに認識するであろう。
【００５９】
図７のハイブリッド型コンピューティング環境においてＤＭＡプロトコルを実装するために、一部のメモリ領域は、ＤＭＡエンジンによるアクセスのために割り当てられる。そのようなメモリの割り当ては、他のアクセラレータ若しくはホスト・コンピュータとは独立して行うこともでき、又は、別のアクセラレータ若しくはホスト・コンピュータによって開始され、それらと協働して完了させることもできる。例えばＳＭＡプロトコルに従って割り当てられる共有メモリ領域を、ＤＭＡエンジンが利用できるようにされたメモリ領域とすることができる。即ち、図７のハイブリッド型コンピューティング環境（６００）におけるＤＭＡデータ通信の初期セットアップ及び実装は、少なくともその一部を、共有メモリ転送、又はＤＭＡエンジンに関して帯域外の別の帯域外データ通信プロトコルによって行うことができる。ＤＭＡ転送を実装するためのメモリの割り当ては、比較的待ち時間が長いが、ひとたび割り当てられると、ＤＭＡプロトコルは、他の多くのデータ通信プロトコルに比べて必要とするプロセッサ使用率が低い、高帯域幅のデータ通信を提供する。
【００６０】
直接「ＰＵＴ」操作は、発信元（ｏｒｉｇｉｎ）デバイス上のＤＭＡエンジンから発信先（ｔａｒｇｅｔ）デバイス上のＤＭＡエンジンにデータを伝送するモードの１つである。直接「ＰＵＴ」操作は、発信先デバイスのプロセッサがほとんど関与することなく発信先デバイス上にデータを伝送及び格納することを可能にする。直接「ＰＵＴ」操作において発信先デバイスのプロセッサからの関与を最小限にすることを実現するために、発信元のＤＭＡエンジンは、発信先デバイス上に格納されるべきデータを、発信先デバイス上のストレージ位置の特定の識別情報と共に転送する。発信元ＤＭＡが発信先デバイス上の特定のストレージ位置を知っているのは、発信先デバイス上でデータを格納するための特定のストレージ位置が、予め発信先ＤＭＡエンジンから発信元のＤＭＡエンジンに提供されているからである。
【００６１】
「ｒＧＥＴ」と称されることもある遠隔「ＧＥＴ」操作は、発信元デバイス上のＤＭＡエンジンから発信先デバイス上のＤＭＡエンジンにデータを伝送する別のモードである。遠隔「ＧＥＴ」操作は、発信元デバイスのプロセッサがほとんど関与することなく発信先デバイス上にデータを伝送及び格納することを可能にする。遠隔「ＧＥＴ」操作において発信元デバイスのプロセッサからの関与を最小限にすることを実現するために、発信元のＤＭＡエンジンは、発信先のＤＭＡエンジンがアクセスできるストレージ位置にデータを格納し、伝送する準備ができたデータのストレージ位置及びサイズを、発信先のＤＭＡエンジンに直接又は共有メモリ伝送によって帯域外で通知し、発信先のＤＭＡエンジンは、ストレージ位置からデータを取り出す。
【００６２】
複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることは、データ通信リンク（６５６）に関するメッセージ伝送要求キュー（６６２−６６５）の中の要求（６６８）の数をモニタすることを含むことができる。図７の例では、各メッセージ伝送要求キュー（６６２−６６５）は、１つの特定のデータ通信リンク（６５６）に関連付けられる。各キュー（６６２−６６５）は、キューに関連付けられたデータ通信リンク（６５６）に沿って通信アダプタ（６６０、６６１）が伝送すべきデータ（６７６）を含むメッセージ（６７０）に関するエントリを含む。
【００６３】
複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることは、共有メモリ空間（６５８）の使用率をモニタすることを含むこともできる。図７の例では、共有メモリ空間（６５８）は、アクセラレータのＲＡＭ（６４０）に割り当てられている。使用率とは、発信先デバイスに送信するためのデータが格納されているが、まだ発信先デバイスにより読み出されていない又は受信されていない、割り当てられた共有メモリ空間の割合であり、割り当てられた共有メモリへの書き込み及びそこからの読み出しを追跡することによってモニタされる。図７のハイブリッド型コンピューティング環境においては、共有メモリ空間を含め実際にはあらゆるメモリが有限である。従って、共有メモリ空間の空きに限りがあるせいで、アプリケーション・プログラム（６６９）の実行中に共有メモリ空間（６５８）が一杯になってしまうことがあり、その結果、ホスト・コンピュータ（６１０）からアクセラレータへのデータの伝送が遅くなったり、さらには停止したりすることさえあり得る。
【００６４】
本発明の幾つかの実施形態において、図７のハイブリッド型コンピューティング環境（６００）は、アプリケーション・プログラム（６６９）が２つ又はそれ以上のインスタンスを並列コンピューティング環境内の２つ又はそれ以上のホスト・コンピュータ（６１０）上で実行するような並列コンピューティング環境として動作するように、構成することができる。そのような実施形態において、データ通信モード横断的にデータ通信パフォーマンスをモニタすることはまた、並列コンピューティング環境内の２つ又はそれ以上のホスト・コンピュータ上で実行されるアプリケーション・プログラム（６６９）の複数のインスタンスにわたってデータ通信パフォーマンス情報（６７４）を集約することを含むことができる。集約されたパフォーマンス情報（６７４）を用いて、データ通信モードごとの平均通信待ち時間、特定のファブリック・タイプのデータ通信リンクにおける平均要求数、並列コンピューティング環境内の複数のホスト・コンピュータ及びアクセラレータ間での平均共有メモリ使用率、及び当業者が想到するようなその他の尺度を計算することができる。ＳＬＭＰＭは、そのような尺度の任意の組み合わせを、データを要求されたデータ通信モードに従って伝送すべきか否かを判定すること、及び、データを要求されたデータ通信モードに従って伝送すべきでない場合にデータを伝送するための別のデータ通信モードを選択することの両方のために用いることができる。
【００６５】
図７のＳＬＭＰＭ（６４６）は、ホスト・コンピュータ（６１０）上のアプリケーション・プログラム（６６９）から、あるデータ通信モードに従ってホスト・コンピュータ（６１０）からアクセラレータ（６０４）にデータ（６７６）を伝送することを求める要求（６６８）を受信する。そのようなデータ（６７６）は、アクセラレータ（６０４）による実行用にコンパイルされたコンピュータ・プログラム命令、例えばアクセラレータ・アプリケーション・プログラムの実行可能ファイル、アクセラレータ・アプリケーション・プログラムのためのワークピース・データ、アクセラレータ・アプリケーション・プログラムの実行に必要な、ライブラリ、データベース、ドライバなどのファイル、等を含むことができる。あるデータ通信モードに従ってデータ（６７６）を伝送する要求（６６８）を受信することは、特定のファブリック・タイプによりデータを伝送する要求を受信すること、特定のデータ通信リンクを通じてホスト・コンピュータからアクセラレータにデータを伝送する要求を受信すること、又はあるプロトコルに従ってホスト・コンピュータからアクセラレータにデータを伝送する要求を受信することを含むことができる。
【００６６】
あるデータ通信モードに従ってデータ（６７６）を伝送する要求（６６８）は、プロトコル、ファブリック・タイプ及びリンクによりデータ通信モードを明示で指定する呼び出しである、ＡＰＩを介したＳＬＭＰＭ（６４６）へのユーザ・レベルのアプリケーション関数呼び出しとして、実装することができる。関数呼び出しとして実装された要求は、関数呼び出し自体の動作に従ってプロトコルを指定することができる。例えばｄａｃｓ＿ｐｕｔ（）関数呼び出しは、ＤＡＣＳライブラリとして実装されたＳＬＭＰＭにより露出されるＡＰＩを介して、ＤＭＡ「ＰＵＴ」操作のデフォルト・モードでデータを伝送する呼び出しを表すことができる。そのような呼び出しは、呼び出しアプリケーション及びその呼び出しアプリケーションを記述したプログラマの観点から見ると、デフォルト・モード、即ち、明示のＡＰＩ呼び出しに関連付けられたデフォルト・モードであることをプログラマが知っているモードに従ってデータを伝送することを求める、ＳＬＭＰＭライブラリに対する要求を表している。呼び出された関数、この例ではｄａｃｓ＿ｐｕｔ（）は、要求されたデータ通信モード、即ち呼び出された関数のデフォルト・モードに従ってデータを伝送するか否かについてそれ自身の判定を行うように、複数のファブリック・タイプ、プロトコル及びリンクを伴う実施形態において符号化することができる。更なる一例において、例えばｄａｃｓ＿ｓｅｎｄ（）命令は、ＤＡＣＳライブラリとして実装されたＳＬＭＰＭにより露出されるＡＰＩを介して、ＳＭＴ「ｓｅｎｄ」操作のデフォルト・モードでデータを伝送することを求める呼び出しを表すことができ、この場合も、ｄａｃｓ＿ｓｅｎｄ（）は、要求されたデータ通信モードに従ってデータを伝送するか否かについてそれ自身の判定を行うように、複数のファブリック・タイプ、プロトコル、及びリンクを伴う実施形態において符号化される。
【００６７】
関数呼び出しにおける特定のアクセラレータの識別は、ファブリック・タイプを有効に指定することができる。そのような関数呼び出しは、呼び出しパラメータとして、特定のアクセラレータの識別情報を含むことができる。例えばＰＣＩｅ  ＩＤの使用による特定のアクセラレータの識別は、ＰＣＩファブリック・タイプを有効に指定する。別の同様の例において、イーサネット・アダプタのメディア・アクセス制御（「ＭＡＣ」）アドレスの使用による特定のアクセラレータの識別は、イーサネット・ファブリック・タイプを有効に指定する。ホスト上で実行されるアプリケーションからの関数呼び出しのアクセラレータＩＤを、ファブリック・タイプを指定するように実装する代わりに、関数呼び出しは、呼び出しのパラメータとして特定のアクセラレータのグローバル一意識別情報のみを含みことができ、それにより、ファブリック・タイプではなく、ホスト・コンピュータからアクセラレータへのリンクのみが指定される。この場合には、呼び出された関数は、特定のプロトコルでの使用のためのデフォルト・ファブリック・タイプを実装することができる。ＳＬＭＰＭにおいて呼び出された関数が、例えばＤＭＡプロトコルでの使用のためのデフォルト・ファブリック・タイプとしてＰＣＩｅを有するように構成されており、且つＳＬＭＰＭが、ＤＭＡプロトコルであるＤＭＡ  ＰＵＴ又はＤＭＡ遠隔ＧＥＴ操作に従ってアクセラレータ（６０４）にデータを伝送する要求を受信した場合には、呼び出された関数は、ＤＭＡのためのデフォルト・ファブリック・タイプであるＰＣＩｅファブリック・タイプを明示的に指定する。
【００６８】
各ファブリック・タイプの１つのリンクのみが単一のホスト・コンピュータを単一のアクセラレータに適合させるようなハイブリッド型コンピューティング環境においては、関数呼び出しのパラメータ内での特定のアクセラレータの識別は、リンクもまた有効に指定し得る。各ファブリック・タイプの１つより多くのリンクがホスト・コンピュータとアクセラレータとを適合させているようなハイブリッド型コンピューティング環境、例えば２つのＰＣＩｅリンクがホスト・コンピュータ（６１０）をアクセラレータ（６０４）に接続しているような場合においては、呼び出されたＳＬＭＰＭ関数は、アクセラレータの識別情報により指定されるファブリック・タイプについての関数呼び出しのパラメータにおいて識別された、アクセラレータのためのデフォルト・リンクを実装することができる。
【００６９】
図７の例におけるＳＬＭＰＭ（６４６）はまた、モニタされたパフォーマンス（６７４）に基づいて、要求されたデータ通信モードに従ってデータ（６７６）を伝送するか否かを判定する。要求されたデータ通信モードに従ってデータ（６７６）を伝送するか否かを判定することは、要求されたファブリック・タイプによりデータを伝送するか否かを判定すること、要求されたデータ通信リンクを通じてデータを伝送するか否かを判定すること、又は要求されたプロトコルに従ってデータを伝送するか否かを判定することを含むことができる。
【００７０】
データ通信モード横断的にデータ通信パフォーマンスをモニタすることが、あるデータ通信リンク（６５６）についてのメッセージ伝送要求キュー（６６２−６６５）の中の要求の数をモニタすることを含むような本発明の実施形態によるハイブリッド型コンピューティング環境においては、データ（６７６）を要求されたデータ通信モードに従って伝送するか否かを判定することは、メッセージ伝送要求キューの中の要求の数が、所定の閾値を超えるか否かを判定することにより行うことができる。複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることが共有メモリ空間の使用率をモニタすることを含むような本発明の実施形態によるハイブリッド型コンピューティング環境においては、データ（６７６）を要求されたデータ通信モードに従って伝送するか否かを判定することは、共有メモリ空間の使用率が所定の閾値を超えるか否かを判定することにより行うことができる。
【００７１】
データを要求されたデータ通信モードに従って伝送すべきでない場合には、ＳＬＭＰＭ（６４６）は、モニタされたパフォーマンスに基づいて、データを伝送するための別のデータ通信モードを選択し、選択されたデータ通信モードに従ってデータ（６７６）を伝送する。データを伝送するための別のデータ通信モードを選択することは、モニタされたパフォーマンスに基づいて、データを伝送するための別のデータ通信ファブリック・タイプを選択すること、データがそれを通じて伝送されるデータ通信リンクを選択すること、及び別のデータ通信プロトコルを選択することを含むことができる。一例として、要求されたデータ通信モードが、ＰＣＩｅファブリック（６３０）のリンク（６３８）を通じた、アクセラレータ（６０４）への、ＰＵＴ操作を用いたＤＭＡ伝送である場合を考える。モニタされたデータ・パフォーマンス（６７４）が、リンク（６３８）に関連付けられた伝送メッセージ要求キュー（６６２）の中の要求の数が所定の閾値を超えていることを示した場合には、ＳＬＭＰＭは、別のファブリック・タイプであるイーサネット・ファブリック（６２８）、及び、てデータ（６７６）がそれを通じて伝送されるリンク（６３１、６３２）を選択することができる。また、モニタされたパフォーマンス（６７４）が、共有メモリ空間（６５８）の現在の使用率は所定の閾値を下回っているが、一方、キュー（６６２）の中の未処理のＤＭＡ伝送の数は所定の閾値を超えていることを示した場合を考える。このような場合には、ＳＬＭＰＭ（６４６）は、データ（６７６）を伝送するために、共有メモリ転送など、別のプロトコルを選択することもできる。
【００７２】
ＳＬＭＰＭにより、データ（６７６）を伝送するための別のデータ通信モードを選択することはまた、データ通信メッセージ・サイズ（６７２）に基づいて、データ通信プロトコル（６７８）を選択することを含むこともできる。データ通信メッセージ・サイズ（６７２）に基づいてデータ通信プロトコル（６７８）を選択することは、メッセージ・サイズが所定の閾値を超えているか否かを判定することにより行うことができる。大きなメッセージ（６７０）のＤＭＡ転送を行う際のプロセッサ使用率は、典型的には、同じサイズのメッセージの共有メモリ転送を行う際のプロセッサ使用率より低いので、大きめのメッセージ（６７０）のためには、ＤＭＡプロトコルが好ましいプロトコルであり得る。
【００７３】
上述のように、ＳＬＭＰＭはまた、選択されたデータ通信モードに従ってデータを伝送する。選択されたデータ通信モードに従ってデータを伝送することは、選択されたデータ通信ファブリック・タイプによりデータを伝送すること、選択されたデータ通信リンクを通じてデータを伝送すること、又は選択されたプロトコルに従ってデータを伝送することを含む。ＳＬＭＰＭ（６４６）は、デバイス・ドライバを介して、選択されたデータ通信モードのデータ通信ファブリック・タイプのための通信アダプタに選択されたデータ通信モードのプロトコルに従ってメッセージ（６７０）を伝送することを命令することにより、選択されたデータ通信モードによるデータ伝送を行うことができ、メッセージは、メッセージ・ヘッダ内にアクセラレータの識別情報を含み、メッセージ・ペイロード内に伝送されるデータ（６７６）を含む。
【００７４】
図７の例では、１つの計算ノード上のホスト・コンピュータ（６１０）及びアクセラレータ（６０４）の両方に、階層型分散コンパイラ（１５５）がインストールされている。完全を期して、階層型分散コンパイラ（１５５）は、ホスト・コンピュータとアクセラレータの両方の中に図示されている。実際には、当業者が想到するように、本発明の実施形態による階層型分散コンパイラ（１５５）は、ホスト・コンピュータ若しくは１つ若しくは複数のアクセラレータのどちらかに、又は、ホスト・コンピュータ及び１つ若しくは複数のアクセラレータの両方に、インストールすることができる。図７の階層型分散コンパイラ（１５５）は、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる、自動計算機のモジュールである。階層型分散コンパイラ（１５５）は、コンパイル・ノードによりソフトウェアをコンパイルし、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持し、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するためのコンピュータ・プログラム命令を含む。図７の他の計算ノード（６０２）の各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの１つのためのものである場合は、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。
【００７５】
更なる説明のために、図８は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする例示的な方法を示す。コンパイルとは、しばしば高水準プログラミング言語である、あるコンピュータ言語で記述されたソース・コードを、別の、典型的には実行可能コンピュータ言語である、典型的には二進形式を有し、オブジェクト・コードと呼ばれることもあるコンピュータ言語に変換するプロセスである。本発明の実施形態によるコンパイルは、典型的には、本発明の実施形態による計算ノード上にインストールされた階層型分散コンパイラによって行われる。そのような階層型分散コンパイラは、典型的には、多数の異なる種類のターゲット・コンピュータ上での使用のためにソフトウェアをコンパイルすることが可能である。従って、階層型分散コンパイラは、コンパイルされていないソース・ソフトウェアの部分ごとにコンパイルして、異種のコンピュータ上での使用のためのターゲット・オブジェクト・コードにすることができる。
【００７６】
階層型分散処理システムは、多くの方式で実装することができ、例えばツリー構造で実装することができる。そのようなツリー構造は、ｋ分木、即ち任意の次数の木、二分木、又は当業者が想到するような他の任意の形式のツリー構造とすることができる。代替的に、本発明による階層型分散処理システムは、当業者が想到するような、ツリー構造とは見なされない他の形式で実装することができる。図８の方法は、上述の例示的な分散コンピューティング・システムのような分散コンピューティング・システム、即ち図１−図６の例示的な並列コンピュータ、図７の例示的なハイブリッド型コンピューティング環境、及び当業者が想到するようなその他の分散コンピューティング・システムにおいて実行することができる。
【００７７】
図８の方法は、１つ又は複数のコンパイル・ノードを識別すること（８０２）を含む。上述のように、１つ又は複数のコンパイル・ノードは、あるコンピュータ言語、典型的には高水準プログラミング言語で書かれたソース・コードを、別の、典型的には二進形式を有し、オブジェクト・コードと呼ばれることもある、多くは実行可能コンピュータ言語に変換する。コンパイル・ノードは、コンパイル・ノードそれ自体の上で実行されるソフトウェアの部分をコンパイルするとともに、階層型分散ネットワーク内の別のノード上で実行される他の部分もコンパイルする。
【００７８】
図８の方法により１つ又は複数のコンパイル・ノードを識別すること（８０２）は、コンパイルに関して計算的に最適化された１つ又は複数のノードを選択することにより、行うことができる。コンパイルに関して計算的に最適化された１つ又は複数のノードを選択することは、ノードを、そのＩ／Ｏ能力、処理能力、及びメモリ能力に基づいて識別することを含むことができる。これらの能力の特定のバランスが、コンパイルにとって最適であることが多い。そのような最適なバランスは、異なる種類のソフトウェアのコンパイルごとに異なるものである場合があり、従って、コンパイルに関して計算的に最適化された１つ又は複数のノードを選択することは、コンパイルされる特定のソフトウェアに応じて１つ又は複数のノードを選択することを含むことができる。
【００７９】
図８の方法により１つ又は複数のコンパイル・ノードを識別すること（８０２）はまた、コンパイルに最適化された１つ又は複数のノードを、階層型分散処理システムのトポロジにおけるその位置をもとにして選択することにより行うことができる。ツリー構造の階層型データ処理システムでは、例えば、根ノードであるノード、又は多数の子孫を有するノードは、ノードがその子孫のためにソフトウェアをコンパイルするのに最適化されるように、トポロジ内に位置し得る。本明細書において用いられる用語としての子孫は、階層型データ処理システムにおいてコンパイル・ノードより下の段に位置し、且つ、その階層型処理システムにおいて、そのコンパイル・ノードを含む分岐上に位置するノードである。
【００８０】
図８の方法はまた、コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供すること（８０４）を含み、ここで、コンパイルされるソフトウェアの少なくとも一部は、１つ又は複数の他のノードにより実行されるべきものである。１つ又は複数のコンパイル・ノードにコンパイルされるソフトウェアを提供すること（８０４）は、コンパイルされるソフトウェアをメッセージに入れてコンパイル・ノードに送信すること、コンパイル・ノードにソフトウェアをダウンロードすること、システム管理者がコンパイル・ノードにソフトウェアをインストールすること、又は、当業者が想到するような、１つ又は複数のコンパイル・ノードにコンパイルされるソフトウェアを提供するためのその他のいずれかの手法により、実行することができる。
【００８１】
図８の方法はまた、コンパイル・ノードによりソフトウェアをコンパイルすること（８０６）を含む。コンパイル・ノードによりソフトウェアをコンパイルすること（８０６）は、ソフトウェアの、コンパイル・ノード上で実行されるべき部分を識別し、コンパイルされていないソフトウェアのコンピュータ言語で記述されたコードを、コンパイル・ノード上で実行するための実行可能コンピュータ言語に変換することにより、行うことができる。コンパイル・ノードによりソフトウェアをコンパイルすること（８０６）は、ソフトウェアの、別のノード上で実行されるべき部分を識別し、別のノードのターゲット実行環境を識別し、コンパイルされていないソフトウェアのコンピュータ言語で記述されたソフトウェアを、別のノード上で実行するための実行可能コンピュータ言語に変換することにより、行うことができる。
【００８２】
図８の方法はまた、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持すること（８０８）を含む。コンパイル・ノード上で実行される任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持すること（８０８）は、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアを実行用に格納することにより行うことができる。
【００８３】
図８の方法はまた、分散処理システムの階層の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが、選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択すること（８１０）と、選択されたノード又は選択されたノードの子孫により実行されるコンパイル済みソフトウェアのみを、選択されたノードに送信すること（８１２）とを含む。任意のコンパイル済みソフトウェアが、選択されるノード又は選択されたノードの子孫のためのものであるか否かに基づいて、分散処理システムの階層の次の段の１つ又は複数のノードをコンパイル・ノードにより選択すること（８１０）は、階層型分散処理システムのトポロジ表現をトラバースして、コンパイル済みソフトウェアが実行されるべきノードの位置を識別し、コンパイル済みソフトウェアを実行するこれらのノードが存在する階層型データ処理システムの分岐を判定し、コンパイル・ノードの子ノードのどれが、その階層型データ処理システムの分岐上に存在するのかを識別することにより、行うことができる。
【００８４】
選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること（８１２）は、選択されたノード又は選択されたノードの子孫により実行されるコンパイル済みソフトウェアの部分を含むメッセージを作成し、そのメッセージを選択されたノードに送信することにより、行うことができる。選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること（８１２）はまた、選択されたノードに、コンパイル済みソフトウェアを実行するためにコンパイル済みソフトウェアを該ノードにダウンロードするための位置を通知することにより、又は、当業者が想到するような、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信する（８１２）ための他のいずれかの方式により、行うことができる。
【００８５】
選択されたノードは、コンパイル済みソフトウェアを実行する場合も、実行しない場合もある。即ち、コンパイル済みソフトウェアを、選択されたノードより下の段にあるノードが実行することがある。従って、更なる説明のために、図９は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする別の例示的な方法を図示するフローチャートを示す。図９の方法は、１つ又は複数のコンパイル・ノードを識別すること（８０２）と、コンパイルされるソフトウェアを１つ又は複数のコンパイル・ノードに提供すること（８０４）であって、コンパイルされるソフトウェアの少なくとも一部は１つ又は複数の他のノードにより実行されるべきものである、提供することと、コンパイル・ノードによりソフトウェアをコンパイルすること（８０６）と、コンパイル・ノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイル・ノードにより保持すること（８０８）と、分散処理システムの階層構造の次の段の１つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイル・ノードにより選択すること（８１０）と、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること（８１２）と、を含むという点で、図８の方法に類似している。
【００８６】
図９の方法は、階層型分散処理システム内でコンパイル・ノードより下にあるノードによって行われる付加的なステップを含む。図９の方法は、コンパイル済みソフトウェアを選択されたノードにより受信すること（８１４）を含む。コンパイル済みソフトウェアは、メッセージ内で受信することも、ダウンロードのためにコンパイル・ノードにより識別することも、又は当業者が想到するような他の手法で受信することもできる。
【００８７】
図９の方法はまた、コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定すること（８１６）を含む。コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの１つのためのものであるかを判定すること（８１６）は、コンパイル済みソフトウェアの特定の部分を実行するノードの識別情報をコンパイル・ノードから受信し、識別されたノードが選択されたノードであるか否か、又は識別されたノードがその子孫のうちの１つであるか否かを判定することにより、行うことができる。
【００８８】
コンパイル済みソフトウェアが選択されたノードのためのものである場合には、図９の方法は、実行のためにソフトウェアを選択されたノードにより保持すること（８１８）を含む。実行のためにソフトウェアを選択されたノードにより保持すること（８１８）は、選択されたノード上で実行されるべき任意のコンパイル済みソフトウェアを実行のために格納することにより、行うことができる。
【００８９】
コンパイル済みソフトウェアが子孫のうちの１つのためのものである場合には、図９の方法は、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択すること（８２０）、及び、選択された別のノードにコンパイル済みソフトウェアを送信すること（８２２）を含む。コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択すること（８２０）は、階層型分散処理システムのトポロジ表現をトラバースして、コンパイル済みソフトウェアが実行されるべきノードの位置を識別し、コンパイル済みソフトウェアを実行するこれらのノードが存在する階層型データ処理システムの分岐を判定し、選択されたノードの子ノードのどれが、その階層型データ処理システムの分岐上に存在するのかを識別することにより、行うことができる。
【００９０】
選択された別のノードにコンパイル済みソフトウェアを送信すること（８２２）は、選択された別のノード又は選択された別のノードの子孫により実行されるべきコンパイル済みソフトウェアの部分を含むメッセージを作成し、そのメッセージを選択された別のノードに送信することにより、行うことができる。選択された別のノードにコンパイル済みソフトウェアを送信すること（８２２）はまた、選択された別のノードに、コンパイル済みソフトウェアを実行するためにコンパイル済みソフトウェアを該ノードにダウンロードするための位置を通知することにより、又は、当業者が想到するような、選択された別のノードにコンパイル済みソフトウェアを送信する（８２２）ためのその他のいずれかの方式により、行うことができる。
【００９１】
更なる説明のために、図１０は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするためのシステムの例示的な使用事例のブロック図を示す。図１０の例において、コンパイル用ラップトップ（７０２）は、コンパイルされていないソフトウェア（７２２）を有する。コンパイルされていないソフトウェア（７２２）は、コンピュータ（７０４）により実行されるソフトウェア部分（７２４）と、１つ又は複数のグラフィックス・プロセッシング・ユニット（「ＧＰＵ」）（７０８）により実行されるソフトウェア部分（７２６及び７２８）と、並列コンピュータ内の計算ノード（７１２）により実行されるソフトウェア部分（７２８、７３０、７３２、７３４）と、ハイブリッド型コンピューティング環境のフロント・エンド・ノード（７１４）により実行されるソフトウェア部分（７３６）と、ハイブリッド型コンピューティング・システム内のホスト・コンピュータ（７１８）により実行されるソフトウェア部分（７３８、７４０、及び７４２）と、ハイブリッド型コンピューティング環境のアクセラレータ（７２０）により実行されるソフトウェア部分（７４４、７４６、７４８、及び７５０）とを有する。
【００９２】
図１０の例において、コンパイル用ラップトップ（７０２）は、コンピュータ（７０４）のためのソフトウェア部分（７２４）をコンパイルし、コンパイル済みソフトウェアのその部分を、実行のためにコンピュータ（７０４）に送信する。図１０の例では、コンパイル用ラップトップ（７０２）はまた、特定のＧＰＵ（７０８）のためのソフトウェア部分（７２６及び７２８）をコンパイルし、コンパイル済みソフトウェアのそれらの部分をコンピュータ（７０４）に送信し、次にコンピュータ（７０４）が、コンパイル済みソフトウェアのその部分を、そのコンパイル済みソフトウェアのその部分を実行することになる特定のＧＰＵに送信する。
【００９３】
図１０の例において、コンパイル用ラップトップ（７０２）は、並列コンピュータの特定の計算ノード（７１２）のためのソフトウェア部分（７２８、７３０、７３２、及び７３４）をコンパイルし、コンパイル済みソフトウェアのそれらの部分を並列コンピュータのＩ／Ｏノード（７１０）に送信し、このＩ／Ｏノード（７１０）が次に、コンパイル済みソフトウェアのそれらの部分を計算ノード（７１２）の根ノードに送信する。次いで、計算ノードの根ノードは、どの子ノードがコンパイル済みソフトウェアのその部分を実行することになる子孫を有するかを識別し、各々の子に、その子又はその子孫により実行されることになる部分のみを送信する。次いで、各々の子はこれらの部分を受信し、自分がその部分を実行するのか、それとも自分の子孫のうちの１つがその部分を実行することになるのかを判定し、その子孫のための部分のみを、子孫と同じ分岐上の子に送信する。このようにして、コンパイル済みソフトウェアの部分は、そのコンパイル済みソフトウェアを実行する特定の計算ノードまで、段から段へと送信されていく。
【００９４】
図１０の例において、コンパイル用ラップトップ（７０２）は、ハイブリッド型コンピューティング環境のフロント・エンド・ノード（７１４）のためのソフトウェア部分（７３６）をコンパイルし、コンパイル済みソフトウェアのその部分を、実行のためにハイブリッド型コンピューティング環境のフロント・エンド・ノード（７１４）に送信する。図１０の例では、コンパイル用ラップトップ（７０２）はまた、特定のホスト・コンピュータ（７１８）のためのソフトウェア部分（７３８、７４０、及び７４２）をコンパイルし、コンパイル済みソフトウェアのそれらの部分をハイブリッド型コンピューティング環境のフロント・エンド・ノード（７１４）に送信し、このフロント・エンド・ノード（７１４）が次に、コンパイル済みソフトウェアのその部分を、コンパイル済みソフトウェアのその部分を実行することになる特定のホスト・コンピュータに送信する。図１０の例では、コンパイル用ラップトップ（７０２）はまた、ホスト・コンピュータ（７１８）の特定のアクセラレータ（７２０）のためのソフトウェア部分（７４４、７４６、７４８、及び７５０）をコンパイルし、コンパイル済みソフトウェアのそれらの部分をハイブリッド型コンピューティング環境のフロント・エンド・ノード（７１４）に送信し、このフロント・エンド・ノード（７１４）が次に、コンパイル済みソフトウェアのその部分をこれらのアクセラレータのための特定のホスト・コンピュータに送信し、次にこのホスト・コンピュータが、コンパイル済みソフトウェアのその部分を、コンパイル済みソフトウェアのその部分を実行することになる特定のアクセラレータに送信する。
【００９５】
上記の例において、階層型分散処理システム用にソフトウェアをコンパイルすることを、単一のコンパイル・ノードを用いて一般的に説明した。これは説明のためであり、限定のためのものではない。実際に、本発明の多くの実施形態において、１つより多くのノードが、本発明により階層型分散処理システム用にソフトウェアをコンパイルすることができる。
【００９６】
当業者により認識されるように、本発明の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロ・コード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、媒体内に具体化されたコンピュータ使用可能プログラム・コードを有する、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【００９７】
１つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）として、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はそれらとの関連で使用するためのプログラムを収容し又は格納することが可能ないずれかの有形媒体とすることができる。
【００９８】
コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部としてコンピュータ可読プログラム・コードが組み入れられた伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光、又はそれらのいずれかの適切な組み合わせを含むがこれらに限定されない、種々の異なる形態のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連で使用するためのプログラムを通信し、伝搬し、又は搬送することができる、いずれかのコンピュータ可読媒体とすることができる。
【００９９】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、又は上記のもののいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
【０１００】
本発明の態様の操作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。一番最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。
【０１０１】
本発明の態様は、上記において、本発明の実施形態による方法、装置（システム）、及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明されている。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実施することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、その結果、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施するための手段を作り出すようにすることができる。
【０１０２】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、その結果、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０１０３】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で実行される一連の動作ステップによりコンピュータ実施のプロセスを生成し、その結果、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施するプロセスをもたらすようにすることもできる。
【０１０４】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、特定の論理関数を実行するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記した機能は、図中に記された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、又はこれらのブロックは、ときには逆の順序で実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、及び、ブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェアをベースとするシステム、又は、専用ハードウェアとコンピュータ命令との組み合わせによって実行できることにも留意される。
【０１０５】
本明細書における説明は例示のみを目的としており、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許請求の範囲の文言によってのみ限定される。
【図１】
2013528856.tif 000003
【図２】
2013528856.tif 000004
【図３】
2013528856.tif 000005
【図４】
2013528856.tif 000006
【図５】
2013528856.tif 000007
【図６】
2013528856.tif 000008
【図７】
2013528856.tif 000009
【図８】
2013528856.tif 000010
【図９】
2013528856.tif 000011
【図１０】
2013528856.tif 000012
2013528856.tif 000013
2013528856.tif 000014
2013528856.tif 000015
2013528856.tif 000016
2013528856.tif 000017
2013528856.tif 000018
2013528856.tif 000019
2013528856.tif 000020
2013528856.tif 000021
【国際調査報告】
2013528856.tif 000022
2013528856.tif 000023