(57)【要約】      （修正有）【課題】ハイブリッド・コンピューティング環境におけるデータ処理のための方法、装置、および製品を提供する。【解決手段】ハイブリッド・コンピューティング環境におけるデータ処理であって、このハイブリッド・コンピューティング環境が、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ１１０と、アクセレレータ・アーキテクチャ１０４を有するアクセレレータ・アーキテクチャとを含み、ホスト・コンピュータおよびアクセレレータが、システム・レベル・メッセージ伝達モジュールによって相互にデータ通信を行うように適合され、ホスト・コンピュータ上でホスト・アプリケーション・プロセス１６７が実行している。ホスト・アプリケーション・プロセスの命令で、アクセレレータ上で実行スレッドを開始するステップと、ホスト・アプリケーション・プロセスによってアクセレレータ上で実行スレッドを管理するステップ等を含む。【選択図】図１
2010061648.tif 000002
【特許請求の範囲】
【請求項１】
ハイブリッド・コンピューティング環境におけるデータ処理の方法であって、前記ハイブリッド・コンピューティング環境が、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、アクセレレータ・アーキテクチャを有するアクセレレータ・アーキテクチャと、を含み、前記アクセレレータ・アーキテクチャが、特定クラスのコンピューティング機能の実行速度について前記ホスト・コンピュータ・アーキテクチャに対して最適化され、前記ホスト・コンピュータおよび前記アクセレレータが、システム・レベル・メッセージ伝達モジュールによって相互にデータ通信を行うように適合され、前記ホスト・コンピュータ上でホスト・アプリケーション・プロセスが実行し、前記方法が、
前記ホスト・アプリケーション・プロセスの命令で、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上で実行スレッドを開始するステップと、
前記システム・レベル・メッセージ伝達モジュールによって、前記ホスト・アプリケーション・プロセスに対して、前記実行スレッドのためのプロセス識別子（「ＰＩＤ」）を戻すステップと、
前記実行スレッドが前記ホスト・コンピュータ上の実行スレッドであるかのように、前記ホスト・アプリケーション・プロセスによって前記アクセレレータ上で前記実行スレッドを管理する、ステップと、
を含む、方法。
【請求項２】
前記実行スレッドを管理するステップが、前記アプリケーション・プロセスの子プロセスとして前記実行スレッドを管理することを更に含む、請求項１に記載の方法。
【請求項３】
前記実行スレッドを管理するステップが、前記アクセレレータ上での実行スレッドの終了時に、前記システム・レベル・メッセージ伝達モジュールを介して、前記ホスト・アプリケーション・プロセスによって終了データを受信することを更に含む、請求項１に記載の方法。
【請求項４】
前記実行スレッドを管理するステップが、前記システム・レベル・メッセージ伝達モジュールを介して前記アクセレレータ上の前記実行スレッドを無効化することを更に含む、請求項１に記載の方法。
【請求項５】
前記システム・レベル・メッセージ伝達モジュールによって、前記ホスト・アプリケーション・プロセスの終了を検出することと、
前記終了時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドを無効化することと、
を更に含む、請求項１に記載の方法。
【請求項６】
前記ホスト・アプリケーション・プロセスの命令で、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したか否かを判定することを含めて、待機関数を実行するステップと、
前記待機関数のリターン時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したことを、前記ホスト・アプリケーション・プロセスに教えるステップと、
を更に含む、請求項１に記載の方法。    
【請求項７】
ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、アクセレレータ・アーキテクチャを有するアクセレレータ・アーキテクチャと、を含むハイブリッド・コンピューティング環境であって、前記アクセレレータ・アーキテクチャが、特定クラスのコンピューティング機能の実行速度について前記ホスト・コンピュータ・アーキテクチャに対して最適化され、前記ホスト・コンピュータおよび前記アクセレレータが、システム・レベル・メッセージ伝達モジュールによって相互にデータ通信を行うように適合され、前記ホスト・コンピュータ上でホスト・アプリケーション・プロセスが実行し、前記システム・レベル・メッセージ伝達モジュールがコンピュータ・プログラム命令を含み、この命令が、
前記ホスト・アプリケーション・プロセスの命令で、前記アクセレレータ上で実行スレッドを開始し、前記ホスト・アプリケーション・プロセスに対して、前記実行スレッドのためのプロセス識別子（「ＰＩＤ」）を戻すことができ、
前記ホスト・アプリケーション・プロセスがコンピュータ・プログラム命令を含み、この命令が、前記実行スレッドが前記ホスト・コンピュータ上の実行スレッドであるかのように、前記アクセレレータ上で前記実行スレッドを管理することができる、
ハイブリッド・コンピューティング環境。
【請求項８】
前記実行スレッドを管理することが、前記アプリケーション・プロセスの子プロセスとして前記実行スレッドを管理することを更に含む、請求項７に記載のハイブリッド・コンピューティング環境。
【請求項９】
前記実行スレッドを管理することが、前記アクセレレータ上での実行スレッドの終了時に、前記システム・レベル・メッセージ伝達モジュールを介して、前記ホスト・アプリケーション・プロセスによって終了データを受信することを更に含む、請求項７に記載のハイブリッド・コンピューティング環境。
【請求項１０】
前記実行スレッドを管理することが、前記システム・レベル・メッセージ伝達モジュールを介して前記アクセレレータ上の前記実行スレッドを無効化することを更に含む、請求項７に記載のハイブリッド・コンピューティング環境。
【請求項１１】
前記システム・レベル・メッセージ伝達モジュールによって、前記ホスト・アプリケーション・プロセスの終了を検出することができ、
前記終了時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドを無効化することができる、
コンピュータ・プログラム命令を更に含む、請求項７に記載のハイブリッド・コンピューティング環境。
【請求項１２】
前記ホスト・アプリケーション・プロセスの命令で、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したか否かを判定することを含めて、待機関数を実行することができ、
前記待機関数のリターン時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したことを、前記ホスト・アプリケーション・プロセスに教えることができる、
コンピュータ・プログラム命令を更に含む、請求項７に記載のハイブリッド・コンピューティング環境。
【請求項１３】
ハイブリッド・コンピューティング環境におけるデータ処理のためのコンピュータ・プログラムであって、前記ハイブリッド・コンピューティング環境が、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、アクセレレータ・アーキテクチャを有するアクセレレータ・アーキテクチャと、を含み、前記アクセレレータ・アーキテクチャが、特定クラスのコンピューティング機能の実行速度について前記ホスト・コンピュータ・アーキテクチャに対して最適化され、前記ホスト・コンピュータおよび前記アクセレレータが、システム・レベル・メッセージ伝達モジュールによって相互にデータ通信を行うように適合され、前記ホスト・コンピュータ上でホスト・アプリケーション・プロセスが実行し、前記コンピュータ・プログラムが、コンピュータ読み取り可能信号記録媒体上に配され、前記コンピュータ・プログラムがコンピュータ・プログラム命令を含み、この命令が、
前記ホスト・アプリケーション・プロセスの命令で、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上で実行スレッドを開始することができ、
前記システム・レベル・メッセージ伝達モジュールによって、前記ホスト・アプリケーション・プロセスに対して、前記実行スレッドのためのプロセス識別子（「ＰＩＤ」）を戻すことができ、
前記実行スレッドが前記ホスト・コンピュータ上の実行スレッドであるかのように、前記ホスト・アプリケーション・プロセスによって前記アクセレレータ上で前記実行スレッドを管理することができる、
コンピュータ・プログラム。
【請求項１４】
前記実行スレッドを管理することが、前記アプリケーション・プロセスの子プロセスとして前記実行スレッドを管理することを更に含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
前記実行スレッドを管理することが、前記アクセレレータ上での実行スレッドの終了時に、前記システム・レベル・メッセージ伝達モジュールを介して、前記ホスト・アプリケーション・プロセスによって終了データを受信することを更に含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１６】
前記実行スレッドを管理することが、前記システム・レベル・メッセージ伝達モジュールを介して前記アクセレレータ上の前記実行スレッドを無効化することを更に含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１７】
前記システム・レベル・メッセージ伝達モジュールによって、前記ホスト・アプリケーション・プロセスの終了を検出することができ、
前記終了時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドを無効化することができる、
コンピュータ・プログラム命令を更に含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１８】
前記ホスト・アプリケーション・プロセスの命令で、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したか否かを判定することを含めて、待機関数を実行することができ、
前記待機関数のリターン時に、前記システム・レベル・メッセージ伝達モジュールによって、前記アクセレレータ上の前記実行スレッドが終了したことを、前記ホスト・アプリケーション・プロセスに教えることができる、
コンピュータ・プログラム命令を更に含む、請求項１３に記載のコンピュータ・プログラム。    
【請求項１９】
前記信号記録媒体が記録可能媒体を含む、請求項１３に記載のコンピュータ・プログラム。    
【請求項２０】
前記信号記録媒体が伝送媒体を含む、請求項１３に記載のコンピュータ・プログラム。    
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野はデータ処理であり、更に具体的には、ハイブリッド・コンピューティング環境におけるデータ処理のための方法、装置、および製品に関する。
【背景技術】
【０００２】
１９４８年のＥＤＶＡＣコンピュータ・システムの開発は、コンピュータ時代の幕開けと言われることが多い。以来、コンピュータ・システムは極めて複雑なデバイスへと進化している。今日のコンピュータは、ＥＤＶＡＣ等の初期のシステムに比べ、はるかに洗練されている。コンピュータ・システムは通常、ハードウェアおよびソフトウェア・コンポーネント、アプリケーション・プログラム、オペレーティング・システム、プロセッサ、バス、メモリ、入出力（「Ｉ／Ｏ」）デバイス等の組み合わせを含む。半導体処理およびコンピュータ・アーキテクチャにおける進歩によってコンピュータの性能がますます高まるにつれて、いっそう洗練されたコンピュータ・ソフトウェアが生まれ、これがハードウェアの性能向上を利用するようになり、結果として、今日のコンピュータ・システムは、わずか数年前に比べてもはるかに強力なものとなっている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
今日のコンピュータ・システムの進歩により、今や、一部のコンピューティング環境は、異なるアーキテクチャのコア・コンポーネントを含み、それらが共に動作してデータ処理タスクを完了するまでになっている。かかるコンピューティング環境を、本明細書においては、「ハイブリッド」環境と記載する。これは、かかる環境が、異なるアーキテクチャを有するホスト・コンピュータおよびアクセレレータを含むことを示す。ハイブリッド・コンピューティング環境は、多くの非ハイブリッド・コンピューティング環境に比べ、データ処理においていっそう計算的に強力かつ効率的であるが、かかるハイブリッド・コンピューティング環境には、自動コンピューティング機械科学に対する大きな課題がある。
【課題を解決するための手段】
【０００４】
ハイブリッド・コンピューティング環境におけるデータ処理のための方法、装置、および製品。このハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータと、アクセレレータ・アーキテクチャを有するアクセレレータ・アーキテクチャと、を含み、アクセレレータ・アーキテクチャが、特定クラスのコンピューティング機能の実行速度についてホスト・コンピュータ・アーキテクチャに対して最適化され、ホスト・コンピュータおよびアクセレレータが、システム・レベル・メッセージ伝達モジュールによって相互にデータ通信を行うように適合され、ホスト・コンピュータ上でホスト・アプリケーション・プロセスが実行する。
【０００５】
本発明の実施形態に従った、かかるハイブリッド・コンピューティング環境におけるデータ処理は、ホスト・アプリケーション・プロセスの命令で、システム・レベル・メッセージ伝達モジュールによって、アクセレレータ上で実行スレッドを開始するステップと、システム・レベル・メッセージ伝達モジュールによって、ホスト・アプリケーション・プロセスに対して、実行スレッドのためのプロセス識別子（「ＰＩＤ」）を戻すステップと、実行スレッドがホスト・コンピュータ上の実行スレッドであるかのように、ホスト・アプリケーション・プロセスによってアクセレレータ上で実行スレッドを管理する、ステップと、を含む。
【０００６】
本発明の前述およびその他の目的、機構、および利点は、添付図面に示した本発明の例示的な実施形態の以下の具体的な説明から、明らかとなろう。図面において、同様の参照番号は概ね本発明の例示的な実施形態の同様の部分を表す。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施形態に従ったデータ処理に有用な一例のハイブリッド・コンピューティング環境の図である。
【図２】本発明の実施形態に従ったデータ処理に有用な例示的なハイブリッド・コンピューティング環境のブロック図を示す。
【図３】本発明の実施形態に従ったデータ処理に有用な更に別の例示的なハイブリッド・コンピューティング環境のブロック図を示す。
【図４】本発明の実施形態に従ったデータ処理に有用な更に別の例示的なハイブリッド・コンピューティング環境のブロック図を示す。
【図５】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の例示的な方法を示すフロー・チャートを示す。
【図６】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の別の例示的な方法を示すフロー・チャートを示す。
【図７】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の更に別の例示的な方法を示すフロー・チャートを示す。
【図８】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の更に別の例示的な方法を示すフロー・チャートを示す。
【図９】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の更に別の例示的な方法を示すフロー・チャートを示す。
【図１０】本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理の更に別の例示的な方法を示すフロー・チャートを示す。
【発明を実施するための形態】
【０００８】
本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための例示的な方法、装置、および製品について、図１からの添付図面を参照して説明する。図１は、本発明の実施形態に従ったデータ処理に有用な一例のハイブリッド・コンピューティング環境（１００）の図を示す。「ハイブリッド・コンピューティング環境」という言葉は、本明細書において用いる場合、コンピュータ・メモリに動作的に結合された複数のコンピュータ・プロセッサを含むコンピューティング環境であり、メモリに記憶されプロセッサ上で実行されるコンピュータ・プログラム命令の実行という形態でデータ処理を実施する。更に、図１の例におけるハイブリッド・コンピューティング環境（１００）は、アクセレレータ・アーキテクチャを有するアクセレレータと協同して動作するホスト・アーキテクチャを有する少なくとも１つのホスト・コンピュータを含み、この場合、ホスト・アーキテクチャおよびアクセレレータ・アーキテクチャは異なるアーキテクチャである。この例におけるホストおよびアクセレレータのアーキテクチャを特徴付けるのは、アーキテクチャ・レジスタ、すなわち、各アーキテクチャ上で実行するコンピュータ・プログラム命令によってアクセス可能なレジスタであり、例えば、命令レジスタ、プログラム・カウンタ、メモリ・インデックス・レジスタ、スタック・ポインタ等のレジスタである。すなわち、２つのアーキテクチャのアーキテクチャ・レジスタ間で、数、種類、構造、および関係は異なるので、ハイブリッド・コンピューティング環境のホスト・コンピュータ上で実行するためにコンパイルされたコンピュータ・プログラム命令は、通常、ハイブリッド・コンピューティング環境のいずれかの関連するアクセレレータによってネイティブに（natively）実行することはできない。
【０００９】
ハイブリッド・コンピューティング環境の例は、データ処理システムを含む。このシステムは、各々がｘ８６プロセッサを有する１つ以上のホスト・コンピュータと、アーキテクチャ・レジスタがＰｏｗｅｒＰＣ命令セットを実施するアクセレレータと、を含む。ホスト・コンピュータにおいてｘ８６プロセッサ上で実行するためにコンパイルされたコンピュータ・プログラム命令は、アクセレレータにおけるＰｏｗｅｒＰＣによってネイティブに実行することはできない。更に、本明細書において記載する例示的なハイブリッド・コンピューティング環境のいくつかは、ＬＡＮＬ（Los Alamos National Laboratory：ロスアラモス国立研究所）ロードランナー・プロジェクト（ニューメキシコの州の鳥から名付けられた）において開発されたＬＡＮＬスーパーコンピュータ・アーキテクチャに基づいたものであることは、読者には認められよう。このスーパーコンピュータ・アーキテクチャは、最初に「ペタフロップ（petaflop）」すなわち毎秒１０００兆回の浮動小数点演算を実行したことが有名である。ＬＡＮＬスーパーコンピュータ・アーキテクチャは、デュアル・コアＡＭＤ  Ｏｐｔｅｒｏｎプロセッサを有する多くのホスト・コンピュータを含み、これらは、異なるアーキテクチャを有するＩＢＭ  Ｃｅｌｌプロセッサ、Ｏｐｔｅｒｏｎプロセッサ、およびＣｅｌｌプロセッサを有する多くのアクセレレータに結合されている。
【００１０】
図１の例示的なハイブリッド・コンピューティング環境（１００）は、複数のコンピュータ・ノード（１０２）、Ｉ／Ｏノード（１０８）、およびサービス・ノード（１１２）を含む。コンピュータ・ノード（１０２）は、相互に、ならびにＩ／Ｏノード（１０８）およびサービス・ノード（１１２）とデータ通信を行うために、ネットワーク（１０１）を介して結合されている。データ通信ネットワーク（１０１）は、イーサネット、インターネット・プロトコル（「ＩＰ」）、ＰＣＩｅ、インフィニバンド（Infiniband）、ファイバ・チャネル、または当業者に想起されるような他のネットワークとして実施することができる。
【００１１】
図１の例示的なハイブリッド・コンピューティング環境（１００）において、コンピュータ・ノードは、主要なユーザ・レベルのコンピュータ・プログラム実行を実施し、サービス・ノード（１１２）上で実行しているサービス・アプリケーション（１２４）から初期プログラム・ロード等の管理サービスを受容し、Ｉ／Ｏノード（１０８）を介してデータ記憶装置（１１６）およびＩ／Ｏ機能（１１８、１２０）に対するアクセスを得る。図１の例では、Ｉ／Ｏノード（１１８）は、高速イーサネットまたは当業者に想起されるような別の構造（fabric）タイプのデータ通信構造を用いて実施されるローカル・エリア・ネットワーク（「ＬＡＮ」）（１１４）を介して、データ通信のために、Ｉ／Ｏデバイス（１１６、１１８、１２０）に接続されている。図１の例のハイブリッド・コンピューティング環境（１００）におけるＩ／Ｏデバイスは、データ記憶デバイス（１１６）の形態のコンピューティング環境用の不揮発性メモリ、プリンタ（１１８）の形態のハイブリッド・コンピューティング環境用の出力デバイス、およびコンピュータ端末（１２０）の形態のユーザ（１２６）Ｉ／Ｏを含む。コンピュータ端末（１２０）は、サービス・アプリケーション・インタフェース（１２２）を実行し、このインタフェース（１２２）は、ハイブリッド・コンピューティング環境においてコンピュータ・ノードを構成するため、および、このコンピュータ・ノードによる主要なユーザ・レベルのコンピュータ・プログラム命令の実行を開始するためのインタフェースをユーザに与える。
【００１２】
図１の例において、各コンピュータ・ノードは、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（１１０）と、アクセレレータ・アーキテクチャを有する１つ以上のアクセレレータ（１０４）と、を含む。ホスト・コンピュータ（１１０）は、コンピュータ・ノードと、いずれかの特定のコンピュータ・ノードの外部にあるハイブリッド・コンピューティング環境の他のコンポーネントとの間のインタフェース機能を実行するホスト・コンピュータであるという意味で、「ホスト」である。すなわち、これは、初期ブート手順、自己診断の起動、基本的なＩ／Ｏ機能を実行し、サービス・ノードからユーザ・レベルのプログラム・ロードを受容するホスト・コンピュータである。アクセレレータ（１０４）は、各アクセレレータが、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されたアクセレレータ・アーキテクチャを有するという点で、「アクセレレータ」である。かかる加速されたコンピューティング機能は、例えば、ベクトル処理、浮動小数点演算、および当業者に想起されるような他のものを含む。
【００１３】
図１の例のコンピュータ・ノードの各々がホスト・コンピュータおよびアクセレレータを含むので、各コンピュータ・ノードが、図１の大きなハイブリッド・コンピューティング環境（１００）内でのもっと小さな別個のハイブリッド・コンピューティング環境を表すことは、当業者には認められよう。すなわち、コンピュータ・ノード（１０２）の組み合わせがハイブリッド・コンピューティング環境（１００）を形成することができるだけでなく、個々の各コンピュータ・ノードも、もっと小さい別個のハイブリッド・コンピューティング環境として見ることができる。そして、図１の例のハイブリッド・コンピューティング環境（１００）は、各コンピュータ・ノードについて１つずつ、９個の別個の小さいハイブリッド・コンピューティング環境から成るものとして見ることができ、これらが共に図１のハイブリッド・コンピューティング環境（１００）を形成する。
【００１４】
図１の各コンピュータ・ノード（１０２）内で、ホスト・コンピュータ（１１０）および１つ以上のアクセレレータ（１０４）は、システム・レベル・メッセージ伝達モジュール（「ＳＬＭＰＭ：system level message passing module」）（１４６）によって、および、少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（１０６、１０７）によって相互にデータ通信を行うように適合されている。ＳＬＭＰＭ（１４６）は、ホスト・コンピュータ（１１０）とアクセレレータ（１０４）との間でメッセージ・ベースのデータ通信を行うためにユーザ・レベルのアプリケーションに対してアプリケーション・プログラミング・インタフェース（「ＡＰＩ」）を提示するコンピュータ・プログラム命令のモジュールまたはライブラリである。本発明の実施形態に従ってＳＬＭＰＭとして用いるために実施可能なメッセージ・ベースのデータ通信ライブラリの例は、以下を含む。
・メッセージ伝達インタフェースすなわち「ＭＰＩ」。最初にSupercomputing 1994で発表され、いかなる主要標準団体によっても認可されていない２つのバージョンの業界標準インタフェース。
・ＬＡＮＬスーパーコンピュータのデータ通信および同期インタフェース（「ＤＡＣＳ」）。
・ＰＯＳＩＸスレッド・ライブラリ（「Pthread」）、すなわち分散マルチスレッド処理のためのＩＥＥＥ標準。
・オープン・マルチプロセッシング・インタフェース（「OpenMP」）、すなわち並列プログラミングのための業界認定仕様。
・当業者に想起される他のライブラリ。
【００１５】
データ通信構造（１０６、１０７）は、ホスト・コンピュータとアクセレレータとの間でデータ通信結合を実施するデータ通信ハードウェアおよびソフトウェアの構成である。データ通信構造タイプの例は、当業者に想起されるような、周辺機器相互接続（「ＰＣＩ」）、ＰＣＩｅ（PCI express）、イーサネット、インフィニバンド、ファイバ・チャネル、ＳＣＳＩ（Small Computer System Interface）、ｅＳＡＴＡ（External Serial Advanced Technology Attachment）、ＵＳＢ（Universal Serial Bus）等を含む。
【００１６】
図１の例示的なハイブリッド・コンピューティング環境（１００）において、ホスト・コンピュータ（１１０）上で、ホスト・アプリケーション・プロセス（１６７）が実行している。本明細書において用いる場合、「プロセス」という言葉は、同時にいくつかのコンピュータ・プログラムを実行するように構成されたコンピュータ・アーキテクチャ上で順次実行されるコンピュータ・プログラムのインスタンスである。ホスト・アプリケーション・プロセスは、ホスト・コンピュータ（１１０）上で実行されているホスト・アプリケーションのインスタンスである。本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理を実行するには、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ（１０４）上で実行スレッド（１６９）を開始し、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に対して、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）を戻し、次いで、実行スレッド（１６９）がホスト・コンピュータ（１１０）上の実行スレッドであるかのように、ホスト・アプリケーション・プロセス（１６７）によってアクセレレータ（１０４）上で実行スレッド（１６９）を管理すれば良い。本明細書において用いる場合、実行スレッドという言葉は、コンピュータ・プログラム実行の基本的な単位を指す。スレッドは、コンピュータ・プログラムが、それ自体を２つ以上の同時にまたは擬似同時に動作するタスクに分割するための方法である。単一のプロセスは、同時に動作するいくつかのスレッドを有することができる。スレッドの各々は、イベントを待つこと、または、プロセスが継続実行を完了させる必要がない時間のかかるタスクを実行すること等、異なるタスクを実行する。スレッド実行が完了すると、すなわち実行スレッドによって行われたタスクが終了すると、スレッドは通常中断されるか破棄される。
【００１７】
図１に示すようなハイブリッド・コンピューティング環境（１００）を構成するコンピュータ・ノード、データ通信構造、ネットワーク、Ｉ／Ｏデバイス、サービス・ノード、Ｉ／Ｏノード等の配置は、単なる例示であり、本発明を限定するものではない。本発明の実施形態に従ったデータ処理を行うことができるハイブリッド・コンピューティング環境は、当業者に想起されるような、図１に示さない追加のノード、ネットワーク、デバイス、およびアーキテクチャを含むことができる。図１の例におけるハイブリッド・コンピューティング環境（１００）は、コンピュータ・ノード（１０２）を９個のみ含むが、本発明の実施形態に従ったハイブリッド・コンピューティング環境がいかなる数のコンピュータ・ノードも含み得ることを、読者は留意すべきである。多数のコンピュータ・ノードを有するハイブリッド・コンピューティング環境の一例として挙げたＬＡＮＬスーパーコンピュータは、この記述の時点で、１２，０００を超えるコンピュータ・ノードを含む。かかるハイブリッド・コンピューティング環境におけるネットワークおよびデータ通信構造は、例えばＴＣＰ（伝送制御プロトコル）、ＩＰ（インターネット・プロトコル）、および当業者に想起されるような他のものを含む多くのデータ通信プロトコルをサポートすることができる。図１に示すものに加えて、多種多様なハードウェア・プラットフォーム上で、本発明の様々な実施形態を実施することができる。
【００１８】
更に説明を行うため、図２は、本発明の実施形態に従ったデータ処理に有用な例示的なハイブリッド・コンピューティング環境（１００）のブロック図を示す。図２のハイブリッド・コンピューティング環境（１００）は、４つのコンピュータ・ノードを含む。図１のコンピュータ・ノードと同様、図２の例のコンピュータ・ノードの各々は、小さい別個のハイブリッド・コンピューティング環境となることができ、これらが共にもっと大きなハイブリッド・コンピューティング環境を構成する。図２の例において、かかるハイブリッド・コンピューティング環境（１００）のいっそう詳しい説明に役立てるため、１つのコンピュータ・ノード（１０３）を拡大図で示す。コンピュータ・ノード（１０３）の拡大図に示すように、図２の例のコンピュータ・ノード（１０２、１０３）の各々は、ホスト・コンピュータ（１１０）を含む。ホスト・コンピュータ（１１０）は、高速メモリ・バス（１５３）を介してコンピュータ・メモリすなわちランダム・アクセス・メモリ（「ＲＡＭ」）（１４２）に動作的に結合されたコンピュータ・プロセッサ（１５２）を含む。各ホスト・コンピュータ（１１０）のプロセッサ（１５２）は、ホスト・コンピュータ・アーキテクチャを規定する１組のアーキテクチャ・レジスタ（１５４）を有する。
【００１９】
また、コンピュータ・ノードの各々は、１つ以上のアクセレレータ（１０４、１０５）を含む。各アクセレレータ（１０４、１０５）は、高速メモリ・バス（１５１）を介してＲＡＭ（１４０）に動作的に結合されたコンピュータ・プロセッサ（１４８）を含む。ホスト・コンピュータおよびアクセレレータ（１０４、１０５）のＲＡＭ（１４０、１４２）には、オペレーティング・システム（１４５）が記憶されている。本発明の実施形態に従ったハイブリッド・コンピューティング環境のホスト・コンピュータおよびアクセレレータに有用なオペレーティング・システムは、ＵＮＩＸ（ＴＭ）、Ｌｉｎｕｘ（ＴＭ）、Microsoft XP（ＴＭ）、MicrosoftVista（ＴＭ）、Microsoft NT（ＴＭ）、ＡＩＸ（ＴＭ）、ＩＢＭ社のi５／ＯＳ（ＴＭ）、および当業者に想起される他のものを含む。ホスト・コンピュータにおけるオペレーティング・システムが、アクセレレータ上で用いられるオペレーティング・システムと同一である必要はない。
【００２０】
各アクセレレータ（１０４、１０５）のプロセッサ（１４８）は、アクセレレータ・アーキテクチャを規定する１組のアーキテクチャ・レジスタ（１５０）を有する。各アクセレレータのプロセッサ（１４８）のアーキテクチャ・レジスタ（１５０）は、ホスト・コンピュータ（１１０）におけるプロセッサ（１５２）のアーキテクチャ・レジスタ（１５４）とは異なる。異なるアーキテクチャを用いてホスト・コンピュータおよびアクセレレータが同一の命令セットをサポートすることは、可能であるが、珍しいことである。このため、アクセレレータ（１０４）のプロセッサ（１４８）上で実行するためにコンパイルされたコンピュータ・プログラム命令は、概して、ホスト・コンピュータ（１１０）のプロセッサ（１５２）上でネイティブに実行することは予想されておらず、その逆も同様である。更に、ホスト・プロセッサとアクセレレータとの間のハードウェア・アーキテクチャにおける一般的な相違のため、アクセレレータがホストの命令セットをサポートする場合であっても、ホスト・コンピュータ（１１０）のプロセッサ（１５２）上で実行するためにコンパイルされたコンピュータ・プログラム命令は、概して、アクセレレータ（１０４）のプロセッサ（１４８）上でネイティブに実行することは予想されていない。図２の例におけるアクセレレータ・アーキテクチャは、ホスト・コンピュータ・アーキテクチャに対して、特定クラスのコンピューティング機能の実行速度について最適化されている。すなわち、アクセレレータが最適化されている機能または複数の機能について、これらの機能の実行は、ホスト・コンピュータのプロセッサ上で実行された場合よりも、アクセレレータ上での方が、高速に進行する。
【００２１】
図２の例において、ホスト・コンピュータ（１１０）およびアクセレレータ（１０４、１０５）は、システム・レベル・メッセージ伝達モジュール（「ＳＬＭＰＭ」）（１４６）によって、および、少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（１２８、１３０）によって相互にデータ通信を行うように適合されている。この例では、ホスト・コンピュータ（１１０）とアクセレレータ（１０４）との間でメッセージ・ベースのデータ通信をサポートするため、ホスト・コンピュータ（１１０）およびアクセレレータ（１０４）は双方ともＳＬＭＰＭ（１４６）を有し、データ通信用のいずれかの結合の双方の側において、メッセージ・ベースの通信の発信および受信の双方が可能となっている。また、図２の例において、ホスト・コンピュータ（１１０）およびアクセレレータ（１０４、１０５）は、ＰＣＩｅ通信アダプタ（１６０）を用いてＰＣＩｅ構造（１３０）によって、およびイーサネット通信アダプタ（１６１）を用いてイーサネット構造（１２８）によって、相互にデータ通信を行うように適合されている。ＰＣＩｅおよびイーサネットの使用は説明のためであり、本発明を限定するものではない。本発明の実施形態に従ったハイブリッド・コンピューティング環境が、例えばＰＣＩ、インフィニバンド、ファイバ・チャネル、ＳＣＳＩ、ｅＳＡＴＡ、ＵＳＢ等のような他の構造タイプの構造を含むことができることは、当業者には容易に認められよう。
【００２２】
この例におけるＳＬＭＰＭ（１４６）は、概して、本発明の実施形態に従ったハイブリッド・コンピューティング環境（１００）におけるデータ処理のために動作する際には、ホスト・コンピュータ（１１０）とアクセレレータ（１０４、１０５）との間の複数のデータ通信モードについてデータ通信性能を監視し、ホスト・コンピュータからアクセレレータにデータ通信モードに従ってデータを送信するための要求（１６８）を受信し、要求されたデータ通信モードに従ってデータを送信するか否かを判定し、要求されたデータ通信モードに従ってデータを送信しない場合、別のデータ通信モードを選択して、この選択したデータ通信モードに従ってデータを送信する。図２の例においては、監視した性能は、コンピュータ・ノード（１０３）の動作中にホスト・コンピュータ（１１０）のＲＡＭ（１４２）にＳＬＭＰＭ（１４６）によって記憶された監視性能データ（１７４）として示す。
【００２３】
データ通信モードは、データ通信構造タイプ、データ通信リンク、およびデータ通信プロトコル（１７８）を指定する。データ通信リンク（１５６）は、ホスト・コンピュータとアクセレレータとのアダのデータ通信接続である。図２の例では、ホスト・コンピュータ（１１０）とアクセレレータ（１０４）との間のリンク（１５６）は、ＰＣＩｅ接続（１３８）またはイーサネット・ネットワーク（１０６）を介したイーサネット接続（１３１、１３２）を含むことができる。図２の例におけるホスト・コンピュータ（１１０）とアクセレレータ（１０５）との間のリンク（１５６）は、ＰＣＩｅ接続（１３６）またはイーサネット・ネットワーク（１０６）を介したイーサネット接続（１３１、１３４）を含むことができる。図２の例において、ホスト・コンピュータとアクセレレータとの間に各構造タイプごとに１つのみのリンクを示すが、各構造タイプごとに任意の数のリンクが存在し得ることは、当業者には容易に認められよう。
【００２４】
データ通信プロトコルは、ホスト・コンピュータ（１１０）からアクセレレータ（１０４）に情報を送信するために必要なデータ表現、信号方式、認証、およびエラー検出のための１組の標準的なルールである。図２の例においては、ＳＬＭＰＭ（１４６）が、ホスト・コンピュータ（１１０）とアクセレレータとの間のデータ通信のためのいくつかのプロトコル（１７８）の１つを選択することができる。かかるプロトコル（１７８）の例は、送信および受信動作（１８１）によって実行される共有メモリ転送（「ＳＭＴ」）（１８０）、ならびに、ＰＵＴおよびＧＥＴ動作（１８３）によって実行される直接メモリ・アクセス（「ＤＭＡ」）（１８２）を含む。
【００２５】
共有メモリ転送は、ホスト・コンピュータとアクセレレータとの間のデータを、かかる目的のために割り当てら得た共有メモリ空間（１５８）内に伝達して、いずれの時点でもメモリ内に１つのみのデータ・インスタンスが存在するようにするためのデータ通信プロトコルである。図２のホスト・コンピュータ（１１０）とアクセレレータ（１０４）との間の例示的な共有メモリ転送として、以下について考察する。ＳＭＴ（１８０）プロトコルに従って、アプリケーション（１６６）が、ホスト・コンピュータ（１１０）からアクセレレータ（１０４）へのデータ（１７６）の送信を要求する（１６８）。かかる要求（１６８）は、かかる共有メモリに割り当てられたメモリ・アドレスを含むことができる。この例では、共有メモリ・セグメント（１５８）はアクセレレータ（１０４）上のメモリ位置に例示されているが、共有メモリ・セグメントは、アクセレレータ（１０４）上、ホスト・コンピュータ（１１０）上、またはホスト・コンピュータおよびアクセレレータの双方の上、または、このセグメントがホストおよびアクセレレータによって必要な場合にアクセス可能である限り、完全にローカル・コンピュータ・ノード（１０３）の外部にさえも配置可能であることは、読者には認められよう。共有メモリ転送を実行するため、ＴＣＰプロトコルにおけるものと同様のハンドシェーキング手順によって、ホスト・コンピュータ（１１０）上のＳＬＭＰＭ（１４６）は、アクセレレータ（１０４）上で実行しているＳＬＭＰＭ（１４６）とのデータ通信接続を確立する。次いで、ＳＬＭＰＭ（１４６）は、ヘッダおよびペイロード・データを含むメッセージ（１７０）を生成し、このメッセージを特定構造の特定リンクのためのメッセージ送信キュー内に挿入する。メッセージを生成する際に、ＳＬＭＰＭは、メッセージのヘッダに、アクセレレータの識別およびアクセレレータ上で実行しているプロセスの識別を挿入する。また、ＳＬＭＰＭは、ヘッダ内にまたはペイロード・データの一部として、要求（１６８）からのメモリ・アドレスをメッセージに挿入する。また、ＳＬＭＰＭは、メッセージ・ペイロード・データの一部として、送信するデータ（１７６）をメッセージ（１７０）内に挿入する。次いで、メッセージは、通信アダプタ（１６０、１６１）によって、構造（１２８、１３０）を介して、アクセレレータ（１０４）上で実行しているＳＬＭＰＭに送信され、ここで、ＳＬＭＰＭは、メッセージ内のメモリ・アドレスに従って、ペイロード・データ、送信されたデータ（１７６）を、ＲＡＭ（１４０）の共有メモリ空間（１５８）に記憶する。
【００２６】
直接メモリ・アクセス（「ＤＭＡ」）は、コンピュータ・プロセッサ（１５２）に対する動作的な負担を減らしてホスト・コンピュータとアクセレレータとの間でデータを伝達するためのデータ通信プロトコルである。ＤＭＡ転送は、本質的に、ある位置から別の位置へ、典型的にはホスト・コンピュータからアクセレレータへまたはその逆に、メモリ・ブロックのコピーを実施する。ホスト・コンピュータおよびアクセレレータのいずれかまたは双方は、ＤＭＡエンジンすなわち直接メモリ・アクセスのためのコンピュータ・ハードウェアおよびソフトウェアの集合を含むことができる。直接メモリ・アクセスは、アクセレレータおよびホスト・コンピュータのプロセッサに対する動作的な負担を減らしてそれらのメモリに対する読み出しおよび書き込みを行うことを含む。例えば、アクセレレータのＤＭＡエンジンは、ＤＭＡの目的のために割り当てられたメモリに対する書き込みおよびこのメモリからの読み出しを行うことができ、一方で、アクセレレータのプロセッサは、コンピュータ・プログラム命令を実行し、または別の方法で動作を継続する。すなわち、コンピュータ・プロセッサはＤＭＡ転送を実行するための命令を発行することができるが、転送を実行するのはプロセッサでなくＤＭＡエンジンである。
【００２７】
図２の例では、アクセレレータ（１０４）のみがＤＭＡエンジン（１８４）を含み、ホスト・コンピュータはこれを含まない。この例では、ホスト・コンピュータ上のプロセッサ（１５２）は、ホストからアクセレレータへのデータのＤＭＡ転送を開始するために、ＳＭＴプロトコルに従ったメッセージをアクセレレータに送信し、アクセレレータに遠隔「ＧＥＴ」動作を実行するように命令する。アクセレレータ（１０４）だけがＤＭＡエンジンを含む唯一のデバイスである図２の例に示した構成は、単に例示のためのものであり、限定ではない。多くの実施形態において、ホスト・コンピュータおよびアクセレレータの双方がＤＭＡエンジンを含むことができ、更に他の実施形態ではホスト・コンピュータのみがＤＭＡエンジンを含むことは、当業者には容易に認められよう。
【００２８】
図２のハイブリッド・コンピューティング環境においてＤＭＡプロトコルを実施するために、いくらかのメモリ領域をＤＭＡエンジンによるアクセスのために割り当てる。かかるメモリの割り当ては、他のアクセレレータまたはホスト・コンピュータから独立して実施することができ、または別のアクセレレータまたはホスト・コンピュータによって開始してこれと協同して完了させることができる。ＳＭＡプロトコルに従って割り当てられる共有メモリ領域は、例えば、ＤＭＡエンジンに利用可能とされたメモリ領域とすることができる。すなわち、図２のハイブリッド・コンピューティング環境（１００）におけるＤＭＡデータ通信の最初のセットアップおよび実施は、少なくとも部分的に、共有メモリ転送、または、ＤＭＡエンジンに関して帯域外の別の帯域外データ通信プロトコルによって実行することができる。ＤＭＡ転送を実施するためのメモリ割り当ては比較的待ち時間が長いが、いったん割り当てると、ＤＭＡプロトコルは、多くの他のデータ通信プロトコルよりも必要なプロセッサ利用が少なくて済む高帯域データ通信を可能とする。
【００２９】
直接「ＰＵＴ」動作は、起点のデバイス上のＤＭＡエンジンからターゲット・デバイス上のＤＭＡエンジンまでデータを送信するモードである。直接「ＰＵＴ」動作によって、ターゲット・デバイスのプロセッサがほとんど関与することなく、ターゲット・デバイス上にデータを送信し記憶することができる。直接「ＰＵＴ」動作において、ターゲット・デバイスのプロセッサの関与を最小限に抑えるために、起点のＤＭＡエンジンは、ターゲット・デバイス上の記憶位置の具体的な識別と共に、ターゲット・デバイス上に記憶するデータを転送する。起点のＤＭＡは、ターゲット・デバイス上の具体的な記憶位置を知っている。なぜなら、ターゲット・デバイス上にデータを記憶するための具体的な記憶位置は、すでにターゲットＤＭＡエンジンによって起点のＤＭＡエンジンに提供されているからである。
【００３０】
遠隔「ＧＥＴ」動作は、「ｒＧＥＴ」と称されることもあり、起点デバイス上のＤＭＡエンジンからターゲット・デバイス上のＤＭＡエンジンまでデータを送信する別のモードである。遠隔「ＧＥＴ」動作によって、起点デバイスのプロセッサがほとんど関与することなく、ターゲット・デバイス上にデータを送信して記憶することができる。遠隔「ＧＥＴ」動作において、起点デバイスのプロセッサの関与を最小限に抑えるため、起点ＤＭＡエンジンは、ターゲットＤＭＡエンジンによってアクセス可能な記憶位置にデータを記憶し、直接または共有メモリ送信による帯域外で、ターゲットＤＭＡエンジンに、送信準備のできたデータの記憶位置およびサイズを通知し、ターゲットＤＭＡエンジンはその記憶位置からデータを検索する。
【００３１】
複数のデータ通信モードについてのデータ通信性能の監視は、データ通信リンク（１５６）に対するメッセージ送信要求キュー（１６２〜１６５）における多数の要求（１６８）の監視を含む場合がある。図２の例では、各メッセージ送信要求キュー（１６２〜１６５）には、１つの特定のデータ通信リンク（１５６）が関連付けられている。各キュー（１６２〜１６５）は、このキューに関連付けられたデータ通信リンク（１５６）と共に、通信アダプタ（１６０、１６１）によって送信されるデータ（１７６）を含むメッセージ（１７０）のエントリを含む。
【００３２】
また、複数のデータ通信モードについてのデータ通信性能の監視は、共有メモリ空間（１５８）の利用の監視を含む場合がある。図２の例では、共有メモリ空間（１５８）は、アクセレレータのＲＡＭ（１４０）に割り当てられている。利用とは、ターゲット・デバイスに送信するためにデータを記憶したが、ターゲット・デバイスによってまだ読み出しも受信もされていない割り当て共有メモリ空間の比率であり、割り当て共有メモリに対する書き込みおよびこのメモリからの読み出しを追跡することによって監視される。図２のハイブリッド・コンピューティング環境（１００）においては、共有メモリ空間、実際にはいかなるメモリも、限定がある。このため、アプリケーション・プログラム（１６６）の実行中に共有メモリ空間（１５８）がいっぱいになると、共有メモリ空間における空間の限定のためにホスト・コンピュータ（１１０）からアクセレレータへのデータ送信を遅くするか、または停止さえする場合もあるようになっている。
【００３３】
本発明のいくつかの実施形態においては、図２のハイブリッド・コンピューティング環境（１００）を並列コンピューティング環境として動作するように構成して、この並列コンピューティング環境において２つ以上のホスト・コンピュータ（１１０）上でアプリケーション・プログラム（１６６）が２つ以上のインスタンスを実行することができる。かかる実施形態では、データ通信モードを通じたデータ通信性能の監視は、並列コンピューティング環境において２つ以上のホスト・コンピュータ上で実行しているアプリケーション・プログラム（１６６）の複数のインスタンスにまたがるデータ通信性能情報（１７４）の集約を含む場合がある。集約した性能情報（１７４）を用いて、当業者に想起されるように、データ通信モードについての平均通信待ち時間の計算、特定の構造タイプのデータ通信リンクにおける平均要求数の計算、並列コンピューティング環境における複数のホスト・コンピュータおよびアクセレレータ間の平均共有メモリ利用の計算等を行うことができる。かかる方法のいずれかの組み合わせをＳＬＭＰＭによって用いて、要求されたデータ通信モードに従ってデータを送信するか否かを判定すること、および、要求されたデータ通信モードに従ってデータを送信しない場合にデータを送信するための別のデータ通信モードを選択することの双方を行うことができる。
【００３４】
図２のＳＬＭＰＭ（１４６）は、ホスト・コンピュータ（１１０）上のアプリケーション・プログラム（１６６）から、ホスト・コンピュータ（１１０）からアクセレレータ（１０４）にデータ通信モードに従ってデータ（１７６）を送信するための要求（１６８）を受信する。かかるデータ（１７６）は、アクセレレータ（１０４）によって実行するためにコンパイルされたコンピュータ・プログラム命令、アクセレレータ（１０４）上で実行しているアプリケーション・プログラムのための処理対象データ（work piece data）、またはコンピュータ・プログラム命令および処理対象データの何らかの組み合わせを含むことができる。データ通信モードに従ってデータ（１７６）を送信するための要求（１６８）の受信は、指定された構造タイプによってデータを送信するための要求の受信、ホスト・コンピュータからアクセレレータに指定されたデータ通信リンクを介してデータを送信するための要求の受信、または、プロトコルに従ってホスト・コンピュータからアクセレレータにデータを送信するための要求の受信を含むことができる。
【００３５】
データ通信モードに従ってデータ（１７６）を送信するための要求（１６８）は、ＡＰＩを介したＳＬＭＰＭ（１４６）に対するユーザ・レベルのアプリケーション関数呼び出し（function call）として実施することができる。すなわち、これは、プロトコル、構造タイプ、およびリンクに従ってデータ通信モードを明示的に指定する呼び出しである。関数呼び出しとして実施される要求は、関数呼び出し自体の動作に従ってプロトコルを指定することができる。例えば、dacs_put()関数呼び出しは、ＤＭＡ「ＰＵＴ」動作のデフォルト・モードにおいてデータを送信するために、ＤＡＣＳライブラリとして実施されるＳＬＭＰＭが提示するＡＰＩによる呼び出しを表すことができる。かかる呼び出しは、発呼側のアプリケーションおよび発呼側のアプリケーションを書いたプログラマの観点からは、デフォルト・モードに従ってデータを送信するためのＳＬＭＰＭライブラリに対する要求を表し、プログラマには、高速ＡＰＩ呼び出し（express API call）と関連付けられたデフォルト・モードと知られている。この例ではdacs_put()である被呼側の関数を、本発明の実施形態に従って符号化し、要求されたデータ通信モードに従ってすなわち被呼側の関数のデフォルト・モードに従ってデータを送信するか否かについて、それ自身の判定を行うことができる。更に別の例では、dacs_send()命令は、ＳＭＴ「送信」動作のデフォルト・モードにおいてデータを送信するために、ＤＡＣＳライブラリとして実施されるＳＬＭＰＭが提示するＡＰＩを介した呼び出しを表すことができ、この場合も、被呼側の関数dacs_send()を、本発明の実施形態に従って符号化して、要求されたモードに従ってデータを送信するか否かについてそれ自身の判定を行う。
【００３６】
関数呼び出しにおける特定のアクセレレータの識別によって、構造タイプを効果的に指定することができる。かかる関数呼び出しは、呼び出しパラメータとして、特定のアクセレレータの識別を含むことができる。例えば、ＰＣＩｅ  ＩＤの使用による特定のアクセレレータの識別によって、ＰＣＩ構造タイプが効果的に識別される。別の同様の例では、イーサネット・アダプタの媒体アクセス制御（「ＭＡＣ」）アドレスの使用による特定のアクセレレータの識別によって、イーサネットの構造タイプが効果的に識別される。ホスト上で実行しているアプリケーションからの関数呼び出しのアクセレレータＩＤを、構造タイプを識別するように実施する代わりに、関数呼び出しが、呼び出しのパラメータとして、特定のアクセレレータの全体的に一意の識別のみを含み、これによってホスト・コンピュータからアクセレレータへのリンクのみを指定し、構造タイプは指定しないということも可能である。この場合、呼び出された関数は、特定のプロトコルによって用いるためのデフォルトの構造タイプを実施することができる。例えば、ＳＬＭＰＭにおいて呼び出された関数が、ＤＭＡプロトコルによって用いるためのデフォルトの構造タイプとしてＰＣＩｅを用いて構成され、ＳＬＭＰＭが、ＤＭＡプロトコル、ＤＭＡ  ＰＵＴ、またはＤＭＡ遠隔ＧＥＴ動作に従ってアクセレレータ（１０４）にデータを送信するための要求を受信した場合、呼び出された関数は、ＤＭＡのデフォルト構造タイプすなわちＰＣＩｅ構造タイプを明示的に指定する。
【００３７】
各構造タイプの１つのみのリンクが単一のホスト・コンピュータを単一のアクセレレータに適合させるハイブリッド・コンピューティング環境においては、関数呼び出しのパラメータにおける特定のアクセレレータの識別によって、リンクを効果的に指定することができる。２つのＰＣＩｅリンクがホスト・コンピュータ（１１０）をアクセレレータ（１０４）に接続する等、各構造タイプの２つ以上のリンクがホスト・コンピュータおよびアクセレレータを適合するハイブリッド・コンピュータ環境においては、呼び出されたＳＬＭＰＭ関数は、アクセレレータの識別によって指定される構造タイプについて、関数呼び出しのパラメータにおいて識別されたアクセレレータのデフォルト・リンクを実施することができる。
【００３８】
また、図２の例におけるＳＬＭＰＭ（１４６）は、監視した性能（１７４）に応じて、要求されたデータ通信モードに従ってデータ（１７６）を送信するか否かを判定する。要求されたデータ通信モードに従ってデータ（１７６）を送信するか否かの判定は、要求された構造タイプによってデータを送信するか否か、要求されたデータ通信リンクを介してデータを送信するか否か、または要求されたプロトコルに従ってデータを送信するか否かの判定を含むことができる。
【００３９】
本発明の実施形態に従ったハイブリッド・コンピューティング環境においては、データ通信モードを通じたデータ通信性能の監視は、データ通信リンクのためのメッセージ送信要求キュー（１６２〜１６５）における多数の要求の監視を含み、要求されたデータ通信モードに従ってデータ（１７６）を送信するか否かの判定は、メッセージ送信要求キュー内の要求数が所定の閾値を超えたか否かを判定することによって実行可能である。本発明の実施形態に従ったハイブリッド・コンピューティング環境では、複数のデータ通信モードについてのデータ通信性能の監視は、共有メモリ空間の利用の監視を含み、要求されたデータ通信モードに従ってデータ（１７６）を送信するか否かの判定は、共有メモリ空間の利用が所定の閾値を超えたか否かを判定することによって実行可能である。
【００４０】
要求されたデータ通信モードに従ってデータを送信しない場合、ＳＬＭＰＭ（１４６）は、監視した性能に応じて、データを送信するための別のデータ通信モードを選択し、この選択したデータ通信モードに従ってデータ（１７６）を送信する。データを送信するための別のデータ通信モードの選択は、監視した性能に応じた、データを送信する別のデータ通信構造タイプの選択、データを送信するデータ通信リンクの選択、および、別のデータ通信プロトコルの選択を含むことができる。一例として、要求されたデータ通信モードが、ＰＣＩｅ構造（１３０）のリンク（１３８）を介したアクセレレータ（１０４）に対するＰＵＴ動作を用いたＤＭＡ送信である場合について考える。監視したデータ性能（１７４）により、リンク（１３８）に関連付けられた送信メッセージ要求キュー（１６２）内の要求数が所定の閾値を超えることが示される場合、ＳＬＭＰＭは、データ（１７６）を送信するための別の構造タイプすなわちイーサネット構造（１２８）およびリンク（１３１、１３２）を選択することができる。また、監視した性能（１７６）によって、共有メモリ空間（１５８）の現在の利用が所定の閾値未満であり、キュー（１６２）内の顕著なＤＭＡ送信の数が所定の閾値を超えることが示される場合について考える。かかる場合、ＳＬＭＰＭ（１４６）は、データ（１７４）を送信するため、共有メモリ転送等の別のプロトコルを選択することができる。
【００４１】
また、データ（１７２）を送信するためのＳＬＭＰＭによる別のデータ通信モードの選択は、データ通信メッセージ・サイズ（１７２）に応じたデータ通信プロトコル（１７８）の選択を含むことができる。データ通信メッセージ・サイズ（１７２）に応じたデータ通信プロトコル（１７８）の選択は、メッセージのサイズが所定の閾値を超えるか否かを判定することによって実行可能である。より大きいメッセージ（１７０）では、ＤＭＡプロトコルが好ましいプロトコルである可能性がある。なぜなら、通常、より大きいメッセージ（１７０）のＤＭＡ転送を行う際のプロセッサ利用は、同一サイズのメッセージの共有メモリ転送を行う際のプロセッサ利用よりも少ないからである。
【００４２】
上述したように、ＳＬＭＰＭは、選択したデータ通信モードに従ってデータを送信することができる。選択したデータ通信モードに従ったデータの送信は、選択したデータ通信構造タイプによるデータの送信、選択したデータ通信リンクを介したデータの送信、または選択したプロトコルに従ったデータの送信を含むことができる。ＳＬＭＰＭ（１４６）が、選択したデータ通信モードに従ったデータの送信を実行するには、デバイス・ドライバによって、選択したデータ通信モードのデータ通信構造タイプのための通信アダプタに、選択したデータ通信モードのプロトコルに従ってメッセージ（１７０）を送信するように命令すれば良い。このメッセージは、メッセージ・ヘッダ内にアクセレレータの識別を含み、メッセージ・ペイロード内に送信するデータ（１７６）を含む。
【００４３】
図２の例のハイブリッド・コンピューティング環境（１００）においては、ホスト・コンピュータ（１１０）上でホスト・アプリケーション・プロセスが実行している。図２の例のハイブリッド・コンピューティング環境（１００）におけるデータ処理を実行するには、ホスト・アプリケーション・プロセス（１６７）の命令で、ＳＬＭＰＭ（１４６）によって、アクセレレータ（１０４）上で実行スレッド（１６９）を開始し、ＳＬＭＰＭ（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に対して、実行スレッド（１６９）のためのＰＩＤを戻し、実行スレッド（１６９）がホスト・コンピュータ（１１０）上の実行スレッドであるかのように、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ（１０４）上で実行スレッド（１６９）を管理すれば良い。
【００４４】
図２のハイブリッド・コンピューティング環境（１００）において、例示的なＳＬＭＰＭ（１４６）によって、ホスト・アプリケーション・プロセス（１６７）の命令で、アクセレレータ（１０４）上で実行スレッド（１６９）を実行することは、ホスト・アプリケーション・プロセス（１６７）から、プロセス間データ通信メッセージにおいて、アクセレレータ（１０４）上で実行スレッド（１６９）を開始するための命令を受信することを含む場合がある。このデータ通信メッセージは、実行スレッドのための動作情報を含む。ホスト・アプリケーション・プロセスの観点から、プロセス間データ通信メッセージは、ＳＬＭＰＭ（１４６）が提供する関数に対するＡＰＩを介した関数呼び出しとすることができる。「動作情報」という言葉は、本明細書において用いる場合、ハイブリッド・コンピューティング環境（１００）において、ソフトウェア・プログラム、プロセス、実行スレッド等の実行を開始、維持、および終了させる際に用いられる情報を指す。アクセレレータ（１０４）上で実行スレッド（１６９）を開始するための命令の一部として含まれる動作情報は、実行スレッドのための実行パラメータ、実行スレッドのための環境変数、実行スレッドのための実行可能ファイル名、実行スレッドを開始するアクセレレータの識別子、ホスト・コンピュータ（１１０）からアクセレレータ（１０４）に転送するファイル・リストを含むことができる。これらのファイルは、例えば、実行スレッドのための実行可能ファイル、データ・ファイル、構成ファイル、環境変数のための値を指定するファイル、実行パラメータの値を指定するファイル等を含む。アクセレレータ上での実行スレッドの開始は、更に、アクセレレータ（１０４）上で動作しているＳＬＭＰＭ（１４６）のインスタンスによるＵｎｉｘタイプの「ｆｏｒｋ（分岐）」システム・コマンドの実行を含み、ＳＬＭＰＭ（１４６）を２つのプロセスに分岐させることができる。この場合、分岐したプロセスが、アクセレレータ（１０４）上で実行スレッド（１６９）を開始するための命令に含まれる動作情報によって、Ｕｎｉｘタイプの「ｅｘｅｃ（実行）」システム・コマンドを実行する。
【００４５】
図２のハイブリッド・コンピューティング環境（１００）における例示的なＳＬＭＰＭ（１４６）が、実行スレッド（１６９）のためのＰＩＤをホスト・アプリケーション・プロセスに戻すには、「ｅｘｅｃ」システム・コマンドの実行の前に、アクセレレータ（１０４）上での上述した分岐プロセスによって、Ｕｎｉｘタイプの「ｇｅｔｐｉｄ」システム・コマンドを実行すれば良い。そのリターンは、分岐したプロセスのためのＰＩＤであり、従って後に実行されるスレッド（１６９）のためのＰＩＤである。更に、このリターンされたＰＩＤを、分岐したプロセスによってＳＬＭＰＭに提供し、ＳＬＭＰＭによってホスト・アプリケーション・プロセス（１６７）に、プロセス間データ通信メッセージ内でＰＩＤを提供すれば良い。
【００４６】
ハイブリッド・コンピューティング環境（１００）における例示的なホスト・アプリケーション・プロセス（１６７）は、アクセレレータ（１０４）上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ（１１０）上の実行スレッド（１６９）であるかのように管理する。すなわち、アクセレレータ（１０４）上の実行スレッド（１６９）は実際には異なるプロセスのスレッドであるが、そのように管理するのではなく、ホスト・アプリケーション・プロセス（１６７）は、本発明の実施形態に従って、アクセレレータ（１０４）上の実行スレッド（１６９）を自分自身のスレッドとして管理する。ホスト・アプリケーション・プロセス（１６７）は、例えばＵｎｉｘタイプの「ｓｔｄｏｕｔ」および「ｓｔｄｅｒｒ」等の実行スレッドの標準ストリームを、ホスト・アプリケーション・プロセスの標準ストリームに対して、ＳＬＭＰＭ（１４６）によって構成されたマッピングを行うことによって、アクセレレータ（１０４）上の実行スレッド（１６９）を管理することができる。標準ストリームは、実行スレッドが実行を開始する場合のスレッドとその動作環境との間で予め構成された入力および出力チャネルである。標準ストリームによって、同一プロセスのスレッド間、スレッドとそのプロセスとの間等のデータ通信が可能となる。スレッド（１６９）およびプロセス（１６７）のための標準ストリームは、ＳＬＭＰＭを介したスレッドとプロセスとの間のソケット接続を用いることにより、ＳＬＭＰＭ（１４６）によってマッピングすることができる。ホスト・アプリケーション・プロセスの標準ストリームに実行スレッドの標準ストリームをマッピングすることで、アクセレレータ（１０４）上の実行スレッド（１６９）およびホスト・アプリケーション・プロセス（１６７）は、一方から他方にデータ通信を転送することができ、これは、プロセス（１６７）およびスレッド（１６９）の観点からは、それらが双方とも同一プロセッサ上で実行しているかのように見える。従って、ＳＬＭＰＭは、プロセス（１６７）およびスレッド（１６９）の観点からホスト・コンピュータとアクセレレータとの間に存在する分離を効果的に除去するかまたはつなぐことができる。
【００４７】
また、あたかもアクセレレータ（１０４）上の実行スレッド（１６９）がホスト・コンピュータ（１１０）上の実行スレッド（１６９）であるかのように実行スレッド（１６９）を管理することは、ホスト・アプリケーション・プロセスの子プロセスとして実行スレッドを管理すること、アクセレレータ上の実行スレッドの送信時にシステム・レベル・メッセージ伝達モジュールを介してホスト・アプリケーション・プロセスによって終了データを受信すること、またはシステム・レベル・メッセージ伝達モジュール（１４６）によってアクセレレータ（１０４）上で実行スレッド（１６９）を無効化する（kill）ことを含む場合がある。
【００４８】
本明細書において用いる場合、「子プロセス」という言葉は、親プロセスと呼ぶ別のプロセスによって生成されるコンピュータ・プロセスを指し、生成されたプロセスは通常、親プロセスからその属性の多くを受け継ぐ。プロセスは、上述したようなｆｏｒｋ−ｅｘｅｃシステム・コマンドを用いて生成されて、ｆｏｒｋ−ｅｘｅｃシステム・コマンドの実行時にアクセレレータ（１０４）上で動作しているＳＬＭＰＭ（１４６）のインスタンスによって実行スレッド（１６９）を含むプロセスが生成されるようになっている。従って、ホスト・アプリケーション・プロセス（１６７）は実行スレッド（１６９）の実行を要求するが、プロセスにおいて実行スレッド（１６９）の開始時にアクセレレータ（１０４）上で動作しているＳＬＭＰＭ（１４６）のインスタンスは、実際、そのスレッド（１６９）の親プロセスである。しかしながら、本発明の実施形態に従って、アクセレレータ上のＳＬＭＰＭ（１４６）が実際はスレッドの親プロセスであるという事実にもかかわらず、ホスト・アプリケーション・プロセス（１４６）は、実行スレッド（１６９）を、この実行スレッド（１６９）がホスト・アプリケーション・プロセス（１６７）の子プロセスであるかのように管理する。図２のハイブリッド・コンピューティング環境（１００）における例示的なホスト・アプリケーション・プロセス（１６７）は、実行スレッド（１６９）を実行しているアクセレレータ（１０４）上で動作しているプロセスとインタラクトすることによって、実行スレッド（１６９）を、ホスト・アプリケーション・プロセス（１６７）の子プロセスとして管理することができ、その際には、あたかも、スレッド（１６９）を実行しているプロセスが、通常は子プロセスによって受け継がれるホスト・アプリケーション・プロセスからの属性を受け継ぐかのように行う。かかる属性は、例えば、実ユーザ識別子、実グループ識別子、有効ユーザ識別子、有効グループ識別子、プロセス・グループ識別子、端末グループ識別子、ルート・ディレクトリ、現在の作業ディレクトリ、信号処理設定、およびファイル・モード生成マスクを含むことができる。かかる属性は、ホスト・アプリケーション・プロセスによって、アクセレレータ（１０４）上で実行スレッド（１６９）を開始するための命令の動作情報に含ませることができ、上述したＵｎｉｘタイプの「ｅｘｅｃ」システム・コマンドの実行時に前述の分岐ＳＬＭＰＭ（１４６）によって設定することができる。
【００４９】
図２のハイブリッド・コンピューティング環境（１００）における例示的なホスト・アプリケーション・プロセス（１６７）が、アクセレレータ上での実行スレッド（１６９）の終了時に、システム・レベル・メッセージ伝達モジュール（１４６）を介してホスト・アプリケーション・プロセス（１６７）によって終了データ（７０４）を受信するには、ＳＬＭＰＭ（１４６）によって、アクセレレータ上での実行スレッド（１６９）の実行を監視し、実行スレッドの終了時に、ホスト・アプリケーション・プロセスに対して、プロセス間データ通信メッセージ内で終了データを送信すれば良い。本明細書において用いる場合、終了データという言葉は、実行スレッドの終了時に存在するいずれかのデータを指す。かかる終了データは、終了ステータス識別子、スレッドの終了を引き起こす例外が生じたコンピュータ・プログラム命令ブロック等、当業者に想起されるようなものを含むことができる。
【００５０】
図２のハイブリッド・コンピューティング環境（１００）における例示的なホスト・アプリケーション・プロセス（１６７）が、システム・レベル・メッセージ伝達モジュール（１４６）によってアクセレレータ（１０４）上の実行スレッド（１６９）を無効化するには、実行スレッドの識別子を含むプロセス間データ通信メッセージにおいて、スレッド（１６９）を終了させるための命令を送信すれば良い。ホスト・アプリケーション・プロセス（１６７）の観点からは、プロセス間データ通信メッセージは、ＳＬＭＰＭ（１４６）が提供する関数に対するＡＰＩを介した関数呼び出しとすることができる。スレッドの識別子は、スレッドの一意の識別、アクセレレータの識別およびスレッドのＰＩＤの組み合わせ、ならびに当業者に想起されるような他の方法におけるものとして実施することができる。この命令に応答して、アクセレレータ（１０４）上で動作しているＳＬＭＰＭ（１４６）は、アクセレレータ（１０４）上で動作している実行スレッド（１６９）の実際の親プロセスとして、ホスト・アプリケーション・プロセスからの命令において指定されたＰＩＤをその引数として有するＵｎｉｘタイプの「ｋｉｌｌ」コマンドを実行することによって、実行スレッドを終了させることができる。
【００５１】
また、図２のハイブリッド・コンピューティング環境（１００）における例示的なＳＬＭＰＭ（１４６）は、本発明の実施形態に従って、ホスト・アプリケーション・プロセス（１６７）の終了を検出し、その終了時に、アクセレレータ（１０４）上の実行スレッド（１６９）を無効化するように構成することも可能である。例示したＳＬＭＰＭ（１４６）は、連続的に、またはホスト・アプリケーション・プロセス（１６７）の実行ステータスを周期的にチェックすることで、プロセスの実行を監視することによって、ホスト・アプリケーション・プロセス（１６７）の終了を検出することができる。ＳＬＭＰＭ（１４６）は、Ｕｎｉｘタイプの「ｋｉｌｌ」コマンドを用いて、上述したようにアクセレレータ（１０４）上の実行スレッド（１６９）を無効化することができる。
【００５２】
また、図２のハイブリッド・コンピューティング環境（１００）における例示的なＳＬＭＰＭ（１４６）は、本発明の実施形態に従って、ホスト・アプリケーション・プロセスの命令で、アクセレレータ上の実行スレッドが終了したか否かを判定することを含めて、待機関数を実行し、待機関数のリターン時に、アクセレレータ上の実行スレッドが終了したことをホスト・アプリケーション・プロセスに教えるように構成することも可能である。ホスト・アプリケーション・プロセスの命令で、アクセレレータ上の実行スレッドが終了したか否かを判定することを含めて待機関数を実行することは、ホスト・アプリケーション・プロセス（１６９）から、ＳＬＭＰＭ（１４６）によって、プロセス間データ通信メッセージとして、待機関数を実行するための命令の受信を含むことができ、この命令は、アクセレレータ（１０４）上で動作している実行スレッド（１６９）のＰＩＤを含む。かかる命令は、ホスト・アプリケーション・プロセスの観点からは、ＳＬＭＰＭ（１４６）待機関数に対するＡＰＩを介した関数呼び出しとして実施することができる。本明細書において用いる場合、「待機関数」という言葉は、別のプロセスまたは通常プロセス識別子によって識別される実行スレッドが実行を完了するまで、発呼側のプロセスに実行を一時停止させる関数である。この場合、待機関数によって、アクセレレータ（１０４）上で動作している実行スレッドが実行を完了するまで、ホスト・アプリケーション・プロセスは実行を一時停止する。図２の例におけるＳＬＭＰＭ（１４６）は、待機関数のリターン時に、アクセレレータ上の実行スレッド（１６９）が終了したことの通知をプロセス間データ通信メッセージにおいて送信することによって、アクセレレータ（１０４）上の実行スレッド（１６９）が終了したことをホスト・アプリケーション・プロセス（１６７）に教えることができる。
【００５３】
更に説明を行うため、図３は、本発明の実施形態に従ったデータ処理に有用な更に別の例示的なハイブリッド・コンピューティング環境（１００）のブロック図を示す。図３のハイブリッド・コンピューティング環境は、図２のハイブリッド・コンピューティング環境と類似し、これと同様に、４つのコンピュータ・ノード（１０２、１０３）を含み、その各々が、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（１１０）およびアクセレレータ（１０４）は、システム・レベル・メッセージ伝達モジュール（１４６）または少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（１２８、１３０）によるデータ通信のために相互に適合されている。図３の例においては、ホスト・コンピュータ（１１０）は、イーサネット構造（１２８）およびＰＣＩｅ構造（１３０）によって、アクセレレータ（１０４）に適合されている。
【００５４】
コンピュータ・ノード（１０３）の拡大図において示すようなホスト・コンピュータ（１１０）は、ｘ８６プロセッサを含む。ｘ８６プロセッサは、そのアーキテクチャが、Ｉｎｔｅｌ  ｘ８６シリーズのマイクロプロセッサ、３８６、４８６、５８６、またはＰｅｎｔｉｕｍ（ＴＭ）等のアーキテクチャ・レジスタ・セットに基づいたプロセッサである。ｘ８６プロセッサの例は、ＡＭＤ（Advanced Micro Devices）Ｏｐｔｅｒｏｎ（ＴＭ）、ＡＭＤ  Ｐｈｅｎｏｍ（ＴＭ）、ＡＭＤ  Ａｔｈｌｏｎ  ＸＰ（ＴＭ）、ＡＭＤ  Ａｔｈｌｏｎ  ６４（ＴＭ）、Ｉｎｔｅｌ  Ｎｅｈａｌｅｍ（ＴＭ）、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ  ４、Ｉｎｔｅｌ  Ｃｏｒｅ  ２  Ｄｕｏ、Ｉｎｔｅｌ  Ａｔｏｍ等、当業者に想起されるようなものを含む。図の例におけるｘ８６プロセッサ（１５２）は、多くのｘ８６プロセッサにおいて見られる典型的なアーキテクチャ・レジスタ・セット（１５４）を示す。それらは、例えば、アキュムレータ・レジスタ（「ＡＸ」）、ベース・レジスタ（「ＢＸ」）、カウンタ・レジスタ（「ＣＸ」）、データ・レジスタ（「ＤＸ」）、ストリング動作のためのソース・インデックス・レジスタ（「ＳＩ」）、ストリング動作のための宛先インデックス（「ＤＩ」）、スタック・ポインタ（「ＳＰ」）、現在のスタック・フレームのアドレスを保持するためのスタック・ベース・ポインタ（「ＢＰ」）、および現在の命令アドレスを保持する命令ポインタ（「ＩＰ」）を含む。
【００５５】
図３の例におけるアクセレレータ（１０４）は、セル・ブロードバンド・エンジン・アーキテクチャ（「ＣＢＥＡ」）を有するセル・ブロードバンド・エンジン（「ＣＢＥ」）として示す。ＣＢＥＡは、「ＳＴＩ」として知られるソニー・コンピュータエンタテインメント、東芝、およびＩＢＭの連合によって共同開発されたマイクロプロセッサ・アーキテクチャである。ＣＢＥＡに従って実施されるマイクロプロセッサは、「セル」プロセッサ、または単にＣＢＥと称されることもある。ＣＢＥＡは、あまり性能の高くない汎用パワー・アーキテクチャ・コアすなわちＰＰＥ（Power Processing Element：パワー処理要素）（１４８）を、マルチメディアおよびベクトル処理アプリケーションならびに多くの他の形態の専用計算を著しく加速するＳＰＥ（Synergistic Processing Element：相乗処理要素）（３０８）と呼ばれる効率化共同処理要素と組み合わせる。ＣＢＥアーキテクチャは、効率／電力を重視し、待ち時間よりも帯域幅を優先し、プログラム・コードの簡潔さよりもピーク計算スループットにとって有利である。
【００５６】
ＣＢＥとして実施される図３のアクセレレータ（１０４）は、この例ではＰＰＥ（パワー処理要素）であるメイン・プロセッサ（１４８）と、ＳＰＥ（３０８）と称する８個の完全に機能するコプロセッサと、ＰＰＥおよびＳＰＥを接続する要素相互接続バス（「ＥＩＢ」）（３１２）と称する高帯域幅環状データ・バスと、を含む。ＰＰＥ（１４８）は、パワー・アーキテクチャ・プロセッサであり、２方向マルチスレッド・コアが、８個のＳＰＥ（３０８）のためのコントローラとして機能する。「パワー・アーキテクチャ」という言葉は、ここでは、ＩＢＭの異なる世代のプロセッサ・アーキテクチャを指し、広義には、ＰＯＷＥＲ、ＰｏｗｅｒＰＣ、およびＣｅｌｌアーキテクチャに基づいた全ての製品を含む。従って、ＣＢＥアクセレレータ（１０４）のＰＰＥ（１４８）のアーキテクチャ・レジスタ（１５０）は、ホスト・コンピュータ（１１０）のｘ８６プロセッサ（１５２）のものとは異なる。図３のＰＰＥ（１４８）は、パワー・アーキテクチャの例示的なアーキテクチャ・レジスタ・セット（１５０）を含み、これは、３２の汎用レジスタ（「ＧＲＰ」）、３２の浮動小数点レジスタ（「ＦＰＲ」）、固定点例外レジスタ（「ＸＥＲ」）、カウンタ・レジスタ（「ＣＴＲ」）、条件レジスタ（「ＣＲ」）、命令アドレス・レジスタ（「ＩＡＲ」）、リンク・レジスタ（「ＬＲ」）、およびプロセッサ・バージョン・レジスタ（「ＰＶＲ」）を含む。
【００５７】
ＳＰＥ（３０８）は、ＣＢＥ（１０４）の計算の作業負荷のほとんどを処理する。ＳＰＥはベクトル化浮動小数点コード実行のために最適化されているが、ＳＰＥは、例えば、ＳＰＥ上のローカル・メモリ（１４１）に記憶されたオペレーティング・システムによって、Ｌｉｎｕｘの軽量の変更バージョン等のオペレーティング・システムを実行することができる。図３の例における各ＳＰＥ（３０８）は、相乗処理ユニット（「ＳＰＵ」）（３０２）およびメモリ・フロー・コントローラ（「ＭＦＥ」）（３１０）を含む。ＳＰＵ（３０２）は、単精度および２倍精度命令のための１２８ビット単一命令多重データ（「ＳＩＭＤ：single instruction, multiple data」）構成を有する縮小命令セット・コンピューティング（「ＲＩＳＣ：Reduced Instruction Set Computing」）プロセッサである。いくつかの実施においては、ＳＰＵは、命令およびデータのために２５６ＫＢ埋め込みスタティックＲＡＭ（１４１）を含むことができ、ＰＰＥ（１４８）に可視的でありソウトウェアによって直接アドレス可能なローカル記憶装置と呼ばれる。各ＳＰＵ（３０２）は、４ギガバイト（「ＧＢ」）までのローカル記憶メモリをサポートすることができる。ローカル記憶装置は、従来のＣＰＵキャッシュのようには動作しない。なぜなら、ローカル記憶装置は、ソフトウェアにトランスペアレントでなく、ロードするデータを予測するハードウェア構造を含むわけでもないからである。また、ＳＰＵ（３０２）は、１２８ビット１２８入力レジスタ・ファイル（３０７）を含む、ＰＰＥのものとは異なるアーキテクチャ・レジスタ（３０６）を実施する。ＳＰＵ（３０２）は、単一のクロック・サイクルにおいて、１６の８ビット整数、８の１６ビット整数、４の３２ビット整数、または４の単精度浮動小数点数に対して動作することができると共に、メモリ動作を実行することができる。
【００５８】
ＭＦＣ（３１０）は、ＣＢＥ（１０４）内のＳＰＵ（３０２）を統合する。ＭＦＣ（３１０）は、ＳＰＵにデータ転送および同期機能を提供し、ＣＢＥ（１０４）のための輸送ハブとして機能するＥＩＢ（３１２）に対するＳＰＵインタフェースを実施する。また、ＭＦＣ（３１０）は、ＳＰＥ（３０８）とＰＰＥ（１４８）との間の通信インタフェースを実施し、ＤＭＡを介してＳＰＵ（３０２）のローカル記憶装置（１４１）とＣＢＥシステム・メモリすなわちＲＡＭ（１４０）との間のバルク・データ転送を実行するデータ転送エンジンとして機能する。ＳＰＵ（３０２）から専用データ転送エンジンへとデータ転送の負担を軽減することによって、データ処理およびデータ転送が並列に進行し、ソフトウェア・パイプライニングおよびダブル・バッファリング等の最新のプログラミング方法をサポートする。非同期に、かつＰＰＥ（１４８）およびＳＰＥ（３０２）上でのデータ処理と並列に、高性能のデータ転送を実行する能力を提供することで、ＭＦＣ（３１０）は、アプリケーション・レベルでデータ処理および転送を明示的にインターリーブする必要をなくす。
【００５９】
図３の例におけるＳＬＭＰＭ（１４６）は、ホスト・コンピュータ（１１０）とアクセレレータ（１０４）との間の複数のデータ通信モードについてデータ通信性能を監視し、ホスト・コンピュータ（１１０）上のアプリケーション・プログラム（１６６）から、ホスト・コンピュータ（１１０）からアクセレレータ（１０４）にデータ通信モードに従ってデータを送信するための要求を受信し、監視した性能に応じて、要求されたデータ通信モードに従ってデータを送信するか否かを判定し、要求されたデータ通信モードに従ってデータを送信しない場合、監視した性能に依存して、データを送信するための別のデータ通信モードを選択し、この選択したデータ通信モードに従ってデータを送信することができる。
【００６０】
図３の例示的なハイブリッド・コンピューティング環境（１００）においては、ホスト・コンピュータ（１１０）上でホスト・アプリケーション・プロセスが実行することができる。本発明の実施形態に従ったハイブリッド・コンピューティング環境においてデータ処理を実行するには、ホスト・アプリケーション・プロセスの命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ（１０４）上で実行スレッドを開始し、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセスに、実行スレッドのためのＰＩＤを戻し、ホスト・アプリケーション・プロセスによって、アクセレレータ（１０４）上の実行スレッドがあたかもホスト・コンピュータ（１１０）上の実行スレッドであるかのように、この実行スレッドを管理すれば良い。
【００６１】
更に説明を行うため、図４は、本発明の実施形態に従ったデータ処理に有用な更に別の例示的なハイブリッド・コンピューティング環境（１００）のブロック図を示す。図４のハイブリッド・コンピューティング環境は、図２のハイブリッド・コンピューティング環境と類似し、これと同様に、４つのコンピュータ・ノード（１０２、１０３）を含み、その各々が、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（１１０）および各々がアクセレレータ・アーキテクチャを有する１つ以上のアクセレレータ（１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。図４の例におけるホスト・コンピュータ（１１０）およびアクセレレータ（１０４）は、システム・レベル・メッセージ伝達モジュール（１４６）または少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（１２８、１３０）によるデータ通信のために相互に適合されている。図４の例においては、ホスト・コンピュータ（１１０）は、イーサネット構造（１２８）およびＰＣＩｅ構造（１３０）によって、アクセレレータ（１０４）に適合されている。
【００６２】
図４は、ＬＡＮＬスーパーコンピュータにおいて実施されるものと同様のハイブリッド・コンピューティング環境の例を示す。ＬＡＮＬスーパーコンピュータにおいて実施されるホスト・コンピュータ（１１０）は、コンピュータ・ノード（１０３）の拡大図によって示すように、２つのＡＭＤ  Ｏｐｔｅｒｏｎプロセッサ（１５５）を含み、その各々がデュアル・コア・プロセッサである。ホスト・コンピュータ（１１０）のコア（１５２）は各々、図４の例において、単一の完全に機能するｘ８６プロセッサ・コアとして示し、各コアがそれ自身のアーキテクチャ・レジスタ・セット（１５４）を有する。図４の例におけるプロセッサ・コア（１５２）は各々、動作的にＲＡＭ（１４２）に結合され、ＲＡＭにはアプリケーション・プログラム（１６６）のインスタンス、ＳＬＭＰＭ（１４６）のインスタンス、およびオペレーティング・システム（１４５）が記憶されている。ＬＡＮＬスーパーコンピュータの例では、ＳＬＭＰＭ（１４６）は、本発明の実施形態に従って改良されたデータ通信および同期（「ＤＡＣＳ」）ライブラリである。
【００６３】
図４の例における各ｘ８６プロセッサ・コア（１５２）は、図３に関連して上述したようなＣＢＥとして実施される別個のアクセレレータ（１０４）に対して、イーサネット（１２８）およびＰＣＩｅ（１３０）構造によって適合されている。この例におけるホスト・コンピュータ（１１０）の各ＡＭＤ  Ｏｐｔｅｒｏｎプロセッサ（１５５）の各コア（１５２）は、少なくとも１つのＣＢＥに接続されている。この例では、ＣＢＥ（１０４）に対するＯｐｔｅｒｏｎプロセッサ・コアの比率は１対１であるが、他の例示的な実施形態では、例えば１対２、１対３等、アクセレレータに対するプロセッサの異なる比率を実施可能であることは、当業者には認められよう。
【００６４】
図４の例において、各ｘ８６プロセッサ・コア（１５２）上で実行するＳＬＭＰＭ（１４６）の各インスタンスは、ホスト・コンピュータ（１１０）とプロセッサ・コア（１５２）に接続されたアクセレレータ（１０４）との間のデータ通信モードを通してデータ通信性能を監視し、ホスト・コンピュータ（１１０）のプロセッサ・コア（１５２）上で実行するアプリケーション・プログラム（１６６）のインスタンスから、ホスト・コンピュータ（１１０）からプロセッサ・コア（１５２）に接続されたアクセレレータ（１０４）に対してデータ通信モードに従ってデータを送信するための要求を受信し、監視した性能に応じて、要求されたデータ通信モードに従ってデータを送信するか否かを判定し、要求されたデータ通信モードに従ってデータを送信しない場合、監視した性能に従って、データを送信するための別のデータ通信モードを選択し、この選択されたデータ通信モードに従ってデータを送信するように構成することができる。
【００６５】
図４の例示的なハイブリッド・コンピューティング環境（１００）においては、ホスト・コンピュータ（１１０）上でホスト・アプリケーション・プロセスが実行することができる。本発明の実施形態に従ってハイブリッド・コンピューティング環境（１００）におけるデータ処理を実行するには、ホスト・アプリケーション・プロセスの命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ（１０４）上で実行スレッドを開始し、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセスに、実行スレッドのためのＰＩＤを戻し、ホスト・アプリケーション・プロセスによって、アクセレレータ（１０４）上の実行スレッドがあたかもホスト・コンピュータ（１１０）上の実行スレッドであるかのように、この実行スレッドを管理すれば良い。
【００６６】
更に説明を行うため、図５は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための例示的な方法を示すフロー・チャートを示す。図５の方法は、本明細書において上述したハイブリッド・コンピューティング環境と同様のハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、ＳＬＭＰＭ（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ（１１０）上で実行するホスト・アプリケーション・プロセス（１６７）を含む。
【００６７】
図５の方法は、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）の開始を要求すること（５０８）を含む。アクセレレータ上の実行スレッド（１６９）の開始の要求（５０８）は、プロセス間データ通信メッセージ（５１０）において、アクセレレータ上で実行スレッド（１６９）を開始するための命令を送信することを含み、このメッセージ（５１０）は実行スレッドのための動作情報を含む。メッセージ（５１０）は、ホスト・アプリケーション・プロセス（１６７）の観点からは、ＳＬＭＰＭ（１４６）が提供する関数に対するＡＰＩ（５１２）を介した呼び出しとして実施することができる。
【００６８】
図５の方法は、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）を含む。ホスト・アプリケーション・プロセス（１６７）の命令で、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）は、データ通信メッセージ（５１０）内の命令に応答して実行することができ、データ通信メッセージ（５１０）に含まれる動作情報を用いてＵｎｉｘタイプのｆｏｒｋ−ｅｘｅｃシステム・コマンドを実行する。
【００６９】
また、図５の方法は、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）を含む。ホスト・アプリケーション・プロセス（１６７）に実行スレッド（１６９）のためのＰＩＤ（５０６）を戻すこと（５０４）を行うには、上述のＵｎｉｘタイプの「ｅｘｅｃ」システム・コマンドを実行する前に、分岐したプロセスによってＵｎｉｘタイプの「ｇｅｔｐｉｄ」システム・コマンドを実行すれば良い。そのリターンは、分岐したプロセスのＰＩＤであり、後に実行される実行スレッド（１６９）のＰＩＤである。更に、分岐したプロセスによってＳＬＭＰＭにリターンされたＰＩＤを提供し、ＳＬＭＰＭによってホスト・アプリケーション・プロセス（１６７）に、プロセス間データ通信メッセージ内でＰＩＤを提供すれば良い。
【００７０】
また、図５の方法は、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかもこの実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）を含む。アクセレレータ上の実行スレッド（１６９）があたかもホスト・コンピュータ上の実行スレッドであるかのように、この実行スレッド（１６９）の管理（５０８）を行うには、実行スレッド（１６９）を開始する際に、ＳＬＭＰＭ（１４６）によって、実行スレッド（１６９）の標準ストリームをホスト・アプリケーション・プロセスの標準ストリームにマッピングし、あたかもスレッドがホスト・コンピュータ上で実行しているかのように、ホスト・アプリケーション・プロセス（１６９）によって、スレッドの動作を開始、一時停止、無効化、または他の方法で制御すれば良い。
【００７１】
更に説明を行うため、図６は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための更に別の例示的な方法を示すフロー・チャートを示す。図６の方法は、図５の方法と同様に、本明細書において上述したハイブリッド・コンピューティング環境と類似したハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、システム・レベル・メッセージ伝達モジュール（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、図６の方法は、図５の方法と同様に、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）と、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）と、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）と、を含む。しかしながら、図６の方法が図５の方法と異なるのは、図６の方法において、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）が、実行スレッド（１６９）を、ホスト・アプリケーション・プロセス（１６７）の子プロセスとして管理すること（６０２）を含む点である。ホスト・アプリケーション・プロセス（１６７）の子プロセスとしての実行スレッド（１６９）の管理（６０２）を行うには、実行スレッド（１６９）を実行しているアクセレレータ（１０４）上で動作しているプロセスとインタラクトし、その際に、あたかもスレッド（１６９）を実行しているプロセスが、通常は子プロセスによって受け継がれるホスト・アプリケーション・プロセスからの属性を受け継いだかのように行えば良い。かかる属性は、実行スレッド（１６９）を開始するためのホスト・アプリケーション・プロセス（１６７）からの命令メッセージ（５１０）に含まれる動作情報に依存して、プロセスの実行時にスレッドを実行するプロセスのために設定される。
【００７２】
更に説明を行うため、図７は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための更に別の例示的な方法を示すフロー・チャートを示す。図７の方法は、図５の方法と同様に、本明細書において上述したハイブリッド・コンピューティング環境と類似したハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、システム・レベル・メッセージ伝達モジュール（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、図７の方法は、図５の方法と同様に、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）と、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）と、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）と、を含む。しかしながら、図７の方法が図５の方法と異なるのは、図７の方法において、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）が、アクセレレータ上での実行スレッド（１６９）の終了時に、ＳＬＭＰＭ（１４６）を介してホスト・アプリケーション・プロセス（１６７）によって終了データ（５０６）を受信すること（７０２）を含む点である。アクセレレータ上での実行スレッド（１６９）の終了時に終了データ（５０６）を受信する（７０２）には、ＳＬＭＰＭ（１４６）によって、アクセレレータ上での実行スレッド（１６９）の実行を監視し、実行スレッドの終了時に、ホスト・アプリケーション・プロセスに、プロセス間データ通信メッセージ内で終了データを送信すれば良い。
【００７３】
更に説明を行うため、図８は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための更に別の例示的な方法を示すフロー・チャートを示す。図８の方法は、図５の方法と同様に、本明細書において上述したハイブリッド・コンピューティング環境と類似したハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、システム・レベル・メッセージ伝達モジュール（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、図８の方法は、図５の方法と同様に、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）と、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）と、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）と、を含む。しかしながら、図８の方法が図５の方法と異なるのは、図８の方法において、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）が、ＳＬＭＰＭ（１４６）によってアクセレレータ上の実行スレッド（１６９）を無効化すること（８０２）を含む点である。ＳＬＭＰＭ（１４６）によってアクセレレータ上の実行スレッド（１６９）を無効化する（８０２）には、コマンドの引数として実行スレッドのＰＩＤを用いてＵｎｉｘタイプの「ｋｉｌｌ」システム・コマンドを実行すれば良い。
【００７４】
更に説明を行うため、図９は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための更に別の例示的な方法を示すフロー・チャートを示す。図９の方法は、図５の方法と同様に、本明細書において上述したハイブリッド・コンピューティング環境と類似したハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、システム・レベル・メッセージ伝達モジュール（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、図９の方法は、図５の方法と同様に、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）と、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）と、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）と、を含む。しかしながら、図９の方法が図５の方法と異なるのは、図９の方法が、ＳＬＭＰＭ（１４６）によってホスト・アプリケーション・プロセス（１６７）の終了を検出すること（９０２）、および、この終了時にＳＬＭＰＭ（１４６）によってアクセレレータ上の実行スレッド（１６９）を無効化すること（９０４）を含む点である。ホスト・アプリケーション・プロセス（１６７）の終了を検出する（９０２）には、連続的または周期的にホスト・アプリケーション・プロセス（１６７）の実行を監視すれば良い。ＳＬＭＰＭ（１４６）は、Ｕｎｉｘタイプの「ｋｉｌｌ」コマンドによって、上述したようにアクセレレータ上の実行スレッド（１６９）を無効化することができる。
【００７５】
更に説明を行うため、図１０は、本発明の実施形態に従ったハイブリッド・コンピューティング環境におけるデータ処理のための更に別の例示的な方法を示すフロー・チャートを示す。図１０の方法は、図５の方法と同様に、本明細書において上述したハイブリッド・コンピューティング環境と類似したハイブリッド・コンピューティング環境において実行される。かかるハイブリッド・コンピューティング環境は、ホスト・コンピュータ・アーキテクチャを有するホスト・コンピュータ（図２の１１０）およびアクセレレータ・アーキテクチャを有するアクセレレータ（図２の１０４）を含む。アクセレレータ・アーキテクチャは、特定クラスのコンピューティング機能の実行速度について、ホスト・コンピュータ・アーキテクチャに対して最適化されている。ホスト・コンピュータ（図２の１１０）およびアクセレレータ（図２の１０４）は、システム・レベル・メッセージ伝達モジュール（図２の１４６）または任意に少なくとも２つの異なる構造タイプの２つ以上のデータ通信構造（図２の１２８、１３０）によるデータ通信のために相互に適合されている。また、図１０の方法は、図５の方法と同様に、ホスト・アプリケーション・プロセス（１６７）の命令で、システム・レベル・メッセージ伝達モジュール（１４６）によって、アクセレレータ上で実行スレッド（１６９）を開始すること（５０２）と、システム・レベル・メッセージ伝達モジュール（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、実行スレッド（１６９）のためのプロセス識別子（「ＰＩＤ」）（５０６）を戻すこと（５０４）と、ホスト・アプリケーション・プロセス（１６７）によって、アクセレレータ上の実行スレッド（１６９）を、あたかも実行スレッド（１６９）がホスト・コンピュータ上の実行スレッドであるかのように管理すること（５０８）と、を含む。しかしながら、図１０の方法が図５の方法と異なるのは、図１０の方法が、ホスト・アプリケーション・プロセス（１６７）の命令で、ＳＬＭＰＭ（１４６）によって、アクセレレータ上の実行スレッド（１６９）が終了したか否かの判定を含めて、待機関数を実行すること（９０６）、および、待機関数のリターン時に、ＳＬＭＰＭ（１４６）によって、ホスト・アプリケーション・プロセス（１６７）に、アクセレレータ上の実行スレッド（１６９）が終了したと教えること（９０８）を含む点である。待機関数を実行する（９０６）には、ホスト・アプリケーション・プロセス（１６９）から、ＳＬＭＰＭ（１４６）によって、プロセス間データ通信メッセージとして待機関数を実行するための命令を受信すれば良い。この命令は、アクセレレータ（１０４）上で動作している実行スレッド（１６９）のＰＩＤを含む。待機関数のリターン時に、ホスト・アプリケーション・プロセス（１６７）に、アクセレレータ上の実行スレッド（１６９）が終了したことを教える（９０８）には、アクセレレータ上の実行スレッド（１６９）が終了したことの通知を、プロセス間データ通信メッセージ（９１０）内で送信すれば良い。
【００７６】
本発明の例示的な実施形態について、主として、完全に機能するハイブリッド・コンピューティング環境におけるデータ処理の文脈で説明する。しかしながら、本発明の方法の態様は、いずれかの適切なデータ処理システムと共に用いるために信号記録媒体上に配されたコンピュータ・プログラムにおいて具現化可能であることは、当業者には理解されよう。かかる信号記録媒体は、磁気媒体、光媒体、または他の適切な媒体を含む、機械読み取り可能情報のための伝送媒体または記録可能媒体とすることができる。記録可能媒体の例は、ハード・ドライブにおける磁気ディスクまたはディスケット、光ドライブのためのコンパクト・ディスク、磁気テープ、および当業者に想起されるような他のものを含む。伝送媒体の例は、音声通信のための電話ネットワーク、ならびに、例えばイーサネット（ＴＭ）等のデジタル・データ通信ネットワーク、ならびに、インターネット・プロトコルおよびワールド・ワイド・ウェブによって通信を行うネットワークを含む。適切なプログラミング手段を有するいかなるコンピュータ・システムも、プログラムにおいて具現化されるように本発明の方法のステップを実行可能であることは、当業者には直ちに認められよう。本明細書において記載した例示的な実施形態のいくつかは、コンピュータ・ハードウェア上にインストールされて実行するソフトウェアに適応させているが、ファームウェアとして、またはハードウェアとして実施される代替的な実施形態が本発明の範囲内であることは、当業者には直ちに認められよう。
【００７７】
前述の記載から、本発明の真の精神から逸脱することなく本発明の様々な実施形態において変形および変更が可能であることは理解されよう。本明細書における記載は、例示の目的のためだけのものであり、限定の意味で解釈されるものではない。本発明の範囲は、特許請求の範囲の文言によってのみ限定される。
【符号の説明】
【００７８】
１００  ハイブリッド・コンピューティング環境
１０２、１０３  コンピュータ・ノード
１０４  アクセレレータ
１１０  ホスト・コンピュータ
１４６  システム・レベル・メッセージ伝達モジュール
１６７  ホスト・アプリケーション・プロセス
１６９  実行スレッド
【図１】
2010061648.tif 000003
【図２】
2010061648.tif 000004
【図３】
2010061648.tif 000005
【図４】
2010061648.tif 000006
【図５】
2010061648.tif 000007
【図６】
2010061648.tif 000008
【図７】
2010061648.tif 000009
【図８】
2010061648.tif 000010
【図９】
2010061648.tif 000011
【図１０】
2010061648.tif 000012