(57)【要約】      （修正有）【課題】並列計算機において通信データの送達確認を提供する。【解決手段】本情報処理装置は、記憶装置と、並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、並列計算機に含まれる他の情報処理装置に送信し、記憶装置に第１の識別子を格納し、他の情報処理装置から第２の識別子を受信する通信部と、記憶装置に格納された第１の識別子と通信部が受信した第２の識別子とに基づき、通信命令の実行が完了したか判定し、通信命令の実行が完了した場合に、通信命令の実行が完了したことを並列計算用の通信ライブラリのプロセスに通知する判定部とを有する。【選択図】図５
2018025912.tif 000002
【特許請求の範囲】
【請求項１】
並列計算機に含まれる情報処理装置であって、
記憶装置と、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他の情報処理装置に送信し、前記記憶装置に前記第１の識別子を格納し、前記他の情報処理装置から第２の識別子を受信する通信部と、
前記記憶装置に格納された前記第１の識別子と前記通信部が受信した前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、前記通信命令の実行が完了した場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する判定部と、
を有する情報処理装置。
【請求項２】
前記判定部は、
前記第１の識別子と前記第２の識別子とが同一であるか否かを判定し、前記第１の識別子と前記第２の識別子とが同一である場合、前記通信命令の実行が完了したことを、前記並列計算用の通信ライブラリのプロセスに通知する、
請求項１記載の情報処理装置。
【請求項３】
前記通信ライブラリはＭＰＩ（Message Passing Interface）のライブラリであり、前記通信部と前記判定部は、前記ＭＰＩライブラリに呼び出される低レベル通信ライブラリを前記情報処理装置のプロセッサが実行することによって実現される
請求項１又は２記載の情報処理装置。
【請求項４】
前記通信命令の数が複数であり、
前記通信部は、
前記データと前記第１の識別子とを、前記並列計算機に含まれる他の情報処理装置に送信し、当該他の情報処理装置から前記第２の識別子を受信し、
前記判定部は、
送信した前記第１の識別子の数と受信した前記第２の識別子の数とが同一であるか判定し、前記第１の識別子の数と前記第２の識別子の数とが同一である場合、前記通信命令の実行が完了したことを、前記並列計算用の通信ライブラリのプロセスに通知する、
請求項１記載の情報処理装置。
【請求項５】
前記第１の識別子を送信してから所定時間が経過した後においても前記第２の識別子を受信しない場合、前記データと前記第１の識別子とを送信した第１の経路とは異なる第２の経路を特定する経路特定部
をさらに有し、
前記通信部は、
前記データと前記第１の識別子とは異なる第３の識別子とを、前記経路特定部により特定された前記第２の経路で前記他の情報処理装置に送信する、
請求項１記載の情報処理装置。
【請求項６】
並列計算機に含まれるコンピュータに、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他のコンピュータに送信し、
前記他のコンピュータから第２の識別子を受信し、
前記第１の識別子と前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、
前記通信命令の実行が完了したと判定された場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する、
処理を実行させる通信プログラム。
【請求項７】
並列計算機に含まれるコンピュータが、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他のコンピュータに送信し、前記第１の識別子を記憶装置に格納し、
前記他のコンピュータから第２の識別子を受信し、
前記記憶装置に格納された前記第１の識別子と受信した前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、
前記通信命令の実行が完了したと判定された場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する、
処理を実行する通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機における通信技術に関する。
【背景技術】
【０００２】
ＨＰＣ（High Performance Computing）を行う並列計算機においては、ユーザプログラムの実行開始後、ノードがデータ（例えば計算結果など）を送信した時に通信経路に障害が発生した場合、送信されたデータは送信先のノードには届かず、データは失われる。
【０００３】
この場合、ユーザプログラムのプロセスは失われたデータの到着を待ち続けることになるので並列計算が先に進まない。最終的には、実行時間の制限が超過されるためユーザプログラムの実行は強制的に終了される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−２５２１８４号公報
【特許文献２】特開昭６３−１２４１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、１つの側面では、並列計算機において通信データの送達確認を行うための技術を提供することである。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理装置は、記憶装置と、並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、並列計算機に含まれる他の情報処理装置に送信し、記憶装置に第１の識別子を格納し、他の情報処理装置から第２の識別子を受信する通信部と、記憶装置に格納された第１の識別子と通信部が受信した第２の識別子とに基づき、通信命令の実行が完了したか判定し、通信命令の実行が完了した場合に、通信命令の実行が完了したことを並列計算用の通信ライブラリのプロセスに通知する判定部とを有する。
【発明の効果】
【０００７】
１つの側面では、並列計算機において通信データの送達確認を行えるようになる。
【図面の簡単な説明】
【０００８】
【図１】図１は、並列計算機におけるノードの通信に関係するコンポーネントの階層構造の一例を示す図である。
【図２】図２は、並列計算機の概要を示す図である。
【図３】図３は、計算ノードの機能ブロック図である。
【図４】図４は、ＭＰＩ処理部が実行する処理の処理フローを示す図である。
【図５】図５は、第１の実施の形態の低レベル通信処理部が実行する処理の処理フローを示す図である。
【図６】図６は、通信命令キューに格納されるデータの一例を示す図である。
【図７】図７は、完了キューに格納されるデータの一例を示す図である。
【図８】図８は、経路の設定について説明するための図である。
【図９】図９は、受信側ノードが実行する処理の処理フローを示す図である。
【図１０】図１０は、計算ノード間の通信を説明するための図である。
【図１１】図１１は、計算ノード間の通信を説明するための図である。
【図１２】図１２は、計算ノード間の通信を説明するための図である。
【図１３】図１３は、計算ノード間の通信を説明するための図である。
【図１４】図１４は、計算ノード間の通信を説明するための図である。
【図１５】図１５は、計算ノード間の通信を説明するための図である。
【図１６】図１６は、計算ノード間の通信を説明するための図である。
【図１７】図１７は、計算ノード間の通信を説明するための図である。
【図１８】図１８は、第２の実施の形態の低レベル通信処理部が実行する処理の処理フローを示す図である。
【発明を実施するための形態】
【０００９】
ＨＰＣを実行する並列計算機には、ジョブの割り当て時に経路の障害を把握できている場合にそれらを避けるノード割当およびルート設定を行う機能が組み込まれる。しかし、上で述べたように、ユーザプログラムの実行開始後、ノードがデータを送信した時に経路に障害が発生した場合、送信されたデータは送信先のノードには届かず、データは失われる。そこで、データの送達確認および再送のための機構を導入することを考える。
【００１０】
図１に、並列計算機におけるノードの通信に関係するコンポーネントの階層構造の一例を示す。並列計算機においてはユーザプログラムが実行されるが、ユーザプログラムにおいては、データを転送する場合にＭＰＩ（Message Passing Interface）ライブラリ等の通信ライブラリが呼び出される。ＭＰＩライブラリは階層構造における最上層にある。ＭＰＩライブラリの下には、通信資源を制御する低レベル通信ライブラリがある。低レベル通信ライブラリの下には、ネットワークインタフェースを制御するネットワークインタフェースドライバがある。ネットワークインタフェースドライバの下には、ハードウエアであるネットワークインタフェース（例えばネットワークインタフェースカード（ＮＩＣ：Network Interface Card））がある。ＭＰＩライブラリおよび低レベル通信ライブラリはユーザ空間に属し、ネットワークインタフェースドライバはカーネル空間に属する。
【００１１】
ＭＰＩライブラリのプロセスは、低レベル通信ライブラリのプロセスおよびネットワークインタフェースドライバのプロセスを介して通信を行う。従って、ＭＰＩライブラリにデータの送達確認および再送のための機構を導入すると、低レベル通信ライブラリに含まれる、送信関数および受信確認関数が複数回呼び出されることになるため、実行時間が長くなる。よって、ＨＰＣのように高速な処理が要求される場合、処理速度の観点からＭＰＩライブラリに上記機構を導入することは好ましくない。
【００１２】
そこで、以下では、低レベル通信ライブラリに新たに導入した機構によってデータの送達確認および再送を行う方法について説明する。
【００１３】
［実施の形態１］
図２に、本実施の形態における並列計算機の概要を示す。並列計算機は、複数の計算ノード１ａ乃至１ｅを含む。計算ノード１ａ乃至１ｅの各々は、ネットワークスイッチ２を介して、データを他の計算ノードに送信又は他の計算ノードから受信する。計算ノード１ａ乃至１ｅの各々は、バリア同期を行うためのネットワーク３に接続されており、ネットワーク３を介してバリア同期の実行に使用するデータを他の計算ノードに送信又は他の計算ノードから受信する。
【００１４】
計算ノード１ａは、ＣＰＵ（Central Processing Unit）１１ａと、メモリ１２ａと、ＢＩＵ（Barrier Interface Unit）１３ａと、ＮＩＣ１４ａとを有し、ＣＰＵ１１ａ、メモリ１２ａ、ＢＩＵ１３ａおよびＮＩＣ１４ａはバスを介して接続される。計算ノード１ｂは、ＣＰＵ１１ｂと、メモリ１２ｂと、ＢＩＵ１３ｂと、ＮＩＣ１４ｂとを有し、ＣＰＵ１１ｂ、メモリ１２ｂ、ＢＩＵ１３ｂおよびＮＩＣ１４ｂはバスを介して接続される。計算ノード１ｃは、ＣＰＵ１１ｃと、メモリ１２ｃと、ＢＩＵ１３ｃと、ＮＩＣ１４ｃとを有し、ＣＰＵ１１ｃ、メモリ１２ｃ、ＢＩＵ１３ｃおよびＮＩＣ１４ｃはバスを介して接続される。計算ノード１ｄは、ＣＰＵ１１ｄと、メモリ１２ｄと、ＢＩＵ１３ｄと、ＮＩＣ１４ｄとを有し、ＣＰＵ１１ｄ、メモリ１２ｄ、ＢＩＵ１３ｄおよびＮＩＣ１４ｄはバスを介して接続される。計算ノード１ｅは、ＣＰＵ１１ｅと、メモリ１２ｅと、ＢＩＵ１３ｅと、ＮＩＣ１４ｅとを有し、ＣＰＵ１１ｅ、メモリ１２ｅ、ＢＩＵ１３ｅおよびＮＩＣ１４ｅはバスを介して接続される。メモリ１２ａ乃至１２ｅは、例えばＤＲＡＭ（Dynamic Random Access Memory）である。
【００１５】
ＮＩＣ１４ａ、ＮＩＣ１４ｂ、ＮＩＣ１４ｃ、ＮＩＣ１４ｄおよびＮＩＣ１４ｅはネットワークスイッチ２に接続される。ＢＩＵ１３ａ、ＢＩＵ１３ｂ、ＢＩＵ１３ｃ、ＢＩＵ１３ｄおよびＢＩＵ１３ｅは、バリア同期を行うためのネットワーク３に接続される。
【００１６】
図３に、計算ノード１ａの機能ブロック図を示す。計算ノード１ａは、ＭＰＩ処理部１０１と、低レベル通信処理部１０２と、ネットワークインタフェース制御部１０３と、通信命令キュー１０４と、完了キュー１０５とを含む。計算ノード１ａにおけるＣＰＵ１１ａは、ＭＰＩライブラリ、低レベル通信ライブラリ（本実施の形態の処理を実行するためのプログラムを含む）およびネットワークインタフェースドライバをメモリ１２ａにロードして実行することにより、図３に示したＭＰＩ処理部１０１、低レベル通信処理部１０２およびネットワークインタフェース制御部１０３を実現する。通信命令キュー１０４および完了キュー１０５は、ＮＩＣ１４ａの記憶装置（例えばメモリ）に設けられる。なお、低レベル通信ライブラリは、ハードウエアに備わった通信機能を実行するために通信命令の書き込み、通信の開始および受信の確認等をハードウエアの特性を利用して行うことができる通信ライブラリである。低レベル通信ライブラリは、ハードウエアの機能に強く依存する。
【００１７】
ＭＰＩ処理部１０１は、ＭＰＩライブラリのプロセスとしての処理を実行する。低レベル通信処理部１０２は、低レベル通信ライブラリのプロセスとしての処理並びにデータの送達確認および再送を実行するための処理を実行する。ネットワークインタフェース制御部１０３は、ネットワークインタフェースドライバのプロセスとしての処理を実行する。計算ノード１ｂ乃至１ｅの機能ブロック図は計算ノード１ａの機能ブロック図と同様であるので説明を省略する。
【００１８】
次に、図４乃至図１７を用いて、計算ノード１ａ乃至１ｅの動作を説明する。
【００１９】
まず、図４を用いて、ＭＰＩ処理部１０１が実行する処理を説明する。ここでは、計算ノード１ａの動作を例にして説明を行う。計算ノード１ａにおけるＭＰＩ処理部１０１は、ユーザプログラムからの呼び出しに応じ、低レベル通信処理部１０２に通信命令を渡す（図４：ステップＳ１）。ステップＳ１において渡される通信命令は、メモリ１２ａに格納されているデータを他の計算ノード（以下では、受信側ノードと呼ぶ）に送信するための命令であり、受信側ノードの情報（例えば、受信側ノードの識別子或いは通信アドレス）、受信側メモリの情報（例えば、受信側ノードが有するメモリのアドレスおよびサイズ）及び送信側メモリの情報（例えば、送信側ノード（ここでは計算ノード１ａ）が有するメモリのアドレスおよびサイズ）と、その他の情報とを含む。
【００２０】
ステップＳ１において渡される通信命令に基づいて、低レベル通信処理部１０２は後述の処理を実行する。そして、低レベル通信処理部１０２は処理を完了し、通信命令の実行完了の通知をＭＰＩ処理部１０１に出力する。これに応じ、ＭＰＩ処理部１０１は、通信命令の実行完了の通知を受け取る（ステップＳ３）。そして、ＭＰＩ処理部１０１は、通信が完了したことをユーザプログラムのプロセスに通知する。そして処理は終了する。
【００２１】
次に、図５乃至図８を用いて、通信命令をＭＰＩ処理部１０１から受け取った低レベル通信処理部１０２が実行する処理を説明する。低レベル通信処理部１０２は、ＭＰＩ処理部１０１から通信命令を受け取り（図５：ステップＳ１１）、通信命令キュー１０４に格納する。
【００２２】
低レベル通信処理部１０２は、通信命令キュー１０４において通信命令が格納された領域における所定の領域に識別情報を書き込む（ステップＳ１３）。なお、実際に情報を書き込む場合にはネットワークインタフェース制御部１０３が動作するが、説明を簡単にするため、ネットワークインタフェース制御部１０３の動作についての説明を省略する。以下においても同様とする。
【００２３】
図６に、通信命令キュー１０４に格納されるデータの一例を示す。図６の例では、受信側ノードの情報と、識別情報と、受信側メモリの情報と、送信側メモリの情報と、その他の情報とが格納される。識別情報は、通信命令に対して割り振られる一意の情報（例えば送信回数を示す情報）である。受信側ノードの情報には、データを送信するときの経路の情報が含まれる。
【００２４】
低レベル通信処理部１０２は、通信命令キュー１０４に格納された通信命令および通信命令において指定されたデータ（すなわち、送信側メモリの情報によって特定される、メモリ１２ａ上のデータ）をＮＩＣ１４ａによって受信側ノードに送信する（ステップＳ１５）。受信側ノードが実行する処理は後で説明される。
【００２５】
その後、送信側ノードである計算ノード１ａは完了通知を受信側ノードからＮＩＣ１４ａによって受信し（ステップＳ１６）、完了通知をＮＩＣ１４ａの完了キュー１０５に格納する。なお、ステップＳ１６の処理は必ずしもステップＳ１５の処理の後に行われるわけではないので、ステップＳ１６のブロックは破線で示されている。
【００２６】
図７に、完了キュー１０５に格納されるデータの一例を示す。図７の例では、受信側ノードの情報と、識別情報と、受信側メモリの情報と、その他の情報とが格納される。完了キュー１０５に格納された完了通知が、ステップＳ１５において送信したデータを受信した受信側ノードから受信した完了通知である場合、ステップＳ１５において送信された識別情報と完了キュー１０５に格納される識別情報とは同一である。
【００２７】
低レベル通信処理部１０２は、識別情報を含む完了通知が完了キュー１０５に格納されているか判定する（ステップＳ１７）。
【００２８】
識別情報を含む完了通知が完了キュー１０５に格納されている場合（ステップＳ１９：Ｙｅｓルート）、低レベル通信処理部１０２は、完了通知に含まれる識別情報と、通信命令キュー１０４に格納されている識別情報とが同一であるか判定する（ステップＳ２１）。識別情報が同一ではない場合（ステップＳ２１：Ｎｏルート）、ステップＳ１５において送信したデータの送達を確認できていないので、ステップＳ１７の処理に戻る。一方、識別情報が同一である場合（ステップＳ２１：Ｙｅｓルート）、ステップＳ２７の処理に移行する。
【００２９】
一方、識別情報を含む完了通知が完了キュー１０５に格納されていない場合（ステップＳ１９：Ｎｏルート）、低レベル通信処理部１０２は、ステップＳ１５においてデータを送信してから所定時間が経過したか判定する（ステップＳ２３）。所定時間が経過していない場合（ステップＳ２３：Ｎｏルート）、ステップＳ１７の処理に戻る。一方、所定時間が経過した場合（ステップＳ２３：Ｙｅｓルート）、低レベル通信処理部１０２は、ステップＳ１５においてデータを送信したときに使用した経路とは別の経路をデータの送信経路として設定する（ステップＳ２５）。そしてステップＳ１３の処理に戻る。この場合、ステップＳ１３においては、前回の識別情報とは異なる識別情報が書き込まれる。
【００３０】
図８を用いて、経路の設定について説明する。図８において、円形の図形は計算ノードを表し、ハッチングされた計算ノードは送信側ノードを表す。図８の例においては各計算ノードに２次元座標（ｘ，ｙ）が付与されており、送信側ノードは隣接する４つの計算ノードのうちいずれかのノードへの経路にデータを送出する。なお、図８においては計算ノードが２次元平面に配置される例を示したが、例えば３次元空間にノードが配置されてもよい。その場合には、送信側ノードに隣接する６つの計算ノードのうちいずれかの計算ノードへの経路にデータが送出される。
【００３１】
そして、低レベル通信処理部１０２は、ＭＰＩ処理部１０１から受け取った通信命令の実行を終了するための処理（例えば、通信命令キュー１０４および完了キュー１０５をクリアする処理）を実行し、通信命令の実行完了（すなわち、送信の成功）をＭＰＩ処理部１０１に通知する（ステップＳ２７）。そして処理は終了する。
【００３２】
なお、新しい識別情報を割り振ってデータの再送をした後に元の識別情報を含む完了通知を受信した場合、元の識別情報および新しい識別情報のいずれかについてＭＰＩ処理部１０１に通知を行わないようにしてもよい。これにより、重複した通知がＭＰＩ処理部１０１に渡されることを防ぐことができる。
【００３３】
以上のように、送信した識別情報と同一の識別情報を受信するか否かを判定すれば、識別情報と共に送信したデータを受信側ノードが受信したか否かがわかるようになる。低レベル通信処理部１０２において送達の確認および再送の処理を実行することで、ＭＰＩ処理部１０１が何度も低レベル通信ライブラリの送信関数および受信確認関数を呼び出さなくてもよい（すなわち、処理が単純化される）ので、ユーザプログラムの実行時間を短縮できるようになる。
【００３４】
また、ユーザプログラムが強制終了させることを抑制し、より安定したプログラム実行を保証できるようになる。
【００３５】
なお、低レベル通信ライブラリは通信資源を制御しているため、経路の生存確認および通信命令の喪失の確認を、ＭＰＩ処理部１０１が行うよりも簡単に、１つの送信関数の中で行うことができる。たとえ再送が行われたとしてもＭＰＩ処理部１０１には問題無く処理が進んでいるように見える。
【００３６】
なお、新しい識別情報を割り振ってデータの再送をした後に元の識別情報を含む完了通知を受信した場合、元の識別情報を含む完了通知を破棄してもよい。
【００３７】
次に、図９を用いて、受信側ノード（ここでは、計算ノード１ｂとする）が実行する処理を説明する。まず、受信側ノードは送信側ノードである計算ノード１ａから通信命令をＮＩＣ１４ｂによって受信し、通信命令から受信側ノードの情報、識別情報、受信側メモリの情報およびその他の情報を取り出し、ＮＩＣ１４ｂの完了キュー１０５に格納する（図９：ステップＳ３１）。従って、受信側ノードの完了キュー１０５に格納されるデータと、送信側ノードの完了キュー１０５に格納されるデータは同一である。
【００３８】
また、受信側ノードは送信側ノードである計算ノード１ａからデータをＮＩＣ１４ｂによって受信し、通信命令に含まれる受信側メモリの情報に従い、データをメモリ１２ｂに格納する（ステップＳ３３）。
【００３９】
受信側ノードは、完了キュー１０５に格納されたデータを含む完了通知を、ＮＩＣ１４ｂによって送信側ノードに送信する（ステップＳ３５）。そして処理は終了する。
【００４０】
以上のような処理を実行すれば、受信側ノードがデータを受信できた場合には、送信側ノードが送信した識別情報と同一の識別情報が受信側ノードから送信側ノードに対して送信されるようになる。
【００４１】
次に、図１０乃至図１７を用いて、本実施の形態における計算ノード間の通信を説明する。
【００４２】
図１０に示すように、本実施の形態においては、送信側ノードから受信側ノードに対してデータと通信命令とが送信される。データは、送信側ノードのメモリ空間から受信側ノードのメモリ空間へ送信され、通信命令は、送信側ノードのＮＩＣ１４ａ内の通信命令キュー１０４から受信側ノードのＮＩＣ１４ｂ内の完了キュー１０５へ送信される。
【００４３】
送信側ノードにおいて通信命令が生成された場合、図１１に示すように、識別情報を含む通信命令が通信命令キュー１０４に格納される。図１１の例では、識別情報は「００００１」である。
【００４４】
図１２に示すように、通信命令キュー１０４に格納された通信命令とメモリ１２ａに格納されたデータとが受信側ノードに送信される。データは受信側ノードのメモリ１２ｂに格納され、通信命令から取り出された識別情報等は受信側ノードの完了キュー１０５に格納される。
【００４５】
図１３に示すように、受信側ノードの完了キュー１０５に格納された識別情報等を含む完了通知は送信側ノードに送信され、送信側ノードの完了キュー１０５に格納される。
【００４６】
図１４に示すように、送信側ノードの通信命令キュー１０４に格納された識別情報と送信側ノードの完了キュー１０５に格納された識別情報とが比較される。そして、識別情報が同一である場合には受信側ノードがデータを受信したとみなされる。
【００４７】
一方、図１５に示すように、送信側ノードと受信側ノードとの間の経路に障害が発生しており通信を行うことができない場合、通信命令およびデータは失われ、受信側ノードから識別情報が返ってくることはない。このような場合には、受信側ノードがデータを受信していないとみなされる。
【００４８】
受信側ノードがデータを受信していない場合、図１６に示すように、送信側ノードは経路を変更したうえで通信命令とデータとを受信側ノードに送信する。データは受信側ノードのメモリ１２ｂに格納され、通信命令から取り出された識別情報（図１６の例では「００００２」）等は受信側ノードの完了キュー１０５に格納される。
【００４９】
図１７に示すように、送信側ノードの完了キュー１０５に格納された識別情報等を含む完了通知は送信側ノードに送信され、送信側ノードの完了キュー１０５に格納される。そして、送信側ノードの通信命令キュー１０４に格納された識別情報と送信側ノードの完了キュー１０５に格納された識別情報とが比較され、識別情報が同一であるので受信側ノードがデータを受信したとみなされる。
【００５０】
［実施の形態２］
ＭＰＩ処理部１０１から複数の通信命令が一度に発行された場合、受信側ノードと送信側ノードとの距離や経路の輻輳状況によっては完了通知の到着が遅くなることがあり、第１の実施の形態の処理を通信命令ごとに実行すると実行時間が長くなる。また、通信命令を送信した順番と完了通知を受信する順番とが同じではないこともある。そこで、第２の実施の形態においては、以下のような処理が実行される。
【００５１】
図１８を用いて、通信命令をＭＰＩ処理部１０１から受け取った低レベル通信処理部１０２が実行する処理を説明する。低レベル通信処理部１０２は、ＭＰＩ処理部１０１から複数の通信命令を受け取り（図１８：ステップＳ４１）、複数の通信命令の各々を通信命令キュー１０４に格納する。
【００５２】
低レベル通信処理部１０２は、複数の通信命令の各々について、当該通信命令が格納された領域における所定の領域に識別情報を書き込む（ステップＳ４３）。なお、実際に情報を書き込む場合にはネットワークインタフェース制御部１０３が動作するが、説明を簡単にするため、ネットワークインタフェース制御部１０３の動作についての説明を省略する。以下においても同様とする。
【００５３】
低レベル通信処理部１０２は、通信命令キュー１０４に格納された通信命令および通信命令において指定されたデータ（すなわち、送信側メモリの情報によって特定される、メモリ１２ａ上のデータ）をＮＩＣ１４ａによって受信側ノードに送信する（ステップＳ４５）。第２の実施の形態においては、受信側ノードが複数であってもよいし、１台の受信側ノードに対して複数の通信命令およびデータを送信してもよい。
【００５４】
その後、送信側ノードである計算ノード１ａは完了通知を受信側ノードからＮＩＣ１４ａによって受信し（ステップＳ４６）、完了通知をＮＩＣ１４ａの完了キュー１０５に格納する。なお、ステップＳ４６の処理は必ずしもステップＳ４５の処理の後に行われるわけではないので、ステップＳ４６のブロックは破線で示されている。
【００５５】
低レベル通信処理部１０２は、識別情報を含む完了通知が完了キュー１０５に格納されているか判定する（ステップＳ４７）。
【００５６】
識別情報を含む完了通知が完了キュー１０５に格納されている場合（ステップＳ４９：Ｙｅｓルート）、低レベル通信処理部１０２は、送信した通信命令の数と、受信した完了通知の数とが同一であるか判定する（ステップＳ５１）。送信した通信命令の数と受信した完了通知の数とが同一ではない場合（ステップＳ５１：Ｎｏルート）、ステップＳ４７の処理に戻る。一方、送信した通信命令の数と受信した完了通知の数とが同一である場合（ステップＳ５１：Ｙｅｓルート）、ステップＳ５７の処理に移行する。
【００５７】
一方、識別情報を含む完了通知が完了キュー１０５に格納されていない場合（ステップＳ４９：Ｎｏルート）、低レベル通信処理部１０２は、ステップＳ４５においてデータを送信してから所定時間が経過したか判定する（ステップＳ５３）。所定時間が経過していない場合（ステップＳ５３：Ｎｏルート）、ステップＳ４７の処理に戻る。一方、所定時間が経過した場合（ステップＳ５３：Ｙｅｓルート）、低レベル通信処理部１０２は、受信側ノードに送ることができなかったデータについて、ステップＳ４５においてデータを送信したときに使用した経路とは別の経路をデータの送信経路として設定する（ステップＳ５５）。そしてステップＳ４３の処理に戻る。そして、受信側ノードに送ることができなかったデータのみについて、ステップＳ４３の処理以降の処理が再度実行される。この場合、ステップＳ４３においては、前回の識別情報とは異なる識別情報が書き込まれる。
【００５８】
そして、低レベル通信処理部１０２は、ＭＰＩ処理部１０１から受け取った通信命令の実行を終了するための処理（例えば、通信命令キュー１０４および完了キュー１０５をクリアする処理）を実行し、通信命令の実行完了（すなわち、送信の成功）をＭＰＩ処理部１０１に通知する（ステップＳ５７）。そして処理は終了する。
【００５９】
以上のような処理を実行すれば、複数の通信命令をＭＰＩ処理部１０１から一度に受け取った場合であっても、処理時間が長くなることを抑制することができる。
【００６０】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した計算ノード１ａの機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００６１】
また、上で説明したデータ格納の態様は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００６２】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００６３】
本実施の形態の第１の態様に係る情報処理装置は、（Ａ）記憶装置と、（Ｂ）並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、並列計算機に含まれる他の情報処理装置に送信し、記憶装置に第１の識別子を格納し、他の情報処理装置から第２の識別子を受信する通信部と、（Ｃ）記憶装置に格納された第１の識別子と通信部が受信した第２の識別子とに基づき、通信命令の実行が完了したか判定し、通信命令の実行が完了した場合に、通信命令の実行が完了したことを並列計算用の通信ライブラリのプロセスに通知する判定部とを有する。
【００６４】
このような構成であれば、並列計算機においてデータの送達確認を行えるようになる。また、並列計算用の通信ライブラリによってデータの送達を確認する場合と比較すると、下層の通信ライブラリを何度も呼び出すことが無くなるので、送達の確認に要する時間を短縮できるようになる。
【００６５】
また、判定部は、（ｃ１）第１の識別子と第２の識別子とが同一であるか否かを判定し、第１の識別子と第２の識別子とが同一である場合、通信命令の実行が完了したことを、並列計算用の通信ライブラリのプロセスに通知してもよい。このようにすれば、データが他の情報処理装置に送り届けられたことを適切に確認できるようになる。
【００６６】
また、通信命令の数が複数であってもよい。そして、通信部は、（ｂ１）データと第１の識別子とを、並列計算機に含まれる他の情報処理装置に送信し、当該他の情報処理装置から第２の識別子を受信し、判定部は、（ｃ２）送信した第１の識別子の数と受信した第２の識別子の数とが同一であるか判定し、第１の識別子の数と第２の識別子の数とが同一である場合、通信命令の実行が完了したことを、並列計算用の通信ライブラリのプロセスに通知してもよい。このようにすれば、通信命令の数が複数であっても処理を遅延させることなく送達の確認を行えるようになる。
【００６７】
また、本情報処理装置は、（Ｄ）第１の識別子を送信してから所定時間が経過した後においても第２の識別子を受信しない場合、データと第１の識別子とを送信した第１の経路とは異なる第２の経路を特定する経路特定部をさらに有してもよい。そして、通信部は、（ｂ２）データと第１の識別子とは異なる第３の識別子とを、経路特定部により特定された第２の経路で他の情報処理装置に送信してもよい。例えば第１の経路において障害が発生した場合においても、他の情報処理装置にデータを送り届けることができるようになる。
【００６８】
また、並列計算用の通信ライブラリは、ＭＰＩ（Message Passing Interface）のライブラリであってもよい。
【００６９】
本実施の形態の第２の態様に係る通信方法は、（Ｅ）並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、並列計算機に含まれる他のコンピュータに送信し、第１の識別子を記憶装置に格納し、（Ｆ）他のコンピュータから第２の識別子を受信し、（Ｇ）記憶装置に格納された第１の識別子と受信した第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、（Ｈ）通信命令の実行が完了した場合に、通信命令の実行が完了したことを並列計算用の通信ライブラリのプロセスに通知する処理を含む。
【００７０】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００７１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７２】
（付記１）
並列計算機に含まれる情報処理装置であって、
記憶装置と、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他の情報処理装置に送信し、前記記憶装置に前記第１の識別子を格納し、前記他の情報処理装置から第２の識別子を受信する通信部と、
前記記憶装置に格納された前記第１の識別子と前記通信部が受信した前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、前記通信命令の実行が完了した場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する判定部と、
を有する情報処理装置。
【００７３】
（付記２）
前記判定部は、
前記第１の識別子と前記第２の識別子とが同一であるか否かを判定し、前記第１の識別子と前記第２の識別子とが同一である場合、前記通信命令の実行が完了したことを、前記並列計算用の通信ライブラリのプロセスに通知する、
付記１記載の情報処理装置。
【００７４】
（付記３）
前記通信ライブラリはＭＰＩ（Message Passing Interface）のライブラリであり、前記通信部と前記判定部は、前記ＭＰＩライブラリに呼び出される低レベル通信ライブラリを前記情報処理装置のプロセッサが実行することによって実現される
付記１又は２記載の情報処理装置。
【００７５】
（付記４）
前記通信命令の数が複数であり、
前記通信部は、
前記データと前記第１の識別子とを、前記並列計算機に含まれる他の情報処理装置に送信し、当該他の情報処理装置から前記第２の識別子を受信し、
前記判定部は、
送信した前記第１の識別子の数と受信した前記第２の識別子の数とが同一であるか判定し、前記第１の識別子の数と前記第２の識別子の数とが同一である場合、前記通信命令の実行が完了したことを、前記並列計算用の通信ライブラリのプロセスに通知する、
付記１記載の情報処理装置。
【００７６】
（付記５）
前記第１の識別子を送信してから所定時間が経過した後においても前記第２の識別子を受信しない場合、前記データと前記第１の識別子とを送信した第１の経路とは異なる第２の経路を特定する経路特定部
をさらに有し、
前記通信部は、
前記データと前記第１の識別子とは異なる第３の識別子とを、前記経路特定部により特定された前記第２の経路で前記他の情報処理装置に送信する、
付記１記載の情報処理装置。
【００７７】
（付記６）
並列計算機に含まれるコンピュータに、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他のコンピュータに送信し、
前記他のコンピュータから第２の識別子を受信し、
前記第１の識別子と前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、
前記通信命令の実行が完了したと判定された場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する、
処理を実行させる通信プログラム。
【００７８】
（付記７）
並列計算機に含まれるコンピュータが、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる他のコンピュータに送信し、前記第１の識別子を記憶装置に格納し、
前記他のコンピュータから第２の識別子を受信し、
前記記憶装置に格納された前記第１の識別子と受信した前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、
前記通信命令の実行が完了したと判定された場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する、
処理を実行する通信方法。
【００７９】
（付記８）
複数の情報処理装置
を有し、
前記複数の情報処理装置のうち第１の情報処理装置は、
記憶装置と、
並列計算用の通信ライブラリのプロセスから受け取った通信命令において指定されたデータと、第１の識別子とを、前記並列計算機に含まれる第２の情報処理装置に送信し、前記第１の識別子を前記記憶装置に格納し、前記第２の情報処理装置から第２の識別子を受信する第１通信部と、
前記記憶装置に格納された前記第１の識別子と前記第１通信部が受信した前記第２の識別子とに基づき、前記通信命令の実行が完了したか判定し、前記通信命令の実行が完了した場合に、前記通信命令の実行が完了したことを前記並列計算用の通信ライブラリのプロセスに通知する判定部と、
を有し、
前記第２の情報処理装置は、
前記第１の情報処理装置から前記データと前記第１の識別子とを受信し、前記第１の識別子と同じ識別子である第２の識別子を前記第１の情報処理装置に送信する第２通信部を有する、
並列計算機。
【符号の説明】
【００８０】
１ａ，１ｂ，１ｃ，１ｄ，１ｅ  計算ノード    ２  ネットワークスイッチ
３  ネットワーク    １１ａ，１１ｂ，１１ｃ，１１ｄ，１１ｅ  ＣＰＵ
１２ａ，１２ｂ，１２ｃ，１２ｄ，１２ｅ  メモリ
１３ａ，１３ｂ，１３ｃ，１３ｄ，１３ｅ  ＢＩＵ
１４ａ，１４ｂ，１４ｃ，１４ｄ，１４ｅ  ＮＩＣ
１０１  ＭＰＩ処理部    １０２  低レベル通信処理部
１０３  ネットワークインタフェース制御部    １０４  通信命令キュー
１０５  完了キュー
【図１】
2018025912.tif 000003
【図２】
2018025912.tif 000004
【図３】
2018025912.tif 000005
【図４】
2018025912.tif 000006
【図５】
2018025912.tif 000007
【図６】
2018025912.tif 000008
【図７】
2018025912.tif 000009
【図８】
2018025912.tif 000010
【図９】
2018025912.tif 000011
【図１０】
2018025912.tif 000012
【図１１】
2018025912.tif 000013
【図１２】
2018025912.tif 000014
【図１３】
2018025912.tif 000015
【図１４】
2018025912.tif 000016
【図１５】
2018025912.tif 000017
【図１６】
2018025912.tif 000018
【図１７】
2018025912.tif 000019
【図１８】
2018025912.tif 000020