階層型分散処理システム用にソフトウェアをコンパイルするための方法であって、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供することであって、前記コンパイルされるソフトウェアの少なくとも一部は、1つ又は複数の他のノードにより実行されるべきものである、提供することと、前記コンパイルノードにより前記ソフトウェアをコンパイルすることと、前記コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアを前記コンパイルノードにより保持することと、前記分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイルノードにより選択することと、前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを、前記選択されたノードに送信することと、を含む、方法。前記方法が、選択されたノードにより、コンパイル済みソフトウェアを受信することと、前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定することと、前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持することと、前記コンパイル済みソフトウェアが前記子孫のうちの1つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信することと、をさらに含む、請求項1に記載の方法。前記方法が、前記1つ又は複数のコンパイルノードを識別することをさらに含む、請求項1又は請求項2に記載の方法。前記1つ又は複数のコンパイルノードを前記識別することが、コンパイルに関して計算的に最適化された1つ又は複数のノードを選択することをさらに含む、請求項3に記載の方法。前記1つ又は複数のコンパイルノードを前記識別することが、コンパイルに最適化された1つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択することをさらに含む、請求項3又は請求項4に記載の方法。前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、複数の計算ノードと、前記計算ノードをデータ通信のために結合する、ポイントツーポイントデータ通信用に最適化された第1のデータ通信ネットワークと、前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第2のデータ通信ネットワークとを含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置ALUを有する、前記請求項のいずれか1項に記載の方法。前記階層型分散処理システムは、ハイブリッド型コンピューティング環境をさらに含み、前記ハイブリッド型コンピューティング環境は、複数の計算ノードを含み、前記計算ノードの各々は、ホストコンピュータアーキテクチャを有するホストコンピュータと、アクセラレータアーキテクチャを有するアクセラレータとを含み、前記アクセラレータアーキテクチャは、前記ホストコンピュータアーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されており、前記ホストコンピュータ及び前記アクセラレータは互いに、システムレベルメッセージパッシングモジュールによるデータ通信に関して適合されている、前記請求項のいずれか1項に記載の方法。階層型分散処理システム用にソフトウェアをコンパイルするための装置であって、前記装置は、コンピュータプロセッサと、前記コンピュータプロセッサに動作可能に結合されたコンピュータメモリとを備え、前記コンピュータメモリはその内部にコンピュータプログラム命令が配置されており、前記コンピュータプログラム命令は、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供し、前記コンパイルされるソフトウェアの少なくとも一部は、1つ又は複数の他のノードにより実行されるべきものであり、前記コンパイルノードにより前記ソフトウェアをコンパイルし、前記コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアを前記コンパイルノードにより保持し、前記分散処理システムの階層構造の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイルノードにより選択し、前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを前記選択されたノードに送信する、ためのものである、装置。前記コンピュータメモリは、その内部に、選択されたノードにより、コンパイル済みソフトウェアを受信し、前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定し、前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持し、前記コンパイル済みソフトウェアが前記子孫のうちの1つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信する、ためのコンピュータプログラム命令がさらに配置されている、請求項8に記載の装置。前記コンピュータメモリは、その内部に、前記1つ又は複数のコンパイルノードを識別するためのコンピュータプログラム命令がさらに配置されている、請求項8又は請求項9に記載の装置。前記1つ又は複数のコンパイルノードを識別するための前記コンピュータプログラム命令が、コンパイルに関して計算的に最適化された1つ又は複数のノードを選択するためのコンピュータプログラム命令をさらに含む、請求項10に記載の装置。前記1つ又は複数のコンパイルノードを識別するための前記コンピュータプログラム命令が、コンパイルに最適化された1つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択するためのコンピュータプログラム命令をさらに含む、請求項10又は請求項11に記載の装置。前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、複数の計算ノードと、前記計算ノードをデータ通信のために結合する、ポイントツーポイントデータ通信用に最適化された第1のデータ通信ネットワークと、前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第2のデータ通信ネットワークとを含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置ALUを有する、請求項8乃至請求項12のいずれか1項に記載の装置。前記階層型分散処理システムは、ハイブリッド型コンピューティング環境をさらに含み、前記ハイブリッド型コンピューティング環境は、複数の計算ノードを含み、前記計算ノードの各々は、ホストコンピュータアーキテクチャを有するホストコンピュータと、アクセラレータアーキテクチャを有するアクセラレータとを含み、前記アクセラレータアーキテクチャは、前記ホストコンピュータアーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されており、前記ホストコンピュータ及び前記アクセラレータは互いに、システムレベルメッセージパッシングモジュールによるデータ通信に関して適合されている、請求項8乃至請求項13のいずれか1項に記載の装置。階層型分散処理システム用にソフトウェアをコンパイルするためのコンピュータプログラムであって、前記コンピュータプログラムは、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供し、前記コンパイルされるソフトウェアの少なくとも一部は、1つ又は複数の他のノードにより実行されるべきものであり、前記コンパイルノードにより前記ソフトウェアをコンパイルし、前記コンパイルノードにより、前記コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアを保持し、前記分散処理システムの階層構造の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は前記選択されるノードの子孫のためのものであるか否かに基づいて、前記コンパイルノードにより選択し、前記選択されたノード又は前記選択されたノードの子孫により実行されるべき前記コンパイル済みソフトウェアのみを前記選択されたノードに送信するためのコンピュータプログラム命令を含む、コンピュータプログラム。選択されたノードにより、コンパイル済みソフトウェアを受信し、前記コンパイル済みソフトウェアが、前記選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定し、前記コンパイル済みソフトウェアが前記選択されたノードのためのものである場合に、前記ソフトウェアを実行のために前記選択されたノードにより保持し、前記コンパイル済みソフトウェアが前記子孫のうちの1つのためのものである場合に、前記コンパイル済みソフトウェアのための子孫に基づいて、前記階層型分散処理システムの次の段の別のノードを選択し、前記選択された別のノードに前記コンパイル済みソフトウェアを送信するためのコンピュータプログラム命令をさらに含む、請求項15に記載のコンピュータプログラム。前記1つ又は複数のコンパイルノードを識別するためのコンピュータプログラム命令をさらに含む、請求項15又は請求項16に記載のコンピュータプログラム。前記1つ又は複数のコンパイルノードを識別するための前記コンピュータプログラム命令が、コンパイルに関して計算的に最適化された1つ又は複数のノードを選択するためのコンピュータプログラム命令をさらに含む、請求項17に記載のコンピュータプログラム。前記1つ又は複数のコンパイルノードを識別するための前記コンピュータプログラム命令が、コンパイルに最適化された1つ又は複数のノードを、前記階層型分散処理システムのトポロジにおけるその位置をもとにして選択するためのコンピュータプログラム命令をさらに含む、請求項17又は請求項18に記載のコンピュータプログラム。前記階層型分散処理システムは、並列コンピュータをさらに含み、前記並列コンピュータは、複数の計算ノードと、前記計算ノードをデータ通信のために結合する、ポイントツーポイントデータ通信用に最適化された第1のデータ通信ネットワークと、前記計算ノードがツリーとして組織化されるように前記計算ノードを結合するデータ通信リンクを含む、第2のデータ通信ネットワークとを含み、前記計算ノードの各々は、並列演算専用の独立した算術論理演算装置ALUを有する、請求項15乃至請求項19のいずれか1項に記載のコンピュータプログラム。本発明の目的は、階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品を提供することである。階層型分散処理システム用にソフトウェアをコンパイルするための方法、装置及び製品であって、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供することであって、コンパイルされるソフトウェアの少なくとも一部は、1つ又は複数の他のノードにより実行されるべきものである、提供することと、コンパイルノードによりソフトウェアをコンパイルすることと、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアを該コンパイルノードにより保持することと、分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが、選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択することと、選択されたノード又は選択されたノードの子孫によって実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信することと、選択されたノードにより、コンパイル済みソフトウェアを受信することと、コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定することと、コンパイル済みソフトウェアが選択されたノードのためのものである場合に、実行のために該ソフトウェアを選択されたノードにより保持することと、コンパイル済みソフトウェアが子孫のうちの1つのためのものである場合に、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信すること、とを含む、方法、装置及び製品。本発明の上記並びに他の目的、特徴及び利点は、添付の図面に示されているような、以下の本発明の例示的な実施形態のより具体的な説明から明らかになり、図中、同様の参照符号は、本発明の例示的な実施形態の同様の部分を一般的に表す。本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための例示的な方法、装置及び製品を、添付の図面を最初に図1から参照して説明する。図1は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするための例示的な分散コンピューティングシステムを図示する。図1のシステムは、並列コンピュータ100と、このコンピュータのためのデータストレージデバイス118の形の不揮発性メモリと、このコンピュータのためのプリンタ120の形の出力デバイスと、このコンピュータのためのコンピュータ端末122の形の入力/出力デバイスとを含む。図1の例における並列コンピュータ100は、複数の計算ノード102を含む。計算ノード102は、JointTestActionGroupJTAGネットワーク104、コレクティブ操作用に最適化されたグローバルコンバイニングネットワーク106、及びポイントツーポイント操作用に最適化されたトーラスネットワーク108を含む幾つかの独立した通信ネットワークによって、データ通信のために結合されている。グローバルコンバイニングネットワーク106は、計算ノードをツリーとして組織化するように計算ノードに接続されたデータ通信リンクを含む、データ通信ネットワークである。各データ通信ネットワークは、計算ノード102間のデータ通信リンクにより実装される。データ通信リンクは、並列コンピュータの計算ノード間の並列操作のためのデータ通信を提供する。計算ノード間のリンクは、典型的には2つの独立した指向性データ通信経路を用いて実装される、双方向リンクである。さらに、並列コンピュータの計算ノード102は、並列コンピュータ100上でのコレクティブ並列操作のために、少なくとも1つの、計算ノードの操作グループ132に組織化される。計算ノードの操作グループは、コレクティブ並列操作がそれに対して実行される計算ノードの集合である。コレクティブ操作は、操作グループの計算ノード間のデータ通信により実装される。コレクティブ操作は、操作グループの全ての計算ノードが関与するような機能である。コレクティブ操作は、計算ノードの操作グループの全ての計算ノードによって同時に、即ちほぼ同時刻に実行されるメッセージパッシングコンピュータプログラム命令である、操作である。このような操作グループは、並列コンピュータ100内の全ての計算ノードを含む場合もあり、又は全計算ノードの部分集合を含む場合もある。コレクティブ操作は、ポイントツーポイント操作を中核にして構築されるbuiltaround場合が多い。コレクティブ操作では、1つの操作グループ内の全計算ノード上の全プロセスが、一致した引数で同じコレクティブ操作を呼び出すことを必要とする。broadcastは、操作グループの計算ノード間でデータを移動させるためのコレクティブ操作の一例である。reduce操作は、操作グループの計算ノード間に分散されたデータに対して算術関数又は論理関数を実行するコレクティブ操作の一例である。操作グループは、例えばMPIコミュニケータとして実装することができる。MPIは、従来技術の並列通信ライブラリであるメッセージパッシングインターフェースのことを指し、並列コンピュータ上でのデータ通信のためのコンピュータプログラム命令のモジュールである。本発明の実施形態によるシステムと共に用いるように改良することができる従来技術の並列通信ライブラリの例には、MPI及び並列仮想マシンPVMライブラリが含まれる。PVMは、テネシー大学、オークリッジ国立研究所及びエモリー大学により開発された。MPIは、MPI標準を定義し、保守する多数の機関の代表者によるオープングループであるMPIフォーラムによって公表されている。本稿の記述時におけるMPIは、分散メモリ型並列コンピュータ上で並列プログラムを実行する計算ノード間の通信におけるデファクトスタンダードである。本明細書は説明を簡単にするためにMPI用語を用いることがあるが、MPIをそのまま使用することは、本発明の要件又は限定ではない。幾つかのコレクティブ操作は、操作グループ内の特定の計算ノード上で実行される単一の発信又は受信プロセスを有する。例えば、broadcast型コレクティブ操作の場合、データを他の全ての計算ノードに配信する計算ノード上のプロセスは、発信プロセスである。例えばgather操作の場合、他の計算ノードから全てのデータを受信した計算ノード上のプロセスは、受信プロセスである。そのような発信又は受信プロセスが実行される計算ノードのことを論理根logicalrootと呼ぶ。ほとんどのコレクティブ操作は、broadcast、gather、scatter及びreduceの4つの基本操作の変形又は組み合わせである。これらのコレクティブ操作のためのインターフェースは、MPIフォーラムが公表したMPI標準の中で定義されている。しかしながら、コレクティブ操作を実行するためのアルゴリズムはMPI標準の中では定められていない。broadcast操作の場合、全てのプロセスは、そのバッファ内容が送信されることになる同じ根プロセスを指定する。根以外の全てのプロセスは、受信バッファを指定する。操作後、全てのバッファは根プロセスからのメッセージを収容していることになる。scatter操作の場合、論理根は根上のデータをセグメントに分割し、操作グループ内の各計算ノードに異なるセグメントを配信する。scatter操作においては、全てのプロセスは典型的には同じreceivecountを指定する。送信sendの引数は、そのバッファが実際にsendcountN個の所与のデータ型の要素を収容している根プロセスにとってのみ有効であり、ここでNは所与の計算ノードグループ内のプロセスの数である。送信バッファは分割され、全プロセス論理根上のプロセスを含むに散布される。各計算ノードにはランクと呼ばれる逐次的な識別子が割り当てられている。操作後、根は、各プロセスにランクの昇順でsendcountデータ要素を送信済みとなる。ランク0は、送信バッファから第1のsendcountデータ要素を受信する。ランク1は、送信バッファから第2のsendcountデータ要素を受信し、以下同様である。gather操作は多対一のコレクティブ操作であり、scatter操作の説明とは全く逆である。即ち、gatherは、あるデータ型の要素が、ランク付けされた計算ノードから根ノードの受信バッファに集められる、多対一のコレクティブ操作である。reduce操作もまた多対一のコレクティブ操作であり、2つのデータ要素に対して実行される算術関数又は論理関数を含む。全てのプロセスは、同じcount、及び同じ算術関数又は論理関数を指定する。リダクション後には、全てのプロセスは、計算ノードの送信バッファから根プロセスにcountデータ要素を送信済みとなる。リダクション操作においては、対応する送信バッファ位置からのデータ要素が算術演算又は論理演算によって1対ずつ組み合わされ、根プロセスの受信バッファ内に単一の対応する要素を与える。特定用途向けのリダクション操作は、実行時に定義することができる。並列通信ライブラリは、事前定義された操作をサポートすることができる。例えばMPIは、以下の事前定義リダクション操作を提供する。MPI_MAX最大値MPI_MIN最小値MPI_SUM和MPI_PROD積MPI_LAND論理積MPI_BANDビット演算の積MPI_LOR論理和MPI_BORビット演算の和MPI_LXOR排他的論理和MPI_BXORビット演算の排他的論理和計算ノードに加えて、並列コンピュータ100は、グローバルコンバイニングネットワーク106を通じて計算ノード102に結合された入力/出力I/Oノード110、114を含む。並列コンピュータ100内の計算ノードは、処理セットに分割され、1つの処理セット内の各々の計算ノードは、データ通信のために同一のI/Oノードに接続されるようになっている。したがって、各々の処理セットは、1つのI/Oノードと計算ノード102の部分集合とから構成される。システム全体における計算ノードの数とI/Oノードの数との比率は、典型的には並列コンピュータのハードウェア構成に依存する。例えば、幾つかの構成では、各処理セットは、8つの計算ノード及び1つのI/Oノードから構成することができる。他の幾つかの構成では、各処理セットは、64個の計算ノード及び1つのI/Oノードから構成することができる。しかしながらそのような例は説明のためのものに過ぎず、限定のためのものではない。各I/Oノードは、その処理セットの計算ノード102とI/Oデバイスのセットとの間のI/Oサービスを提供する。図1の例では、I/Oノード110、114は、高速イーサネットを用いて実装されたローカルエリアネットワークLAN130を通じて、データ通信のためにI/Oデバイス118、120、122に接続される。図1の並列コンピュータ100はまた、ネットワークの1つ104を通じて計算ノードに結合されるサービスノード116を含む。サービスノード116は、計算ノードの構成の管理、計算ノードへのプログラムのロード、計算ノード上でのプログラム実行の開始、計算ノード上のプログラム操作の結果の取り出しなど、複数の計算ノードに共通のサービスを提供する。サービスノード116は、サービスアプリケーション124を実行し、コンピュータ端末122上で実行されるサービスアプリケーションインターフェース126を通じてユーザ128と通信する。図1の例では、計算ノードの1つに、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる自動化計算機のモジュールである階層型分散コンパイラ155がインストールされている。階層型分散コンパイラ155は、コンパイルノードによりソフトウェアをコンパイルし、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイルノードにより保持し、分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するための、コンピュータプログラム命令を含む。図1の他の計算ノード102の各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの1つのためのものである場合には、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。図1に図示された例示的なシステムを構成するノード、ネットワーク及びI/Oデバイスの配置は説明のためのものに過ぎず、本発明を限定するためのものではない。本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるデータ処理システムは、当業者が想到するような図1に示されていない付加的なノード、ネットワーク、デバイス及びアーキテクチャを含むことができる。図1の例では並列コンピュータ100は16個の計算ノード102を含んでいるが、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができる並列コンピュータは任意の数の計算ノードを含むことができることに読者は気づくであろう。イーサネット及びJTAGに加えて、このようなデータ処理システムにおけるネットワークは、例えばTCP転送制御プロトコル、IPインターネットプロトコル、及び当業者が想到するようなその他のプロトコルを含む、多数のデータ通信プロトコルをサポートすることができる。本発明の種々の実施形態は、図1に図示されたものに加えて、様々なハードウェアプラットフォーム上で実装することができる。本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることは、一般に、複数の計算ノードを含む並列コンピュータ上に実装することができる。実際、そのようなコンピュータは、そのような計算ノードを何千と含むことができる。各計算ノードはそれ自体が、1つ又は複数のコンピュータプロセッサ又は処理コアと、それ自体のコンピュータメモリと、それ自体の入力/出力アダプタとから成る一種のコンピュータである。従って、更なる説明のために、図2は、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる並列コンピュータにおいて有用な、例示的な計算ノードのブロック図を示す。図2の計算ノード152は、1つ又は複数の処理コア164及びランダムアクセスメモリRAM156を含む。処理コア164は高速メモリバス154を通じてRAM156に接続され、かつ、バスアダプタ194及び拡張バス168を通じて、計算ノード152の他のコンポーネントに接続される。RAM156内には、並列アルゴリズムを用いてユーザレベルの並列データ処理を行うコンピュータプログラム命令のモジュールである、アプリケーションプログラム158が格納される。RAM156内には、ポイントツーポイント操作並びにコレクティブ操作を含む計算ノード間の並列通信を行うコンピュータプログラム命令のライブラリである、メッセージングモジュール160もまた格納される。アプリケーションプログラム158は、メッセージングモジュール160内のソフトウェアルーチンを呼び出すことにより、コレクティブ操作を実行する。本発明の実施形態によるシステムで使用するための並列通信ルーチンのライブラリは、白紙の状態から、Cプログラミング言語などの従来のプログラミング言語を用い、かつ、従来のプログラミング方法を用いて、2つの独立したデータ通信ネットワーク上のノード間でデータを送信及び受信する並列通信ルーチンを記述することで開発することができる。代替的に、既存の従来のライブラリを、本発明の実施形態に従って動作するように改良することができる。従来の並列通信ライブラリの例には、メッセージパッシングインターフェースMPIライブラリ及び並列仮想マシンPVMライブラリが含まれる。RAM内には、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる自動計算機のモジュールである階層型分散コンパイラ155もまた格納される。階層型分散コンパイラ155は、コンパイルノードによりソフトウェアをコンパイルし、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイルノードにより保持し、分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するための、コンピュータプログラム命令を含む。並列コンピュータ内の他の計算ノードの各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの1つのためのものである場合には、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。RAM156には、アプリケーションプログラムが計算ノードの他のリソースにアクセスするためのコンピュータプログラム命令及びルーチンのモジュールである、オペレーティングシステム162もまた格納される。並列コンピュータの計算ノード内のアプリケーションプログラム及び並列通信ライブラリは、ユーザログイン及びセキュリティの問題なしに単一の実行スレッドを実行するのが一般的であるが、それは、そのスレッドがそのノードの全てのリソースへの完全なアクセスを許可されているからである。従って、オペレーティングシステムが並列コンピュータ上の計算ノード上で行うタスクの量及び複雑度は、多数のスレッドが同時に実行される直列コンピュータ上でのオペレーティングシステムのタスクよりも小さく、複雑度が低い。さらに、図2の計算ノード152上にはビデオI/Oが存在せず、このことがオペレーティングシステムに課される要求を減らす別の要因となっている。従って、このオペレーティングシステムは汎用コンピュータのオペレーティングシステムに比べて非常に軽い、いわば簡易版pareddownversionであってもよく、又は特定の並列コンピュータ上での操作専用に開発されたオペレーティングシステムであってもよい。計算ノードでの使用のために有用に改良され、簡略化することができるオペレーティングシステムには、UNIX商標、Linux商標、MicrosoftXP商標、AIX商標、IBMのi5/OS商標、及び当業者が想到するような他のオペレーティングシステムが含まれる。図2の例示的な計算ノード152は、並列コンピュータの他のノードとのデータ通信を実装するための幾つかの通信アダプタ172、176、180、188を含む。そのようなデータ通信は、シリアルに、RS-232接続を通じて、ユニバーサルシリアルバスUSBのような外部バスを通じて、IPネットワークのようなデータ通信ネットワークを通じて、及び当業者が想到するような他の方式で行うことができる。通信アダプタは、これを通じて1つのコンピュータが別のコンピュータに直接又はネットワークを通じてデータ通信を送信する、データ通信のハードウェアレベルを実装する。本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするためのシステムにおいて有用な通信アダプタの例には、有線通信のためのモデム、有線ネットワーク通信のためのイーサネットIEEE802.3アダプタ、及び無線ネットワーク通信のための802.11bアダプタが含まれる。図2の例におけるデータ通信アダプタは、例示的な計算ノード152をデータ通信のためにギガビットイーサネット174に結合するギガビットイーサネットアダプタ172を含む。ギガビットイーサネットは、IEEE802.3規格で定義されたネットワーク転送規格であり、1秒間に10億ビット1ギガビットのデータ転送速度を提供する。ギガビットイーサネットは、マルチモード光ファイバケーブル、シングルモード光ファイバケーブル又は非シールド撚り対線を介して動作する、イーサネットの一種である。図2の例におけるデータ通信アダプタは、例示的な計算ノード152をデータ通信のためにJTAGマスタ回路178に結合するJTAGスレーブ回路176を含む。JTAGは、バウンダリスキャンを用いたプリント回路基板の試験に使用されるテストアクセスポートのための、StandardTestAccessPortandBoundary-ScanArchitectureという名称のIEEE1149.1規格に用いられる通称である。JTAGは広汎に採用されているため、現時点では、バウンダリスキャンはJTAGとほぼ同義になっている。JTAGはプリント回路基板に使用されるだけでなく、集積回路にバウンダリスキャンを行うためにも使用され、また埋込みシステムをデバッグする機構としても有用であり、システムへの使いやすいバックドアを提供している。図2の例示的な計算ノードは、これらの3つの全てであり得る。即ち、この計算ノードは、典型的には、プリント回路基板に装着された1つ又は複数の集積回路を含み、且つ、それ自体のプロセッサ、それ自体のメモリ、及びそれ自体のI/O能力を有する埋込みシステムとして実装することができる。JTAGスレーブ176を通じたJTAGバウンダリスキャンにより、計算ノード152内のプロセッサレジスタ及びメモリを、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用するように効率的に構成することができる。図2の例におけるデータ通信アダプタは、ポイントツーポイントメッセージパッシング操作に最適な、例示的な計算ノード152を、例えば3次元トーラス又はメッシュとして構成されたネットワークのようなネットワーク108にデータ通信のために結合する、ポイントツーポイントアダプタ180を含む。ポイントツーポイントアダプタ180は、3つの通信軸x、y、及びz上の6つの双方向リンクx181、-x182、y183、-y184、z185、及び-z186を通じて、6方向のデータ通信を提供する。図2の例におけるデータ通信アダプタは、例示的な計算ノード152を、コレクティブメッセージパッシング操作に最適な、例えば二分木として構成されたグローバルコンバイニングネットワーク上のネットワーク106にデータ通信のために結合する、グローバルコンバイニングネットワークアダプタ188を含む。グローバルコンバイニングネットワークアダプタ188は、子ノード190への2つのリンクと、親ノード192への1つリンクの、3つの双方向リンクを通じたデータ通信を提供する。例示的な計算ノード152は、2つの算術論理演算装置ALUを含む。ALU166は、各処理コア164の構成部品であり、それとは別のALU170は、もっぱらグローバルコンバイニングネットワークアダプタ188がreduce操作の算術関数及び論理関数を行う際に用いるための使用専用である。並列通信ライブラリ160内のリダクションルーチンのコンピュータプログラム命令は、算術関数又は論理関数のための命令を命令レジスタ169内にラッチすることができる。リダクション操作の算術関数又は論理関数が例えば和又は論理和である場合には、グローバルコンバイニングネットワークアダプタ188は、プロセッサ164内のALU166を使用することにより、又は典型的にはより高速な専用ALU170を使用することにより、算術演算又は論理演算を実行することができる。図2の例示的な計算ノード152は、直接メモリアクセスのためのコンピュータハードウェアである直接メモリアクセスDMAコントローラ195と、直接メモリアクセスのためのコンピュータソフトウェアであるDMAエンジン197とを含む。図2のDMAエンジン197は、典型的には、DMAコントローラ195のコンピュータメモリ内に格納される。直接メモリアクセスは、中央処理装置164の動作負荷が少ない、計算ノードのメモリの読み出し及び書き込みを含む。DMA転送は、本質的には、1つの位置から別の位置へ、典型的には1つの計算ノードから別の計算ノードへ、メモリブロックをコピーすることである。CPUは、DMA転送を開始することはできるが、CPUがDMA転送を実行することはない。更なる説明のために、図3は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なポイントツーポイントアダプタ180を図示する。ポイントツーポイントアダプタ180は、ポイントツーポイント操作用に最適化されたデータ通信ネットワーク、即ち、計算ノードを3次元のトーラス又はメッシュに組織化するネットワークでの使用のために設計されている。図3の例におけるポイントツーポイントアダプタ180は、x軸に沿った4つの単方向のデータ通信リンクを通じた、-x方向182の隣接ノードへの/からのデータ通信及びx方向181の隣接ノードへの/からのデータ通信を提供する。ポイントツーポイントアダプタ180はまた、y軸に沿った4つの単方向のデータ通信リンクを通じた、-y方向184の隣接ノードへの/からのデータ通信及びy方向183の隣接ノードへの/からのデータ通信を提供する。図3におけるポイントツーポイントアダプタ180はまた、z軸に沿った4つの単方向のデータ通信リンクを通じた、-z方向186の隣接ノードへの/からのデータ通信及びz方向185の隣接ノードへの/からのデータ通信を提供する。更なる説明のために、図4は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、例示的なグローバルコンバイニングネットワークアダプタ188を図示する。グローバルコンバイニングネットワークアダプタ188は、コレクティブ操作用に最適化されたネットワーク、即ち、並列コンピュータの計算ノードを二分木に組織化するネットワークでの使用のために設計されている。図4の例におけるグローバルコンバイニングネットワークアダプタ188は、4つの単方向のデータ通信リンク190を通じて、2つの子ノードへの/からのデータ通信を提供する。グローバルコンバイニングネットワークアダプタ188はまた、2つの単方向のデータ通信リンク190を通じて、1つの親ノードへの/からのデータ通信も提供する。更なる説明のために、図5は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、ポイントツーポイント操作のために最適化された例示的なデータ通信ネットワーク108を図示する線図を示す。図5の例では、点は並列コンピュータの計算ノード102を表し、点の間の点線は計算ノード間のデータ通信リンク103を表す。データ通信リンクは、例えば図3に図示されたものと同様の、3つの軸x、y、及びz上を行き来する6つの方向x181、-x182、y183、-y184、z185、及び-z186上のデータ通信リンクを備えた、ポイントツーポイントデータ通信アダプタによって実装される。リンク及び計算ノードは、このポイントツーポイント操作用に最適化されたデータ通信ネットワークにより、3次元メッシュ105に組織化される。メッシュ105は、メッシュ105内のメッシュ105の対向する側にある最も外側の計算ノードを接続するラップアラウンドリンクを各軸上に有する。これらのラップアラウンドリンクは、トーラス107の一部を形成する。トーラス内の各計算ノードは、x、y、zの座標の組により一意に指定される、トーラス内での位置を有する。分かりやすくするために、y及びz方向におけるラップアラウンドリンクは省略されているが、x方向に描かれたラップアラウンドリンクと同様の方式で構成されることに読者は気づくであろう。説明を分かりやすくするために、図5のデータ通信ネットワークは27個の計算ノードのみで描かれているが、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用されるポイントツーポイント操作用に最適化されたデータ通信ネットワークは、ごく少数の計算ノードを含むことも、又は何千もの計算ノードを含むこともできることを読者は認識するであろう。更なる説明のために、図6は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルすることができるシステムにおいて有用な、コレクティブ操作のために最適化された例示的なデータ通信ネットワーク106を図示する線図を示す。図6の例示的なデータ通信ネットワークは、計算ノードをツリーとして組織化するように計算ノードに接続されたデータ通信リンクを含む。図6の例では、点は並列コンピュータの計算ノード102を表し、点の間の点線103は計算ノード間のデータ通信リンクを表す。データ通信リンクは、例えば図4に図示されたものと同様のグローバルコンバイニングネットワークアダプタによって実装され、各ノードは、一部の例外を除き、典型的には、2つの子ノードへの/からのデータ通信リンク、及び1つの親ノードへの/からのデータ通信を提供する。二分木106内のノードは、物理根ノード202、分岐ノード204及び葉ノード206として特徴付けることができる。根ノード202は2つの子を有し、親をもたない。葉ノード206は各々1つの親を有するが、子をもたない。分岐ノード204は各々、1つの親と2つの子の両方を有する。このようにして、リンク及び計算ノードは、コレクティブ操作用に最適化されたこのデータ通信ネットワークにより、二分木106に組織化される。説明をわかりやすくするために、図6のデータ通信ネットワークは31個の計算ノードのみで描かれているが、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするために使用されるコレクティブ操作用に最適化されたデータ通信ネットワークは、ごく少数の計算ノードを含むことも、又は何千もの計算ノードを含むこともできることを読者は認識するであろう。図6の例では、ツリー内の各ノードに、ランク250と呼ばれるユニット識別子が割り当てられる。ノードのランクは、ツリーネットワークにおけるポイントツーポイント操作及びコレクティブ操作の両方での使用のために、ツリーネットワーク内でのノードの位置を一意に識別する。この例におけるランクは、根ノード202に割り当てられた0で始まる整数として割り当てられ、ツリーの第2層内の第1のノードに1が割り当てられ、ツリーの第2層内の第2のノードに2が割り当てられ、ツリーの第3層内の第1のノードに3が割り当てられ、ツリーの第3層内の第2のノードに4が割り当てられ、以下同様である。説明を分かりやすくするために、ここではツリーの最初の3つの層のランクのみを示すが、ツリーネットワーク内の全ての計算ノードに一意のランクが割り当てられる。更なる説明のために、図7は、分散コンピューティングシステムがハイブリッド型コンピューティング環境として実装された、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルするための更なる例示的な分散コンピューティングシステムを示す。ハイブリッド型コンピューティング環境は、この用語が本明細書において用いられる場合、メモリ内に格納されプロセッサ上で実行されるコンピュータプログラム命令の実行という形でデータ処理が実装されるように、コンピュータメモリに動作可能に結合されたコンピュータプロセッサを含むという点で、コンピューティング環境である。図7のハイブリッド型コンピューティング環境600は、小規模な独立したハイブリッド型コンピューティング環境を表す1つの計算ノード603を含み、これは、他の同様の計算ノード602と共に使用されたときに、一緒に大規模なハイブリッド型コンピューティング環境を形成する。図7の例示的な計算ノード603は、データ通信ネットワークを通じて計算ノード603に接続されたサービスノード上で実行されるサービスアプリケーションから、初期プログラムのロードなどのような管理サービスを受け入れて、主ユーザレベルコンピュータプログラムの実行を行うことができる。例示的な計算ノードはまた、データ通信のために、計算ノードがデータストレージ及び他のI/O機能へのアクセスを得ることができるようにする1つ又は複数の入力/出力I/Oノードにも結合することができる。I/Oノード及びサービスノードは、高速イーサネットを用いて実装されるローカルエリアネットワークLAN、又は当業者が想到するような別のファブリックタイプのデータ通信ファブリックを通じて、例示的な計算ノード603、より大規模なハイブリッド型コンピューティング環境内の他の計算ノード602、及びI/Oデバイスに接続することができる。計算ノード603を含むより大規模なハイブリッド型コンピューティング環境において有用なI/Oデバイスは、データ記憶装置の形でコンピューティング環境のための不揮発性メモリを、プリンタの形でハイブリッド型コンピューティング環境のための出力デバイスを、及び、ハイブリッド型コンピューティング環境内の計算ノードを構成し、計算ノードによる主ユーザレベルコンピュータプログラム命令の実行を開始するためのインターフェースをユーザに提供するサービスアプリケーションインターフェースを実行するコンピュータ端末の形でユーザI/Oデバイスを、含むことができる。図7の例における計算ノード603は、他の計算ノード602などの他のハイブリッド型コンピューティング環境と組み合わせてより大規模なハイブリッド型コンピューティング環境を形成することができるハイブリッド型コンピューティング環境600のより詳細な説明を助けるために、拡大図で示されている。図7の例における計算ノード603は、ホストコンピュータ610を含む。ホストコンピュータ610は、計算ノードと、ハイブリッド型コンピューティング環境においていずれかの特定の計算ノードの外部にある他のコンポーネントとの間のインターフェース機能を行うホストコンピュータであるという意味でホストである。即ち、初期ブート手続き、電源投入セルフテスト、基本的なI/O機能、サービスノードからのユーザレベルプログラムロードの受け入れ、等を実行するのは、ホストコンピュータである。図7の例におけるホストコンピュータ610は、高速メモリバス653を通じて、ランダムアクセスメモリRAM642であるコンピュータメモリに動作可能に結合された、コンピュータプロセッサ652を含む。各ホストコンピュータ610内のプロセッサ652は、ホストコンピュータアーキテクチャを定める一組のアーキテクチャレジスタ654を有する。図7の計算ノード603はまた、1つ又は複数のアクセラレータ604、605を含む。アクセラレータ604は、各アクセラレータが、ホストコンピュータアーキテクチャに対して、特定のクラスのコンピューティング機能の実行速度に関して最適化されたアクセラレータアーキテクチャを有するという点で、アクセラレータである。そのように加速されるコンピューティング機能には、例えば、ベクトル処理、浮動小数点数演算、及び当業者が想到するような他の機能が含まれる。図7の例における各アクセラレータ604、605は、高速メモリバス651を通じてRAM640に動作可能に結合されたコンピュータプロセッサ648を含む。ホストコンピュータ及びアクセラレータ604、605のRAM640、642内に、オペレーティングシステム645が格納される。本発明の実施形態によるハイブリッド型コンピューティング環境のホストコンピュータ及びアクセラレータにおいて有用なオペレーティングシステムには、UNIX商標、Linux商標、MicrosoftXP商標、MicrosoftVista商標、MicrosoftNT商標、AIX商標、IBMのi5/OS商標、及び当業者であれば想到するような他のオペレーティングシステムが含まれる。ホストコンピュータ内のオペレーティングシステムがアクセラレータ上で用いられるオペレーティングシステムと同じものである必要はない。各々のアクセラレータ604、605のプロセッサ648は、アクセラレータアーキテクチャを定める一組のアーキテクチャレジスタ650を有する。各アクセラレータのプロセッサ648のアーキテクチャレジスタ650は、ホストコンピュータ610内のプロセッサ652のアーキテクチャレジスタ654とは異なる。アーキテクチャレジスタは、各アーキテクチャ上で実行されるコンピュータプログラム命令によってアクセス可能なレジスタであり、命令レジスタ、プログラムカウンタ、メモリインデックスレジスタ、スタックポインタなどのレジスタである。アーキテクチャが異なるので、ホストコンピュータとアクセラレータとが同じ命令セットをサポートすることは、可能ではあるが一般的ではないであろう。従って、アクセラレータ604のプロセッサ648上で実行されるためにコンパイルされたコンピュータプログラム命令がホストコンピュータ610のプロセッサ652上でネイティブに実行されることは一般に予測しがたく、逆もまた同様である。しかも、ホストコンピュータとアクセラレータとの間のハードウェアアーキテクチャの典型的な違いから、仮にアクセラレータがホストの命令セットをサポートしていたとしても、ホストコンピュータ610のプロセッサ652上で実行されるためにコンパイルされたコンピュータプログラム命令がアクセラレータ604のプロセッサ648上でネイティブに実行されることは一般に予測しがたい。図7の例におけるアクセラレータアーキテクチャは、ホストコンピュータアーキテクチャに対して、特定のクラスのコンピュータ機能の実行速度に関して最適化されている。即ち、アクセラレータが最適化されている1つ又は複数の機能に関して、これらの機能の実行は、それらがホストコンピュータのプロセッサ上で実行された場合に比べて、アクセラレータ上での方がより速く進行するであろう。ハイブリッド型コンピューティング環境の例にはデータ処理システムが含まれ、データ処理システムは、各々がx86プロセッサを有する1つ又は複数のホストコンピュータと、そのアーキテクチャレジスタがPowerPC命令セットを実装するアクセラレータとを含む。ホストコンピュータ内のx86プロセッサ上での実行用にコンパイルされたコンピュータプログラム命令は、アクセラレータ内のPowerPCプロセッサによってネイティブに実行することはできない。本明細書において説明される例示的なハイブリッド型コンピューティング環境のうちの幾つかは、ロスアラモス国立研究所LANLRoadrunnerプロジェクトニューメキシコ州の州鳥にちなみ名づけられたにおいて開発された、LANLスーパーコンピュータアーキテクチャ、即ち、世界で初めて毎秒千兆回の浮動小数点数演算であるペタフロップを達成したことで有名なスーパーコンピュータアーキテクチャに基づくことを、読者はさらに認識するであろう。LANLスーパーコンピュータアーキテクチャは、IBMCellプロセッサを有する多数のアクセラレータに結合された、デュアルコアAMDOpteronプロセッサを有する多数のホストコンピュータを含むが、OpteronプロセッサとCellプロセッサとは、異なるアーキテクチャを有している。図7の例では、ホストコンピュータ610及びアクセラレータ604、605は、システムレベルメッセージングパッシングモジュールSLMPM646及び少なくとも2つの異なるファブリックタイプの2つのデータ通信ファブリック628、630により、データ通信のために互いに適合されている。データ通信ファブリック628、630は、ホストコンピュータとアクセラレータとの間を結合するデータ通信を実装する、データ通信ハードウェア及びソフトウェアの構成である。データ通信ファブリックタイプの例には、周辺装置相互接続PCI、PCIexpressPCIe、イーサネット、Infiniband、ファイバチャネル、小型コンピュータシステムインターフェースSCSI、ExternalSerialAdvancedTechnologyAttachmenteSATA、ユニバーサルシリアルバスUSB、及び当業者が想到するようなその他のものが含まれる。図7の例では、ホストコンピュータ610及びアクセラレータ604、605は、PCIe通信アダプタ660を通じたPCIeファブリック630、及びイーサネット通信アダプタ661を通じたイーサネットファブリック628により、データ通信のために互いに適合されている。PCIe及びイーサネットの使用は説明のためのものであり、本発明を限定するためのものではない。本発明の実施形態によるハイブリッド型コンピューティング環境は、例えばPCI、Infiniband、ファイバチャネル、SCSI、eSATA、USBなど、その他のファブリックタイプのファブリックを含むことができることを当業者である読者は直ちに認識するであろう。SLMPM646は、ホストコンピュータ610とアクセラレータ604、605との間でメッセージに基づくデータ通信を行うために、アプリケーションプログラミングインターフェースAPIをユーザレベルアプリケーションに露出する、モジュール又はコンピュータプログラム命令のライブラリである。本発明の実施形態によりSLMPMとして使用するために改良することができる、メッセージに基づくデータ通信ライブラリの例には、以下のものが含まれる。2つのバージョンがある業界標準インターフェースであり、Supercomputing1994で初めて提示され、主要な標準化団体による認可を受けていない、メッセージパッシングインターフェース又はMPI、LANLスーパーコンピュータのDataCommunicationandSynchronizationインターフェースDACS、分散型マルチスレッド処理に関するIEEE標準である、POSIXThreadsライブラリPthreads、並列プログラミングに関する業界認定仕様である、OpenMulti-ProcessingインターフェースOpenMP、及び当業者が想到するその他のライブラリ。この例では、ホストコンピュータ610とアクセラレータ604との間のメッセージに基づくデータ通信をサポートするために、ホストコンピュータ610とアクセラレータ604の両方がSLMPM646を有しているので、データ通信のためのいずれの結合でも、その両側でメッセージに基づくデータ通信の発信と受信の両方ができるようになっている。この例におけるSLMPM646は、ホストコンピュータ610とアクセラレータ604との間の複数のデータ通信モードについてデータ通信パフォーマンスをモニタし、あるデータ通信モードに従ってホストコンピュータからアクセラレータにデータを伝送することを求める要求668を受信し、要求されたデータ通信モードに従ってデータを伝送するか否かを判定し、データが要求されたデータ通信モードに従って伝送されない場合には、別のデータ通信モードを選択し、選択されたデータ通信モードに従ってデータを伝送することにより、一般にハイブリッド型コンピューティング環境600におけるデータ処理のために動作する。図7の例では、モニタされるパフォーマンスは、計算ノード603の動作中にホストコンピュータ610のRAM642内のSLMPM646により格納される、モニタされるパフォーマンスデータ674として示されている。データ通信モードは、データ通信ファブリックタイプ、データ通信リンク、及びデータ通信プロトコル678を指定する。データ通信リンク656は、ホストコンピュータとアクセラレータとの間のデータ通信接続である。図7の例において、ホストコンピュータ610とアクセラレータ604との間のリンク656は、PCIe接続638、又はイーサネットネットワーク606を通じたイーサネット接続631、632を含むことができる。図7の例におけるホストコンピュータ610とアクセラレータ605との間のリンク656は、PCIe接続636、又はイーサネットネットワーク606を通じたイーサネット接続631、634を含むことができる。図7の例では、ホストコンピュータとアクセラレータとの間には、各ファブリックタイプにつき、1つのリンクのみが図示されているが、当業者であれば、各ファブリックタイプにつき、任意の数のリンクが存在し得ることを直ちに認識するであろう。データ通信プロトコルは、ホストコンピュータ610からアクセラレータ604に情報を送信するのに必要とされるデータ表現、信号送信、認証及びエラー検出に関する標準規則の組である。図7の例では、SLMPM646は、ホストコンピュータ610とアクセラレータとの間のデータ通信のために、幾つかあるプロトコル678の中から1つを選択することができる。そのようなプロトコル678の例には、送信操作及び受信操作681を用いて実行される共有メモリ転送SMT680、並びに、PUT操作及びGET操作683を用いて実行される直接メモリアクセスDMA682が含まれる。共有メモリ転送は、ホストコンピュータとアクセラレータとの間のデータを、その目的のために割り当てられた共有メモリ空間658の中へと渡して、いつでもただ1つのデータインスタンスだけがメモリ内に存在するようにするデータ通信プロトコルである。図7のホストコンピュータ610とアクセラレータ604との間の例示的な共有メモリ転送として、以下の例を考える。アプリケーション669は、SMTプロトコル680に従ったホストコンピュータ610からアクセラレータ604へのデータ676の伝送を要求する668。このような要求668は、そのような共有メモリに割り当てられたメモリアドレスを含むことができる。この例では、共有メモリセグメント658はアクセラレータ604上のメモリ位置に図示されているが、共有メモリセグメントは、アクセラレータ604上、ホストコンピュータ610上、若しくはホストコンピュータ及びアクセラレータの両方の上に配置することができ、又は、ホスト及びアクセラレータが必要に応じてそのセグメントにアクセスできる限りは、ローカルの計算ノード603から完全に離れて配置することさえできることを読者は認識するであろう。共有メモリ転送を行うために、ホストコンピュータ610上のSLMPM646は、TCPプロトコルにおける手続きと同様のハンドシェーキング手続きにより、アクセラレータ604上で実行されるSLMPM646とのデータ通信接続を確立する。次いで、SLMPM646は、ヘッダ及びペイロードデータが含まれたメッセージ670を作成し、特定のファブリックの特定のリンクのためのメッセージ伝送キューにこのメッセージを挿入する。メッセージを作成する際に、SLMPMは、メッセージのヘッダ内に、アクセラレータの識別情報及びアクセラレータ上で実行されるプロセスの識別情報を挿入する。SLMPMはまた、要求668に由来するメモリアドレスを、ヘッダ内又はペイロードデータの一部としてメッセージ内に挿入する。SLMPMはまた、伝送されるデータ676を、メッセージのペイロードデータの一部としてメッセージ670の中に挿入する。次いで、メッセージは、通信アダプタ660、661により、ファブリック628、630を介して、アクセラレータ604上で実行されるSLMPMに伝送され、ここでSLMPMは、伝送されたデータ676であるペイロードデータをメッセージ内のメモリアドレスに従いRAM640内の共有メモリ空間658に格納する。直接メモリアクセスDMAは、コンピュータプロセッサ652にかかる動作負荷を抑えて、ホストコンピュータとアクセラレータとの間でデータを渡すためのデータ通信プロトコルである。DMA転送は、本質的には、1つの位置から別の位置への、典型的にはホストコンピュータからアクセラレータへの、又はその逆への、メモリブロックのコピーを行うものである。ホストコンピュータ及びアクセラレータの一方又は両方が、直接メモリアクセスのためのハードウェア及びソフトウェアの集約である、DMAコントローラ及びDMAエンジンを含むことができる。直接メモリアクセスには、それぞれのプロセッサにかかる動作負荷が低減された、アクセラレータ及びホストコンピュータのメモリの読み出し及び書き込みが含まれる。アクセラレータのDMAエンジンは、例えば、DMAの目的に割り当てられたメモリに対する書き込み又は読み出しを行うことができ、その間、アクセラレータのプロセッサは、コンピュータプログラム命令を実行し、又はそれ以外の動作を続行する。即ち、コンピュータプロセッサは、DMA転送を実行する命令を発行することができるが、転送を行うのはプロセッサではなく、DMAエンジンである。図7の例では、アクセラレータ604のみがDMAコントローラ685及びDMAエンジン684を含み、一方、ホストコンピュータはそれらを含まない。この実施形態では、ホストコンピュータ上のプロセッサ652が、SMTプロトコルに従ってアクセラレータに遠隔GET操作を実施するように命令するメッセージをアクセラレータに送信することにより、ホストからアクセラレータへのデータのDMA転送を開始する。アクセラレータ604がDMAエンジンを含む唯一のデバイスである図7の例において図示された構成は、説明のみのためのものであり、限定のためのものではない。さらに他の実施形態においては、ホストコンピュータのみがDMAコントローラ及びDMAエンジンを含む一方で、多くの実施形態においては、ホストコンピュータとアクセラレータの両方がDMAコントローラ及びDMAエンジンを含むことができることを、当業者は直ちに認識するであろう。図7のハイブリッド型コンピューティング環境においてDMAプロトコルを実装するために、一部のメモリ領域は、DMAエンジンによるアクセスのために割り当てられる。そのようなメモリの割り当ては、他のアクセラレータ若しくはホストコンピュータとは独立して行うこともでき、又は、別のアクセラレータ若しくはホストコンピュータによって開始され、それらと協働して完了させることもできる。例えばSMAプロトコルに従って割り当てられる共有メモリ領域を、DMAエンジンが利用できるようにされたメモリ領域とすることができる。即ち、図7のハイブリッド型コンピューティング環境600におけるDMAデータ通信の初期セットアップ及び実装は、少なくともその一部を、共有メモリ転送、又はDMAエンジンに関して帯域外の別の帯域外データ通信プロトコルによって行うことができる。DMA転送を実装するためのメモリの割り当ては、比較的待ち時間が長いが、ひとたび割り当てられると、DMAプロトコルは、他の多くのデータ通信プロトコルに比べて必要とするプロセッサ使用率が低い、高帯域幅のデータ通信を提供する。直接PUT操作は、発信元originデバイス上のDMAエンジンから発信先targetデバイス上のDMAエンジンにデータを伝送するモードの1つである。直接PUT操作は、発信先デバイスのプロセッサがほとんど関与することなく発信先デバイス上にデータを伝送及び格納することを可能にする。直接PUT操作において発信先デバイスのプロセッサからの関与を最小限にすることを実現するために、発信元のDMAエンジンは、発信先デバイス上に格納されるべきデータを、発信先デバイス上のストレージ位置の特定の識別情報と共に転送する。発信元DMAが発信先デバイス上の特定のストレージ位置を知っているのは、発信先デバイス上でデータを格納するための特定のストレージ位置が、予め発信先DMAエンジンから発信元のDMAエンジンに提供されているからである。rGETと称されることもある遠隔GET操作は、発信元デバイス上のDMAエンジンから発信先デバイス上のDMAエンジンにデータを伝送する別のモードである。遠隔GET操作は、発信元デバイスのプロセッサがほとんど関与することなく発信先デバイス上にデータを伝送及び格納することを可能にする。遠隔GET操作において発信元デバイスのプロセッサからの関与を最小限にすることを実現するために、発信元のDMAエンジンは、発信先のDMAエンジンがアクセスできるストレージ位置にデータを格納し、伝送する準備ができたデータのストレージ位置及びサイズを、発信先のDMAエンジンに直接又は共有メモリ伝送によって帯域外で通知し、発信先のDMAエンジンは、ストレージ位置からデータを取り出す。複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることは、データ通信リンク656に関するメッセージ伝送要求キュー662-665の中の要求668の数をモニタすることを含むことができる。図7の例では、各メッセージ伝送要求キュー662-665は、1つの特定のデータ通信リンク656に関連付けられる。各キュー662-665は、キューに関連付けられたデータ通信リンク656に沿って通信アダプタ660、661が伝送すべきデータ676を含むメッセージ670に関するエントリを含む。複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることは、共有メモリ空間658の使用率をモニタすることを含むこともできる。図7の例では、共有メモリ空間658は、アクセラレータのRAM640に割り当てられている。使用率とは、発信先デバイスに送信するためのデータが格納されているが、まだ発信先デバイスにより読み出されていない又は受信されていない、割り当てられた共有メモリ空間の割合であり、割り当てられた共有メモリへの書き込み及びそこからの読み出しを追跡することによってモニタされる。図7のハイブリッド型コンピューティング環境においては、共有メモリ空間を含め実際にはあらゆるメモリが有限である。従って、共有メモリ空間の空きに限りがあるせいで、アプリケーションプログラム669の実行中に共有メモリ空間658が一杯になってしまうことがあり、その結果、ホストコンピュータ610からアクセラレータへのデータの伝送が遅くなったり、さらには停止したりすることさえあり得る。本発明の幾つかの実施形態において、図7のハイブリッド型コンピューティング環境600は、アプリケーションプログラム669が2つ又はそれ以上のインスタンスを並列コンピューティング環境内の2つ又はそれ以上のホストコンピュータ610上で実行するような並列コンピューティング環境として動作するように、構成することができる。そのような実施形態において、データ通信モード横断的にデータ通信パフォーマンスをモニタすることはまた、並列コンピューティング環境内の2つ又はそれ以上のホストコンピュータ上で実行されるアプリケーションプログラム669の複数のインスタンスにわたってデータ通信パフォーマンス情報674を集約することを含むことができる。集約されたパフォーマンス情報674を用いて、データ通信モードごとの平均通信待ち時間、特定のファブリックタイプのデータ通信リンクにおける平均要求数、並列コンピューティング環境内の複数のホストコンピュータ及びアクセラレータ間での平均共有メモリ使用率、及び当業者が想到するようなその他の尺度を計算することができる。SLMPMは、そのような尺度の任意の組み合わせを、データを要求されたデータ通信モードに従って伝送すべきか否かを判定すること、及び、データを要求されたデータ通信モードに従って伝送すべきでない場合にデータを伝送するための別のデータ通信モードを選択することの両方のために用いることができる。図7のSLMPM646は、ホストコンピュータ610上のアプリケーションプログラム669から、あるデータ通信モードに従ってホストコンピュータ610からアクセラレータ604にデータ676を伝送することを求める要求668を受信する。そのようなデータ676は、アクセラレータ604による実行用にコンパイルされたコンピュータプログラム命令、例えばアクセラレータアプリケーションプログラムの実行可能ファイル、アクセラレータアプリケーションプログラムのためのワークピースデータ、アクセラレータアプリケーションプログラムの実行に必要な、ライブラリ、データベース、ドライバなどのファイル、等を含むことができる。あるデータ通信モードに従ってデータ676を伝送する要求668を受信することは、特定のファブリックタイプによりデータを伝送する要求を受信すること、特定のデータ通信リンクを通じてホストコンピュータからアクセラレータにデータを伝送する要求を受信すること、又はあるプロトコルに従ってホストコンピュータからアクセラレータにデータを伝送する要求を受信することを含むことができる。あるデータ通信モードに従ってデータ676を伝送する要求668は、プロトコル、ファブリックタイプ及びリンクによりデータ通信モードを明示で指定する呼び出しである、APIを介したSLMPM646へのユーザレベルのアプリケーション関数呼び出しとして、実装することができる。関数呼び出しとして実装された要求は、関数呼び出し自体の動作に従ってプロトコルを指定することができる。例えばdacs_put関数呼び出しは、DACSライブラリとして実装されたSLMPMにより露出されるAPIを介して、DMAPUT操作のデフォルトモードでデータを伝送する呼び出しを表すことができる。そのような呼び出しは、呼び出しアプリケーション及びその呼び出しアプリケーションを記述したプログラマの観点から見ると、デフォルトモード、即ち、明示のAPI呼び出しに関連付けられたデフォルトモードであることをプログラマが知っているモードに従ってデータを伝送することを求める、SLMPMライブラリに対する要求を表している。呼び出された関数、この例ではdacs_putは、要求されたデータ通信モード、即ち呼び出された関数のデフォルトモードに従ってデータを伝送するか否かについてそれ自身の判定を行うように、複数のファブリックタイプ、プロトコル及びリンクを伴う実施形態において符号化することができる。更なる一例において、例えばdacs_send命令は、DACSライブラリとして実装されたSLMPMにより露出されるAPIを介して、SMTsend操作のデフォルトモードでデータを伝送することを求める呼び出しを表すことができ、この場合も、dacs_sendは、要求されたデータ通信モードに従ってデータを伝送するか否かについてそれ自身の判定を行うように、複数のファブリックタイプ、プロトコル、及びリンクを伴う実施形態において符号化される。関数呼び出しにおける特定のアクセラレータの識別は、ファブリックタイプを有効に指定することができる。そのような関数呼び出しは、呼び出しパラメータとして、特定のアクセラレータの識別情報を含むことができる。例えばPCIeIDの使用による特定のアクセラレータの識別は、PCIファブリックタイプを有効に指定する。別の同様の例において、イーサネットアダプタのメディアアクセス制御MACアドレスの使用による特定のアクセラレータの識別は、イーサネットファブリックタイプを有効に指定する。ホスト上で実行されるアプリケーションからの関数呼び出しのアクセラレータIDを、ファブリックタイプを指定するように実装する代わりに、関数呼び出しは、呼び出しのパラメータとして特定のアクセラレータのグローバル一意識別情報のみを含みことができ、それにより、ファブリックタイプではなく、ホストコンピュータからアクセラレータへのリンクのみが指定される。この場合には、呼び出された関数は、特定のプロトコルでの使用のためのデフォルトファブリックタイプを実装することができる。SLMPMにおいて呼び出された関数が、例えばDMAプロトコルでの使用のためのデフォルトファブリックタイプとしてPCIeを有するように構成されており、且つSLMPMが、DMAプロトコルであるDMAPUT又はDMA遠隔GET操作に従ってアクセラレータ604にデータを伝送する要求を受信した場合には、呼び出された関数は、DMAのためのデフォルトファブリックタイプであるPCIeファブリックタイプを明示的に指定する。各ファブリックタイプの1つのリンクのみが単一のホストコンピュータを単一のアクセラレータに適合させるようなハイブリッド型コンピューティング環境においては、関数呼び出しのパラメータ内での特定のアクセラレータの識別は、リンクもまた有効に指定し得る。各ファブリックタイプの1つより多くのリンクがホストコンピュータとアクセラレータとを適合させているようなハイブリッド型コンピューティング環境、例えば2つのPCIeリンクがホストコンピュータ610をアクセラレータ604に接続しているような場合においては、呼び出されたSLMPM関数は、アクセラレータの識別情報により指定されるファブリックタイプについての関数呼び出しのパラメータにおいて識別された、アクセラレータのためのデフォルトリンクを実装することができる。図7の例におけるSLMPM646はまた、モニタされたパフォーマンス674に基づいて、要求されたデータ通信モードに従ってデータ676を伝送するか否かを判定する。要求されたデータ通信モードに従ってデータ676を伝送するか否かを判定することは、要求されたファブリックタイプによりデータを伝送するか否かを判定すること、要求されたデータ通信リンクを通じてデータを伝送するか否かを判定すること、又は要求されたプロトコルに従ってデータを伝送するか否かを判定することを含むことができる。データ通信モード横断的にデータ通信パフォーマンスをモニタすることが、あるデータ通信リンク656についてのメッセージ伝送要求キュー662-665の中の要求の数をモニタすることを含むような本発明の実施形態によるハイブリッド型コンピューティング環境においては、データ676を要求されたデータ通信モードに従って伝送するか否かを判定することは、メッセージ伝送要求キューの中の要求の数が、所定の閾値を超えるか否かを判定することにより行うことができる。複数のデータ通信モードについてデータ通信パフォーマンスをモニタすることが共有メモリ空間の使用率をモニタすることを含むような本発明の実施形態によるハイブリッド型コンピューティング環境においては、データ676を要求されたデータ通信モードに従って伝送するか否かを判定することは、共有メモリ空間の使用率が所定の閾値を超えるか否かを判定することにより行うことができる。データを要求されたデータ通信モードに従って伝送すべきでない場合には、SLMPM646は、モニタされたパフォーマンスに基づいて、データを伝送するための別のデータ通信モードを選択し、選択されたデータ通信モードに従ってデータ676を伝送する。データを伝送するための別のデータ通信モードを選択することは、モニタされたパフォーマンスに基づいて、データを伝送するための別のデータ通信ファブリックタイプを選択すること、データがそれを通じて伝送されるデータ通信リンクを選択すること、及び別のデータ通信プロトコルを選択することを含むことができる。一例として、要求されたデータ通信モードが、PCIeファブリック630のリンク638を通じた、アクセラレータ604への、PUT操作を用いたDMA伝送である場合を考える。モニタされたデータパフォーマンス674が、リンク638に関連付けられた伝送メッセージ要求キュー662の中の要求の数が所定の閾値を超えていることを示した場合には、SLMPMは、別のファブリックタイプであるイーサネットファブリック628、及び、てデータ676がそれを通じて伝送されるリンク631、632を選択することができる。また、モニタされたパフォーマンス674が、共有メモリ空間658の現在の使用率は所定の閾値を下回っているが、一方、キュー662の中の未処理のDMA伝送の数は所定の閾値を超えていることを示した場合を考える。このような場合には、SLMPM646は、データ676を伝送するために、共有メモリ転送など、別のプロトコルを選択することもできる。SLMPMにより、データ676を伝送するための別のデータ通信モードを選択することはまた、データ通信メッセージサイズ672に基づいて、データ通信プロトコル678を選択することを含むこともできる。データ通信メッセージサイズ672に基づいてデータ通信プロトコル678を選択することは、メッセージサイズが所定の閾値を超えているか否かを判定することにより行うことができる。大きなメッセージ670のDMA転送を行う際のプロセッサ使用率は、典型的には、同じサイズのメッセージの共有メモリ転送を行う際のプロセッサ使用率より低いので、大きめのメッセージ670のためには、DMAプロトコルが好ましいプロトコルであり得る。上述のように、SLMPMはまた、選択されたデータ通信モードに従ってデータを伝送する。選択されたデータ通信モードに従ってデータを伝送することは、選択されたデータ通信ファブリックタイプによりデータを伝送すること、選択されたデータ通信リンクを通じてデータを伝送すること、又は選択されたプロトコルに従ってデータを伝送することを含む。SLMPM646は、デバイスドライバを介して、選択されたデータ通信モードのデータ通信ファブリックタイプのための通信アダプタに選択されたデータ通信モードのプロトコルに従ってメッセージ670を伝送することを命令することにより、選択されたデータ通信モードによるデータ伝送を行うことができ、メッセージは、メッセージヘッダ内にアクセラレータの識別情報を含み、メッセージペイロード内に伝送されるデータ676を含む。図7の例では、1つの計算ノード上のホストコンピュータ610及びアクセラレータ604の両方に、階層型分散コンパイラ155がインストールされている。完全を期して、階層型分散コンパイラ155は、ホストコンピュータとアクセラレータの両方の中に図示されている。実際には、当業者が想到するように、本発明の実施形態による階層型分散コンパイラ155は、ホストコンピュータ若しくは1つ若しくは複数のアクセラレータのどちらかに、又は、ホストコンピュータ及び1つ若しくは複数のアクセラレータの両方に、インストールすることができる。図7の階層型分散コンパイラ155は、本発明の実施形態により階層型分散処理システム用にソフトウェアをコンパイルすることができる、自動計算機のモジュールである。階層型分散コンパイラ155は、コンパイルノードによりソフトウェアをコンパイルし、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイルノードにより保持し、分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択し、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信するためのコンピュータプログラム命令を含む。図7の他の計算ノード602の各々はまた、コンパイル済みソフトウェアを受信し、コンパイル済みソフトウェアがそのノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定し、コンパイル済みソフトウェアがそのノードのためのものである場合には、実行のために該ソフトウェアを保持し、コンパイル済みソフトウェアが子孫のうちの1つのためのものである場合は、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択し、選択された別のノードにコンパイル済みソフトウェアを送信することができる。更なる説明のために、図8は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする例示的な方法を示す。コンパイルとは、しばしば高水準プログラミング言語である、あるコンピュータ言語で記述されたソースコードを、別の、典型的には実行可能コンピュータ言語である、典型的には二進形式を有し、オブジェクトコードと呼ばれることもあるコンピュータ言語に変換するプロセスである。本発明の実施形態によるコンパイルは、典型的には、本発明の実施形態による計算ノード上にインストールされた階層型分散コンパイラによって行われる。そのような階層型分散コンパイラは、典型的には、多数の異なる種類のターゲットコンピュータ上での使用のためにソフトウェアをコンパイルすることが可能である。従って、階層型分散コンパイラは、コンパイルされていないソースソフトウェアの部分ごとにコンパイルして、異種のコンピュータ上での使用のためのターゲットオブジェクトコードにすることができる。階層型分散処理システムは、多くの方式で実装することができ、例えばツリー構造で実装することができる。そのようなツリー構造は、k分木、即ち任意の次数の木、二分木、又は当業者が想到するような他の任意の形式のツリー構造とすることができる。代替的に、本発明による階層型分散処理システムは、当業者が想到するような、ツリー構造とは見なされない他の形式で実装することができる。図8の方法は、上述の例示的な分散コンピューティングシステムのような分散コンピューティングシステム、即ち図1-図6の例示的な並列コンピュータ、図7の例示的なハイブリッド型コンピューティング環境、及び当業者が想到するようなその他の分散コンピューティングシステムにおいて実行することができる。図8の方法は、1つ又は複数のコンパイルノードを識別すること802を含む。上述のように、1つ又は複数のコンパイルノードは、あるコンピュータ言語、典型的には高水準プログラミング言語で書かれたソースコードを、別の、典型的には二進形式を有し、オブジェクトコードと呼ばれることもある、多くは実行可能コンピュータ言語に変換する。コンパイルノードは、コンパイルノードそれ自体の上で実行されるソフトウェアの部分をコンパイルするとともに、階層型分散ネットワーク内の別のノード上で実行される他の部分もコンパイルする。図8の方法により1つ又は複数のコンパイルノードを識別すること802は、コンパイルに関して計算的に最適化された1つ又は複数のノードを選択することにより、行うことができる。コンパイルに関して計算的に最適化された1つ又は複数のノードを選択することは、ノードを、そのI/O能力、処理能力、及びメモリ能力に基づいて識別することを含むことができる。これらの能力の特定のバランスが、コンパイルにとって最適であることが多い。そのような最適なバランスは、異なる種類のソフトウェアのコンパイルごとに異なるものである場合があり、従って、コンパイルに関して計算的に最適化された1つ又は複数のノードを選択することは、コンパイルされる特定のソフトウェアに応じて1つ又は複数のノードを選択することを含むことができる。図8の方法により1つ又は複数のコンパイルノードを識別すること802はまた、コンパイルに最適化された1つ又は複数のノードを、階層型分散処理システムのトポロジにおけるその位置をもとにして選択することにより行うことができる。ツリー構造の階層型データ処理システムでは、例えば、根ノードであるノード、又は多数の子孫を有するノードは、ノードがその子孫のためにソフトウェアをコンパイルするのに最適化されるように、トポロジ内に位置し得る。本明細書において用いられる用語としての子孫は、階層型データ処理システムにおいてコンパイルノードより下の段に位置し、且つ、その階層型処理システムにおいて、そのコンパイルノードを含む分岐上に位置するノードである。図8の方法はまた、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供すること804を含み、ここで、コンパイルされるソフトウェアの少なくとも一部は、1つ又は複数の他のノードにより実行されるべきものである。1つ又は複数のコンパイルノードにコンパイルされるソフトウェアを提供すること804は、コンパイルされるソフトウェアをメッセージに入れてコンパイルノードに送信すること、コンパイルノードにソフトウェアをダウンロードすること、システム管理者がコンパイルノードにソフトウェアをインストールすること、又は、当業者が想到するような、1つ又は複数のコンパイルノードにコンパイルされるソフトウェアを提供するためのその他のいずれかの手法により、実行することができる。図8の方法はまた、コンパイルノードによりソフトウェアをコンパイルすること806を含む。コンパイルノードによりソフトウェアをコンパイルすること806は、ソフトウェアの、コンパイルノード上で実行されるべき部分を識別し、コンパイルされていないソフトウェアのコンピュータ言語で記述されたコードを、コンパイルノード上で実行するための実行可能コンピュータ言語に変換することにより、行うことができる。コンパイルノードによりソフトウェアをコンパイルすること806は、ソフトウェアの、別のノード上で実行されるべき部分を識別し、別のノードのターゲット実行環境を識別し、コンパイルされていないソフトウェアのコンピュータ言語で記述されたソフトウェアを、別のノード上で実行するための実行可能コンピュータ言語に変換することにより、行うことができる。図8の方法はまた、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイルノードにより保持すること808を含む。コンパイルノード上で実行される任意のコンパイル済みソフトウェアをコンパイルノードにより保持すること808は、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアを実行用に格納することにより行うことができる。図8の方法はまた、分散処理システムの階層の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが、選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択すること810と、選択されたノード又は選択されたノードの子孫により実行されるコンパイル済みソフトウェアのみを、選択されたノードに送信すること812とを含む。任意のコンパイル済みソフトウェアが、選択されるノード又は選択されたノードの子孫のためのものであるか否かに基づいて、分散処理システムの階層の次の段の1つ又は複数のノードをコンパイルノードにより選択すること810は、階層型分散処理システムのトポロジ表現をトラバースして、コンパイル済みソフトウェアが実行されるべきノードの位置を識別し、コンパイル済みソフトウェアを実行するこれらのノードが存在する階層型データ処理システムの分岐を判定し、コンパイルノードの子ノードのどれが、その階層型データ処理システムの分岐上に存在するのかを識別することにより、行うことができる。選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること812は、選択されたノード又は選択されたノードの子孫により実行されるコンパイル済みソフトウェアの部分を含むメッセージを作成し、そのメッセージを選択されたノードに送信することにより、行うことができる。選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること812はまた、選択されたノードに、コンパイル済みソフトウェアを実行するためにコンパイル済みソフトウェアを該ノードにダウンロードするための位置を通知することにより、又は、当業者が想到するような、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信する812ための他のいずれかの方式により、行うことができる。選択されたノードは、コンパイル済みソフトウェアを実行する場合も、実行しない場合もある。即ち、コンパイル済みソフトウェアを、選択されたノードより下の段にあるノードが実行することがある。従って、更なる説明のために、図9は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルする別の例示的な方法を図示するフローチャートを示す。図9の方法は、1つ又は複数のコンパイルノードを識別すること802と、コンパイルされるソフトウェアを1つ又は複数のコンパイルノードに提供すること804であって、コンパイルされるソフトウェアの少なくとも一部は1つ又は複数の他のノードにより実行されるべきものである、提供することと、コンパイルノードによりソフトウェアをコンパイルすること806と、コンパイルノード上で実行されるべき任意のコンパイル済みソフトウェアをコンパイルノードにより保持すること808と、分散処理システムの階層構造の次の段の1つ又は複数のノードを、任意のコンパイル済みソフトウェアが選択されるノード又は選択されるノードの子孫のためのものであるか否かに基づいて、コンパイルノードにより選択すること810と、選択されたノード又は選択されたノードの子孫により実行されるべきコンパイル済みソフトウェアのみを選択されたノードに送信すること812と、を含むという点で、図8の方法に類似している。図9の方法は、階層型分散処理システム内でコンパイルノードより下にあるノードによって行われる付加的なステップを含む。図9の方法は、コンパイル済みソフトウェアを選択されたノードにより受信すること814を含む。コンパイル済みソフトウェアは、メッセージ内で受信することも、ダウンロードのためにコンパイルノードにより識別することも、又は当業者が想到するような他の手法で受信することもできる。図9の方法はまた、コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定すること816を含む。コンパイル済みソフトウェアが、選択されたノードのためのものであるか又はその子孫のうちの1つのためのものであるかを判定すること816は、コンパイル済みソフトウェアの特定の部分を実行するノードの識別情報をコンパイルノードから受信し、識別されたノードが選択されたノードであるか否か、又は識別されたノードがその子孫のうちの1つであるか否かを判定することにより、行うことができる。コンパイル済みソフトウェアが選択されたノードのためのものである場合には、図9の方法は、実行のためにソフトウェアを選択されたノードにより保持すること818を含む。実行のためにソフトウェアを選択されたノードにより保持すること818は、選択されたノード上で実行されるべき任意のコンパイル済みソフトウェアを実行のために格納することにより、行うことができる。コンパイル済みソフトウェアが子孫のうちの1つのためのものである場合には、図9の方法は、コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択すること820、及び、選択された別のノードにコンパイル済みソフトウェアを送信すること822を含む。コンパイル済みソフトウェアのための子孫に基づいて、階層型分散処理システムの次の段の別のノードを選択すること820は、階層型分散処理システムのトポロジ表現をトラバースして、コンパイル済みソフトウェアが実行されるべきノードの位置を識別し、コンパイル済みソフトウェアを実行するこれらのノードが存在する階層型データ処理システムの分岐を判定し、選択されたノードの子ノードのどれが、その階層型データ処理システムの分岐上に存在するのかを識別することにより、行うことができる。選択された別のノードにコンパイル済みソフトウェアを送信すること822は、選択された別のノード又は選択された別のノードの子孫により実行されるべきコンパイル済みソフトウェアの部分を含むメッセージを作成し、そのメッセージを選択された別のノードに送信することにより、行うことができる。選択された別のノードにコンパイル済みソフトウェアを送信すること822はまた、選択された別のノードに、コンパイル済みソフトウェアを実行するためにコンパイル済みソフトウェアを該ノードにダウンロードするための位置を通知することにより、又は、当業者が想到するような、選択された別のノードにコンパイル済みソフトウェアを送信する822ためのその他のいずれかの方式により、行うことができる。更なる説明のために、図10は、本発明の実施形態による階層型分散処理システム用にソフトウェアをコンパイルするためのシステムの例示的な使用事例のブロック図を示す。図10の例において、コンパイル用ラップトップ702は、コンパイルされていないソフトウェア722を有する。コンパイルされていないソフトウェア722は、コンピュータ704により実行されるソフトウェア部分724と、1つ又は複数のグラフィックスプロセッシングユニットGPU708により実行されるソフトウェア部分726及び728と、並列コンピュータ内の計算ノード712により実行されるソフトウェア部分728、730、732、734と、ハイブリッド型コンピューティング環境のフロントエンドノード714により実行されるソフトウェア部分736と、ハイブリッド型コンピューティングシステム内のホストコンピュータ718により実行されるソフトウェア部分738、740、及び742と、ハイブリッド型コンピューティング環境のアクセラレータ720により実行されるソフトウェア部分744、746、748、及び750とを有する。図10の例において、コンパイル用ラップトップ702は、コンピュータ704のためのソフトウェア部分724をコンパイルし、コンパイル済みソフトウェアのその部分を、実行のためにコンピュータ704に送信する。図10の例では、コンパイル用ラップトップ702はまた、特定のGPU708のためのソフトウェア部分726及び728をコンパイルし、コンパイル済みソフトウェアのそれらの部分をコンピュータ704に送信し、次にコンピュータ704が、コンパイル済みソフトウェアのその部分を、そのコンパイル済みソフトウェアのその部分を実行することになる特定のGPUに送信する。図10の例において、コンパイル用ラップトップ702は、並列コンピュータの特定の計算ノード712のためのソフトウェア部分728、730、732、及び734をコンパイルし、コンパイル済みソフトウェアのそれらの部分を並列コンピュータのI/Oノード710に送信し、このI/Oノード710が次に、コンパイル済みソフトウェアのそれらの部分を計算ノード712の根ノードに送信する。次いで、計算ノードの根ノードは、どの子ノードがコンパイル済みソフトウェアのその部分を実行することになる子孫を有するかを識別し、各々の子に、その子又はその子孫により実行されることになる部分のみを送信する。次いで、各々の子はこれらの部分を受信し、自分がその部分を実行するのか、それとも自分の子孫のうちの1つがその部分を実行することになるのかを判定し、その子孫のための部分のみを、子孫と同じ分岐上の子に送信する。このようにして、コンパイル済みソフトウェアの部分は、そのコンパイル済みソフトウェアを実行する特定の計算ノードまで、段から段へと送信されていく。図10の例において、コンパイル用ラップトップ702は、ハイブリッド型コンピューティング環境のフロントエンドノード714のためのソフトウェア部分736をコンパイルし、コンパイル済みソフトウェアのその部分を、実行のためにハイブリッド型コンピューティング環境のフロントエンドノード714に送信する。図10の例では、コンパイル用ラップトップ702はまた、特定のホストコンピュータ718のためのソフトウェア部分738、740、及び742をコンパイルし、コンパイル済みソフトウェアのそれらの部分をハイブリッド型コンピューティング環境のフロントエンドノード714に送信し、このフロントエンドノード714が次に、コンパイル済みソフトウェアのその部分を、コンパイル済みソフトウェアのその部分を実行することになる特定のホストコンピュータに送信する。図10の例では、コンパイル用ラップトップ702はまた、ホストコンピュータ718の特定のアクセラレータ720のためのソフトウェア部分744、746、748、及び750をコンパイルし、コンパイル済みソフトウェアのそれらの部分をハイブリッド型コンピューティング環境のフロントエンドノード714に送信し、このフロントエンドノード714が次に、コンパイル済みソフトウェアのその部分をこれらのアクセラレータのための特定のホストコンピュータに送信し、次にこのホストコンピュータが、コンパイル済みソフトウェアのその部分を、コンパイル済みソフトウェアのその部分を実行することになる特定のアクセラレータに送信する。上記の例において、階層型分散処理システム用にソフトウェアをコンパイルすることを、単一のコンパイルノードを用いて一般的に説明した。これは説明のためであり、限定のためのものではない。実際に、本発明の多くの実施形態において、1つより多くのノードが、本発明により階層型分散処理システム用にソフトウェアをコンパイルすることができる。当業者により認識されるように、本発明の態様は、システム、方法又はコンピュータプログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコード等を含む、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に回路、モジュール又はシステムと呼ぶことができる。さらに、本発明の態様は、媒体内に具体化されたコンピュータ使用可能プログラムコードを有する、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータプログラム製品の形を取ることができる。1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ可読ストレージ媒体のより具体的な例非網羅的なリストとして、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み出し専用メモリROM、消去可能なプログラム可能読み出し専用メモリEPROM又はフラッシュメモリ、光ファイバ、ポータブルコンパクトディスク読み出し専用メモリCD-ROM、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はそれらとの関連で使用するためのプログラムを収容し又は格納することが可能ないずれかの有形媒体とすることができる。コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部としてコンピュータ可読プログラムコードが組み入れられた伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光、又はそれらのいずれかの適切な組み合わせを含むがこれらに限定されない、種々の異なる形態のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連で使用するためのプログラムを通信し、伝搬し、又は搬送することができる、いずれかのコンピュータ可読媒体とすることができる。コンピュータ可読媒体上に具体化されたプログラムコードは、これらに限られるものではないが、無線、有線、光ファイバケーブル、RF等、又は上記のもののいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。本発明の態様の操作を実行するためのコンピュータプログラムコードは、Java、SmallTalk、C等のようなオブジェクト指向型プログラミング言語、及び、Cプログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラムコードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェアパッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。一番最後のシナリオにおいては、遠隔コンピュータは、ローカルエリアネットワークLAN若しくは広域ネットワークWANを含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある例えば、インターネットサービスプロバイダを用いたインターネットを通じて。本発明の態様は、上記において、本発明の実施形態による方法、装置システム、及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して説明されている。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータプログラム命令によって実施することができることが理解されるであろう。これらのコンピュータプログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、その結果、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、その結果、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で実行される一連の動作ステップによりコンピュータ実施のプロセスを生成し、その結果、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するプロセスをもたらすようにすることもできる。図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、特定の論理関数を実行するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記した機能は、図中に記された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、又はこれらのブロックは、ときには逆の順序で実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、及び、ブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェアをベースとするシステム、又は、専用ハードウェアとコンピュータ命令との組み合わせによって実行できることにも留意される。本明細書における説明は例示のみを目的としており、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許請求の範囲の文言によってのみ限定される。