(57)【要約】【課題】並列プログラムの実行時間を短くすること。【解決手段】故障監視デーモン３１が、一定時間間隔で計算ノード１及び経路を監視し、ポート故障を検出すると、故障情報ファイルを作成して全計算ノード１へ配付する。故障情報ファイルは、故障情報記憶部４１に記憶される。そして、送信確認部４３が、データ送信後に一定時間経過してもデータ受信完了が通知されない場合に、いずれかの経路の故障によりデータ送信が失敗したと判断する。そして、送信確認部４３は、故障情報記憶部４１を参照して経路を再検索し、再検索した経路を用いてデータを再送信する。【選択図】図４
2018097435.tif 000002
【特許請求の範囲】
【請求項１】
計算ノードのポートの故障情報を定期的に収集し、故障情報に更新があった場合に、全計算ノードに故障ポートの情報を含む故障ポート情報を送信する管理ノードと、
低通信ライブラリにおいて、計算ノード間通信を行って失敗したときに、前記管理ノードにより送信された故障ポート情報を参照して再送ルートを決定し、決定した再送ルートを用いて前記計算ノード間通信を再実行する複数の計算ノードと
を有することを特徴とする並列処理装置。
【請求項２】
前記再送ルートを決定して前記計算ノード間通信を再実行する処理は、送信完了を確認する処理の中で行うことを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記故障ポート情報には、計算ノードを識別するためのノード識別子、該計算ノードの並列処理装置における座標を示す座標情報、隣接する計算ノードへのデータ送信に用いられるポートを識別するポート番号、及び、ポートの状態が含まれることを特徴とする請求項１又は２に記載の並列処理装置。
【請求項４】
並列プログラムを連携して実行する複数の計算ノード間の通信を実現するノード間通信プログラムにおいて、
前記複数の計算ノードを管理する管理ノードが各計算ノードのポートの故障情報を定期的に収集し、故障情報に更新があった場合に、故障ポートの情報に関して作成した故障ポート情報を前記管理ノードから受信し、
計算ノード間通信を行って失敗したときに、前記故障ポート情報を参照して再送ルートを決定し、
決定した再送ルートを用いて前記計算ノード間通信を再実行する
処理をコンピュータに実行させることを特徴とするノード間通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置及びノード間通信プログラムに関する。
【背景技術】
【０００２】
ネットワークで接続された複数の計算ノードが連携して並列プログラムを実行するＨＰＣ（High  Performance  Computing）では、故障計算ノードや故障経路がジョブの割り当て時にわかっている場合には、故障個所を避けるように通信経路の設定が行われる。しかし、ジョブ実行中に通信経路が切断された場合、発行された通信命令が送信先の計算ノードに届かず、通信命令が失われてしまう。
【０００３】
そこで、通信命令を再送することが行われる。例えば、ＭＰＩ（Message  Passing  Interface）ライブラリを用いて通信を行う場合、ＭＰＩライブラリは、下層の低レベル通信ライブラリを介して通信を行うため、低レベル通信ライブラリの送信関数と受信確認関数を複数回呼び出すことで再送を行う。
【０００４】
なお、送信先プロセッサから、受信バッファの異常発生により受信バッファが使用不許可となったことが通知された場合は送信データの再送信を停止し、受信バッファが使用中であることが通知された場合は所定のタイミングで送信データの再送信を行う技術がある。この技術によれば、無意味な再送信の繰り返しを防ぐことができる。
【０００５】
また、受信先で障害が発生すると、サービスプロセッサが、宛先の論理アドレスを物理アドレスに変換する変換テーブルの論理アドレスと物理アドレスの対応を変更することで、ネットワークルーティングの動的再構成処理を高速かつ効率的に行う技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−２６５９８９号公報
【特許文献２】特開平７−２６２１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
通信命令を再送するために、低レベル通信ライブラリの送信関数と受信確認関数を複数回呼び出すと、並列プログラム実行時間が長くなるという問題がある。
【０００８】
本発明は、１つの側面では、並列プログラムの実行時間を短くすることを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、並列処理装置は、管理ノードと複数の計算ノードとを備える。管理ノードは、計算ノードのポートの故障情報を定期的に収集し、故障情報に更新があった場合に、全計算ノードに故障ポートの情報を含む故障ポート情報を送信する。各計算ノードは、低通信ライブラリにおいて、計算ノード間通信を行って失敗したときに、管理ノードにより送信された故障ポート情報を参照して再送ルートを決定し、決定した再送ルートを用いて計算ノード間通信を再実行する。
【発明の効果】
【００１０】
１つの側面では、本発明は、並列プログラムの実行時間を短くすることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係る並列処理装置の構成を示す図である。
【図２】図２は、通信に関係するコンポーネントの階層構造を示す図である。
【図３】図３は、送信命令キュー、送信完了キュー及び受信完了キューの関係を説明するための図である。
【図４】図４は、並列処理装置の機能構成を示す図である。
【図５】図５は、故障情報ファイルの一例を示す図である。
【図６】図６は、故障情報ファイルの配付を説明するための図である。
【図７】図７は、再送時の経路変更を説明するための図である。
【図８】図８は、再検索された経路を使う場合の送出方向の情報の一例を示す図である。
【図９】図９は、送信処理のフローを示すフローチャートである。
【図１０】図１０は、故障情報ファイルの作成処理のフローを示すフローチャートである。
【図１１】図１１は、タイムアウト積算を説明するための図である。
【図１２】図１２は、タイムアウト積算の解消を説明するための図である。
【図１３】図１３は、実施例２に係る並列処理装置の機能構成を示す図である。
【図１４】図１４は、実施例２に係る送信部による処理のフローを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する並列処理装置及びノード間通信プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
【実施例１】
【００１３】
まず、実施例１に係る並列処理装置の構成について説明する。図１は、実施例１に係る並列処理装置６の構成を示す図である。図１に示すように、並列処理装置６は、４つの計算ノード１と、ブートＩＯノード１ａと、ＮＳ２と、制御ノード３とを有する。
【００１４】
なお、図１では、説明の便宜上４台の計算ノード１のみを示すが、並列処理装置６は、より多くの計算ノード１を有する。また、図１では、計算ノード１が１次元配置される場合を示すが、計算ノード１は２次元配置、３次元配置等より多くの次元に配置される。また、計算ノード１は、メッシュ状に配置されてもよいし、トーラス状に配置されてもよい。また、図１では、１台のブートＩＯノード１ａのみを示すが、並列処理装置６は、より多くのブートＩＯノード１ａを有する。
【００１５】
計算ノード１は、他の計算ノード１と連携して並列プログラムを実行する情報処理装置である。計算ノード１は、ＣＰＵ（Central  Processing  Unit）＆メモリ１１と、ＮＩ（Network  Interface）１２とを有する。
【００１６】
ＣＰＵ＆メモリ１１は、メインメモリからプログラムを読み出して実行する中央処理装置とプログラムやプログラムの実行途中結果などを記憶するメインメモリである。プログラムは、例えば、ＤＶＤに記憶され、ＤＶＤから読み出されて計算ノード１にインストールされる。あるいは、プログラムは、ネットワークを介して接続されたコンピュータシステムのデータベース等に記憶され、データベース等から読み出されて計算ノード１にインストールされる。そして、インストールされたプログラムは、ＨＤＤ（Hard  Disk  Drive）に記憶され、メインメモリに読み出されてＣＰＵによって実行される。ＮＩ１２は、ＮＳ２を介して他の計算ノード１と通信するためのインターフェースである。
【００１７】
ブートＩＯノード１ａは、計算ノード１へのデータの入力及び計算ノード１からのデータの出力等を行う。ブートＩＯノード１ａは、所定の個数の計算ノード１の入出力を担当する。ブートＩＯノード１ａは、ＣＰＵ＆メモリ１１と、ＮＩ１２とを有する。ブートＩＯノード１ａは、制御ノード３と接続され、制御ノード３と計算ノード１の間のデータの送受信を中継する。
【００１８】
ＮＳ２は、計算ノード１及びブートＩＯノード１ａを接続するためのスイッチである。計算ノード１は、ＮＳ２を介して他の計算ノード１又はブートＩＯノード１ａと通信する。
【００１９】
制御ノード３は、並列処理装置６を制御する装置である。制御ノード３は、ブートＩＯノード１ａと接続される。制御ノード３は、後述するように、計算ノード１及び通信経路を監視する。
【００２０】
次に、通信に関係するコンポーネントの階層構造について説明する。図２は、通信に関係するコンポーネントの階層構造を示す図である。図２に示すように、ＭＰＩライブラリ２１は、低レベル通信ライブラリ２２により実現される。低レベル通信ライブラリ２２は、ユーザ空間で動作するソフトウェアである。低レベル通信ライブラリ２２は、他の計算ノード１の低レベル通信ライブラリ２２と通信を行う。
【００２１】
低レベル通信ライブラリ２２は、ネットワークインターフェースドライバ２３により実現される。ネットワークインターフェースドライバ２３は、カーネル空間で動作するソフトウェアである。ネットワークインターフェースドライバ２３は、ネットワークインターフェース（ＮＩ）１２を用いて他の計算ノード１のネットワークインターフェースドライバ２３と通信を行う。
【００２２】
次に、送信命令キュー、送信完了キュー及び受信完了キューの関係について説明する。図３は、送信命令キュー、送信完了キュー及び受信完了キューの関係を説明するための図である。図３において、送信ノード１ｂは、送信側の計算ノード１であり、受信ノード１ｃは、受信側の計算ノード１である。
【００２３】
図３に示すように、ＮＩ１２は、送信命令キュー１２ａと、送信完了キュー１２ｂと、受信完了キュー１２ｃとを有する。低レベル通信ライブラリ２２は、上位のＭＰＩライブラリ２１から渡された送信命令を送信命令キュー１２ａに書き込んで送信指示を行う（１）。
【００２４】
送信命令キュー１２ａに書き込まれた送信命令を実行すると、ＮＩ１２は、送信完了通知を送信完了キュー１２ｂに設定する（２）。そして、通信相手の受信ノード１ｃにデータ送信が行われる（３）と、受信完了キュー１２ｃに送信完了通知が設定される（４）。図３では、送信ノード１ｂのデータＢ（１０）が受信ノード１ｃのＡ（１０）に送信される。
【００２５】
次に、並列処理装置６の機能構成について説明する。図４は、並列処理装置６の機能構成を示す図である。なお、図４では、説明の便宜上１つの計算ノード１の機能構成を示すが、他の計算ノード１の機能構成も同じである。
【００２６】
図４に示すように、制御ノード３は、故障監視デーモン３１と、故障情報記憶部３２とを有する。計算ノード１は、故障情報記憶部４１と、送信部４２と、送信確認部４３と、受信確認部４４と、再送情報記憶部４５と有する。なお、故障情報記憶部４１、送信部４２、送信確認部４３、受信確認部４４及び再送情報記憶部４５は、低レベル通信ライブラリ２２の機能として実現される。
【００２７】
故障監視デーモン３１は、制御ノード３上で動作するデーモンであり、一定時間毎に全計算ノード１及び通信経路の状態を確認し、ポート故障が発生していた場合には、故障情報ファイルを作成し、故障情報記憶部３２に書き込む。
【００２８】
故障情報記憶部３２は、故障情報ファイルを記憶する。故障情報ファイルには、故障したポートに関する情報が記載される。図５は、故障情報ファイルの一例を示す図である。図５に示すように、故障情報ファイルには、ノードＩＤ（ｎｏｄｅ＿ｉｄ）と、座標情報（ｖｃｏｏｒｄ）と、ポート番号（ｐｏｒｔ＿ｎｏ）と、ポート状態（ｐｏｒｔ＿ｓｔａｔ）が故障した計算ノード１について記載される。
【００２９】
ノードＩＤは、故障が発生した計算ノード１を識別する識別子である。座標情報は、故障が発生した計算ノード１の座標である。例えば、計算ノード１が３次元に配置される場合には、座標情報はｘ、ｙ、ｚで表される。ここで、ｘはＸ軸の座標、ｙはＹ軸の座標、ｚはＺ軸の座標であり、各々０以上の整数である。
【００３０】
ポート番号は、隣接する計算ノード１と通信するためのポートの番号である。例えば、計算ノード１が３次元に配置される場合には、「０」は「Ｚ＋」に対応し、「１」は「Ｚ−」に対応し、「２」は「Ｘ−」に対応し、「３」は「Ｘ＋」に対応し、「４」は「Ｙ−」に対応し、「５」は「Ｙ＋」に対応する。ここで、「＋」は各軸の正方向を示し「−」は各軸の負方向を示す。例えば、ポート番号が「０」のポートは、Ｚ軸の正方向にデータを送信する場合に使われる。
【００３１】
ポート状態は、ポートが故障しているか否かを表す。例えば、「１」は「ハード異常ルータＦａｔａｌ検出」を示し、「２」は「ハード異常ポートルータＦａｔａｌ検出」を示し、「３」は「ハード異常Ａｌａｒｍ検出」を示す。
【００３２】
例えば、ノードＩＤが「０１１」である計算ノード１の座標は（１，１，２）、Ｚ軸の正方向にデータを送信する場合に使われるポートが「ハード異常ポートルータＦａｔａｌ検出」の状態にある。
【００３３】
故障監視デーモン３１は、故障情報ファイルを更新すると、故障情報ファイルを全計算ノード１に配付する。図６は、故障情報ファイルの配付を説明するための図である。図６に示すように、故障監視デーモン３１は、例えば、１分毎に全計算ノード１の状態を確認し、故障情報ファイル３２ａを作成する。そして、故障監視デーモン３１は、故障情報ファイル３２ａを更新すると、故障情報ファイル３２ａを全計算ノード１に配付する。故障情報ファイル３２ａは、低レベル通信ライブラリ２２によって使用される。
【００３４】
故障情報記憶部４１は、故障情報ファイル３２ａを記憶する。送信部４２は、ＭＰＩライブラリ２１から送信命令を受信すると、送信命令を送信命令キュー１２ａに書き込んで実行する。送信命令キュー１２ａに書き込まれた送信命令がＮＩ１２により実行されると、ＮＩ１２は送信完了キュー１２ｂに送信完了通知を書き込む。
【００３５】
送信確認部４３は、送信完了キュー１２ｂに送信完了通知が書き込まれたことを確認する。そして、送信確認部４３は、受信完了キュー１２ｃに受信完了通知が書き込まれた否かを確認する。送信確認部４３は、送信命令キュー１２ａの送信命令に対応する受信完了通知を確認する。そして、送信確認部４３は、送信命令に対応する受信完了通知を確認すると、送信完了をＭＰＩライブラリ２１に渡す。
【００３６】
一方、送信命令を送信命令キュー１２ａに書き込んで一定時間経過しても受信完了通知が確認できない場合には、送信確認部４３は、故障が発生したと判定し、再送処理を行う。送信確認部４３は、再送部４３ａを有し、再送部４３ａが再送処理を行う。
【００３７】
再送部４３ａは、故障情報ファイル３２ａを取得し、故障情報ファイル３２ａを使って経路を再構築する。このとき、再送部４３ａは、自身の計算ノード１から他の全ての計算ノード１への経路を再検索する。そして、再送部４３ａは、再構築した経路を用いてデータの再送信を行う。そして、再送部４３ａは、再送したことを示す情報と、再検索した経路を使う場合の送出方向の情報とを再送情報記憶部４５に格納する。
【００３８】
図７は、再送時の経路変更を説明するための図である。図７に示すように、送信ノード１ｂは、Ｘ軸の正方向に隣接する計算ノード１にデータを送信することによって受信ノード１ｃへデータを送信する。その際、経路で故障が発生すると、送信ノード１ｂの再送部４３ａは、故障情報ファイル３２ａを使って送信先の隣接ノードを再計算する。図７では、Ｙ軸の正方向に隣接する計算ノード１が送信先として再計算により特定される。そして、再送部４３ａは、Ｙ軸の正方向に隣接する計算ノード１にデータを再送信する。
【００３９】
なお、データをＸ軸の正負、Ｙ軸の正負のどの方向に送信するかは送信命令により指定される。また、送出方向によってデータの転送経路は決められている。例えば、Ｙ軸の正方向に転送されたデータは、受信ノード１ｃとｙ座標が同じ計算ノード１まで転送され、その後Ｘ軸の正方向に転送されて受信ノード１ｃに到達する。２次元のメッシュ配置の場合には、経路は２つであり、２次元のトーラス配置の場合には、経路は４つである。
【００４０】
受信確認部４４は、受信完了キュー１２ｃに受信完了通知が書き込まれたことが確認された場合に、ＭＰＩライブラリ２１に受信完了を通知する。
【００４１】
再送情報記憶部４５は、再送が行われたか否かを示す情報と、再送部４３ａによって再検索された経路を使う場合の送出方向の情報を記憶する。図８は、再検索された経路を使う場合の送出方向の情報の一例を示す図である。図８は、ノードＩＤが０である計算ノード１の場合を示す。
【００４２】
図８に示すように、再検索された通信経路を使う場合の送出方向の情報には、ノードＩＤと方向とが含まれる。ノードＩＤは、送信先の計算ノード１の識別子である。方向は、対応する計算ノード１に送信する場合の送出方向であり、２次元トーラス配置の場合には、「Ｘ＋」、「Ｘ−」、「Ｙ＋」、「Ｙ−」のいずれかである。例えば、ノードＩＤが「１」である計算ノード１のデータを送信する場合には、ｙ軸の＋方向にデータを送信する。
【００４３】
次に、送信処理のフローについて説明する。図９は、送信処理のフローを示すフローチャートである。図９に示すように、低レベル通信ライブラリ２２は、ＭＰＩライブラリ２１から送信命令を取得する（ステップＳ１）と、送信命令キュー１２ａに送信命令を書き込んでデータ送信を指示する（ステップＳ２）。
【００４４】
そして、低レベル通信ライブラリ２２は、送信完了キュー１２ｂを確認し（ステップＳ３）、ステップＳ６又はステップＳ７がみたされるまでステップＳ４〜ステップＳ７の処理を繰り返す。すなわち、低レベル通信ライブラリ２２は、受信完了キュー１２ｃを確認し（ステップＳ４）、受信完了通知があるか否かを判定する（ステップＳ５）。
【００４５】
そして、低レベル通信ライブラリ２２は、受信完了通知がある場合には、該当する送信の受信完了通知であるか否かを判定し（ステップＳ６）、該当する送信の受信完了通知である場合には、ステップＳ１３へ進む。一方、該当する送信の受信完了通知でない場合には、低レベル通信ライブラリ２２は、ステップＳ４へ戻る。また、受信完了通知がない場合には、低レベル通信ライブラリ２２は、送信後一定時間経過したか否かを判定し（ステップＳ７）、経過していない場合には、ステップＳ４へ戻る。
【００４６】
一方、一定時間経過した場合には、低レベル通信ライブラリ２２は、故障情報ファイル３２ａを取得し（ステップＳ８）、取得した故障情報ファイル３２ａを使って経路を再検索する（ステップＳ９）。そして、低レベル通信ライブラリ２２は、再検索された経路に基づく送信命令を送信命令キュー１２ａに設定し（ステップＳ１０）、データの再送信を指示する（ステップＳ１１）。そして、低レベル通信ライブラリ２２は、再送を行ったことを示す情報と再検索した経路の情報を再送情報記憶部４５に格納し（ステップＳ１２）、ステップＳ３に戻る。
【００４７】
また、ステップＳ６で該当する送信の受信完了通知である場合には、低レベル通信ライブラリ２２は、ＭＰＩライブラリ２１へ送信完了通知を応答し（ステップＳ１３）、その後、ＭＰＩライブラリ２１へ受信完了通知を応答する（ステップＳ１４）。
【００４８】
このように、低レベル通信ライブラリ２２が、データ送信後に一定時間経過した場合に、故障情報ファイル３２ａを用いて経路を再検索し、再検索した経路を用いてデータを再送信するので、ＭＰＩライブラリ２１による再送を不要とすることができる。
【００４９】
なお、ステップＳ１〜ステップＳ２の処理は、低レベル通信ライブラリ２２の送信関数に対応する送信部４２による処理である。ステップＳ１〜ステップＳ１３の処理は、送信確認部４３による処理である。ステップＳ１４の処理は、受信確認部４４による処理である。
【００５０】
次に、故障情報ファイル３２ａの作成処理のフローについて説明する。図１０は、故障情報ファイル３２ａの作成処理のフローを示すフローチャートである。図１０に示すように、故障監視デーモン３１は、並列処理装置６の起動中ステップＳ２１〜ステップＳ２４の処理を繰り返す。
【００５１】
すなわち、故障監視デーモン３１は、一定時間間隔で全計算ノード１及び経路を監視し（ステップＳ２１）、ポートに故障があるか否かを判定する（ステップＳ２２）。そして、ポートに故障がない場合には、故障監視デーモン３１は、ステップＳ２１へ戻る。
【００５２】
一方、ポートに故障がある場合には、故障監視デーモン３１は、故障情報ファイル３２ａを作成し（ステップＳ２３）、作成した故障情報ファイル３２ａを全計算ノード１へ配付する（ステップＳ２４）。
【００５３】
このように、故障監視デーモン３１が、故障情報ファイル３２ａを作成して全計算ノード１へ配付することで、各計算ノード１は、通信経路を再検索することができる。
【００５４】
上述してきたように、実施例１では、故障監視デーモン３１が、一定時間間隔で計算ノード１及び経路を監視し、ポート故障を検出すると、故障情報ファイル３２ａを作成して全計算ノード１へ配付する。そして、低レベル通信ライブラリ２２が、データ送信後に一定時間経過してもデータ受信完了が通知されない場合に、故障情報ファイル３２ａを用いて経路を再検索し、再検索した経路を用いてデータを再送信する。したがって、ＭＰＩライブラリ２１による再送を不要とすることができ、並列プログラムの実行時間を短くすることができる。
【００５５】
また、実施例１では、送信確認部４３が、データ受信完了が通知されない場合に、故障情報ファイル３２ａを用いて経路を再検索し、再検索した経路を用いてデータを再送信する。したがって、受信完了の確認前にＭＰＩライブラリ２１に送信完了を通知することを防ぐことができる。
【００５６】
また、実施例１では、故障ファイル３２ａは、ノードＩＤ、座標情報、ポート番号及びポートの状態を含むので、低レベル通信ライブラリ２２は、故障したポートを使用しない経路を再検索することができる。
【００５７】
なお、実施例１では、低レベル通信ライブラリ２２が故障情報ファイル３２ａを用いて経路を再検索する場合について説明したが、本発明はこれに限定されるものではなく、外部の経路検索プログラムに経路検索を行わせる場合にも同様に適用することができる。
【実施例２】
【００５８】
ところで、上記実施例１では、送信確認部４３は、故障情報ファイル３２ａを用いて再検索した経路の情報を再送情報記憶部４５に格納する。この情報は、再送時だけでなく最初のデータ送信時にも利用可能である。この情報を利用しない場合、他の受信ノード１ｃへのデータ送信でもタイムアウトが発生する場合がある。このような受信ノード１ｃの数が多い場合、タイムアウトが積算される問題がある。
【００５９】
図１１は、タイムアウト積算を説明するための図である。図１１では、枠で囲まれた１５個の計算ノード１のいずれかが受信ノード１ｃになると、タイムアウトが発生し、タイムアウトが積算され、並列プログラムの実行時間が長くなる。例えば、タイムアウト時間を１分とし、経路故障の影響を受ける計算ノード１が５０個あったとすると、最悪の場合、５０分並列プログラムの動作が止まってしまう。
【００６０】
一方、最初のデータ送信から再送情報記憶部４５の情報を用いることによって、タイムアウト積算を解消することができる。図１２は、タイムアウト積算の解消を説明するための図である。図１２に示すように、送信ノード１ｂは、枠で囲まれたいずれかの計算ノード１を受信ノード１ｃとする場合、再送情報記憶部４５の情報を用いてデータの送出方向を変更する。したがって、枠で囲まれたいずれかの計算ノード１を受信ノード１ｃとする場合に、データの再送が不要となり、タイムアウト積算を解消することができる。
【００６１】
そこで、実施例２では、再送情報記憶部４５の情報を用いてデータの送信を行う低レベル通信ライブラリについて説明する。図１３は、実施例２に係る並列処理装置の機能構成を示す図である。
【００６２】
なお、ここでは説明の便宜上、図４に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。図１３に示すように、実施例２に係る計算ノード１０は、図４に示した計算ノード１と比較すると、送信部４２に替えて送信部４２ａを有する。送信部４２ａは、送信を行う際に、再送情報記憶部４５の情報を参照し、再送が行われた場合には、再送情報記憶部４５が記憶する送出情報を用いてデータを送出する。
【００６３】
図１４は、実施例２に係る送信部４２ａによる処理のフローを示すフローチャートである。図１４に示すように、送信部４２ａは、ＭＰＩライブラリ２１から送信命令を取得し（ステップＳ３１）、再送を行ったか否かを再送情報記憶部４５を参照して判定する（ステップＳ３２）。
【００６４】
そして、送信部４２ａは、再送を行った場合には、再検索された経路に基づく送信命令を送信命令キュー１２ａに設定し（ステップＳ３３）、再送を行っていない場合には所定の経路に基づく送信命令を送信命令キュー１２ａに設定する（ステップＳ３４）。そして、送信部４２ａは、データ送信を指示する（ステップＳ３５）。
【００６５】
上述してきたように、実施例２では、送信部４２ａが、再送情報記憶部４５の情報を用いて送出方向を変更するので、計算ノード１間の再送を減らすことができる。
【００６６】
なお、実施例２では、低レベル通信ライブラリ２２が再送情報記憶部４５の情報を用いて送出方向を変更する場合について説明したが、本発明はこれに限定されるものではなく、例えばＭＰＩライブラリ２１が再送情報記憶部４５の情報を用いて送出方向を指示する場合にも同様に適用することができる。
【００６７】
以上の実施例１〜２を含む実施形態に関し、さらに以下の付記を開示する。
【００６８】
（付記１）計算ノードのポートの故障情報を定期的に収集し、故障情報に更新があった場合に、全計算ノードに故障ポートの情報を含む故障ポート情報を送信する管理ノードと、
低通信ライブラリにおいて、計算ノード間通信を行って失敗したときに、前記管理ノードにより送信された故障ポート情報を参照して再送ルートを決定し、決定した再送ルートを用いて前記計算ノード間通信を再実行する複数の計算ノードと
を有することを特徴とする並列処理装置。
【００６９】
（付記２）前記再送ルートを決定して前記計算ノード間通信を再実行する処理は、送信完了を確認する処理の中で行うことを特徴とする付記１に記載の並列処理装置。
【００７０】
（付記３）前記故障ポート情報には、計算ノードを識別するためのノード識別子、該計算ノードの並列処理装置における座標を示す座標情報、隣接する計算ノードへのデータ送信に用いられるポートを識別するポート番号、及び、ポートの状態が含まれることを特徴とする付記１又は２に記載の並列処理装置。
【００７１】
（付記４）再送が行われたことを示す情報を再送経路とともに記憶する再送情報記憶部と、
前記再送情報記憶部を参照し、再送が行われた場合には、前記再送経路を用いて送信を行う送信部と
を有することを特徴とする情報処理装置。
【００７２】
（付記５）並列プログラムを連携して実行する複数の計算ノード間の通信を実現するノード間通信プログラムにおいて、
前記複数の計算ノードを管理する管理ノードが各計算ノードのポートの故障情報を定期的に収集し、故障情報に更新があった場合に、故障ポートの情報に関して作成した故障ポート情報を前記管理ノードから受信し、
計算ノード間通信を行って失敗したときに、前記故障ポート情報を参照して再送ルートを決定し、
決定した再送ルートを用いて前記計算ノード間通信を再実行する
処理をコンピュータに実行させることを特徴とするノード間通信プログラム。
【符号の説明】
【００７３】
１    計算ノード
１ａ    ブートＩＯノード
１ｂ    送信ノード
１ｃ    受信ノード
２    ＮＳ
３    制御ノード
１１    ＣＰＵ＆メモリ
１２    ＮＩ
１２ａ    送信命令キュー
１２ｂ    送信完了キュー
１２ｃ    受信完了キュー
２１    ＭＰＩライブラリ
２２    低レベル通信ライブラリ
２３    ネットワークインターフェースドライバ
３１    故障監視デーモン
３２    故障情報記憶部
３２ａ    故障情報ファイル
４１    故障情報記憶部
４２，４２ａ    送信部
４３    送信確認部
４３ａ    再送部
４４    受信確認部
４５    再送情報記憶部
【図１】
2018097435.tif 000003
【図２】
2018097435.tif 000004
【図３】
2018097435.tif 000005
【図４】
2018097435.tif 000006
【図５】
2018097435.tif 000007
【図６】
2018097435.tif 000008
【図７】
2018097435.tif 000009
【図８】
2018097435.tif 000010
【図９】
2018097435.tif 000011
【図１０】
2018097435.tif 000012
【図１１】
2018097435.tif 000013
【図１２】
2018097435.tif 000014
【図１３】
2018097435.tif 000015
【図１４】
2018097435.tif 000016