(57)【要約】      （修正有）【課題】バリア同期の実行中に停止したジョブを再開する。【解決手段】制御方法は、複数のノードを有する並列計算機における上記複数のノードのうちいずれかのノードである第１のノードにより実行される。そして、本制御方法は、複数のノードの各々においてジョブのプログラムの実行が停止された場合に、複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集し、第１のノードにおけるジョブのプログラムの停止位置と、複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、第１のノードにおけるジョブのプログラムの再開位置を決定する処理を含む。【選択図】図３
2014106660.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを有する並列計算機の制御プログラムであって、
前記複数のノードのうちいずれかのノードである第１のノードに、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集させ、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定させる
ことを特徴とする、並列計算機の制御プログラム。
【請求項２】
前記ジョブのプログラムの再開位置を決定させる処理において、
前記複数のノードにおけるバリア同期の進行状況に関する情報に基づき、前記並列計算機においてバリア同期がこれ以上進行しない状態に達したか判定させ、
前記バリア同期がこれ以上進行しない状態に達した場合に、前記ジョブのプログラムの再開位置を決定させる
ことを特徴とする、請求項１記載の並列計算機の制御プログラム。
【請求項３】
前記ジョブのプログラムの再開位置を決定させる処理において、
前記第１のノードがバリア同期のための同期データの送信を終えており且つ前記同期データを前記第１のノード以外のノードから受信するのを待っている場合に、前記同期データを再度送信する位置まで戻した位置を再開位置とさせる
ことを特徴とする、請求項１記載の並列計算機の制御プログラム。
【請求項４】
前記ジョブのプログラムの再開位置を決定させる処理において、
前記第１のノードにおいてバリア同期が完了しさらに次のバリア同期のための同期データの送信を終えている場合に、前記次のバリア同期のための同期データを再度送信する位置まで戻した位置を再開位置とさせる
ことを特徴とする、請求項１記載の並列計算機の制御プログラム。
【請求項５】
前記複数の計算ノードの各々は、
演算処理を実行する演算処理装置又は演算処理部を含む
ことを特徴とする、請求項１記載の並列計算機の制御プログラム。
【請求項６】
複数のノードを有する並列計算機の制御方法であって、
前記複数のノードのうちいずれかのノードである第１のノードが、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集し、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定する
ことを特徴とする、並列計算機の制御方法。
【請求項７】
複数のノードを有する並列計算機であって、
前記複数のノードのうちいずれかのノードである第１のノードが、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集する収集部と、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定する決定部と
を有することを特徴とする並列計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機、並列計算機の制御プログラム及び並列計算機の制御方法に関する。
【背景技術】
【０００２】
並列計算機における複数の計算ノードが実行する処理の同期をとる方法として、バリア同期が知られている。ここで、計算ノードとは、並列計算機において演算処理を実行する部分であり、演算処理装置としてのＣＰＵ（Central Processing Unit）又は演算処理部としてのプロセッサコア（Processor Core）等を含む。バリア同期は、各計算ノードがジョブのプログラム内の予め定められた位置においてバリア関数を呼びだすことにより実現できる。例えばＭＰＩ（Message Passing Interface）ライブラリを利用する場合、ジョブのプログラム内においてＭＰＩ＿Ｂａｒｒｉｅｒ関数を呼び出せばバリア同期を実現できる。各計算ノードは、並列計算機における全計算ノードがバリア同期の完了を確認するまでジョブのプログラムを先に進めることができない。
【０００３】
また、並列計算機におけるジョブのプログラムの実行に関して、以下のような技術が知られている。具体的には、並列計算機において、共有メモリに対するアクセス履歴に基づきプログラム再現の同期を取る。その後、記録された情報に基づき再現された共有メモリ及びプロセッサ状態情報によって、チェックポイントからプログラムを再実行する。
【０００４】
しかし、バリア同期を実行中の並列計算機においてジョブを一旦停止し、後に再開する技術は確立されていない。バリア同期の実行中にジョブを停止した場合には、ジョブの再開後にバリア同期が適切に行われず、ジョブの進行が止まってしまうことがある。そのため、バリア同期を実行中にユーザからジョブの停止指示があった場合には、直ちにジョブを停止することはできず、バリア同期が完了するまでジョブの停止を保留することになるという問題がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−６１４４号公報
【特許文献２】特開平７−１３８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
１つの側面では、本発明の目的は、バリア同期の実行中に停止したジョブを再開できるようにするための技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明に係る制御方法は、複数のノードを有する並列計算機における上記複数のノードのうちいずれかのノードである第１のノードにより実行される。そして、本制御方法は、複数のノードの各々においてジョブのプログラムの実行が停止された場合に、複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集し、第１のノードにおけるジョブのプログラムの停止位置と、複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、第１のノードにおけるジョブのプログラムの再開位置を決定する処理を含む。
【発明の効果】
【０００８】
バリア同期の実行中に停止したジョブを再開できるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、バリア同期の進行の一例を示す図である。
【図２】図２は、本実施の形態におけるシステムの概要を示す図である。
【図３】図３は、計算ノードにおいて実行されるプログラムについて説明するための図である。
【図４】図４は、ジョブのプログラムの再開位置を決定する処理の処理フローを示す図である。
【図５】図５は、データ格納部に格納されているデータの一例を示す図である。
【図６】図６は、データ格納部に格納されているデータの一例を示す図である。
【図７】図７は、ＭＰＩ＿Ｂａｒｒｉｅｒ関数の内部で呼び出される関数について説明するための図である。
【図８】図８は、再開位置の決定について説明するための図である。
【図９】図９は、ジョブのプログラムの再開位置を決定する処理の処理フローを示す図である。
【図１０】図１０は、再開位置の決定について説明するための図である。
【図１１】図１１は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【図１２】図１２は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【図１３】図１３は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【図１４】図１４は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【図１５】図１５は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【図１６】図１６は、ジョブのプログラムの停止位置と再開位置との関係について説明するための図である。
【発明を実施するための形態】
【００１０】
並列計算機における通信には、１対１のデータ通信（ここでは、集団通信を含む）と、バリア同期をする際に利用する１対多の通信とがある。１対１のデータ通信においては、ＭＰＩライブラリ等の通信ライブラリが、送信したデータを相手が受信したか否かを確認することができる。そのため、相手が受信したことを確認した後にジョブの停止処理を行い、その停止位置を再開位置とすれば、ジョブの再開後においても通信は問題なく行われる。一方、１対多の通信でバリア同期を実行する場合、通信ライブラリは、バリア同期の開始及び終了については確認することができるものの、バリア同期がどこまで進んでいるのか（すなわち、途中経過）を確認することはできない。
【００１１】
これを具体的に説明するため、図１に、バリア同期の進行の一例を示す。図１の例は、６台の計算ノードが、バリア同期専用のネットワーク（以下、バリアネットワークと呼ぶ）においてバリア同期を進行させる例である。ここで、計算ノードとは、並列計算機において演算処理を実行する部分であり、演算処理装置としてのＣＰＵ又は演算処理部としてのプロセッサコア等を含む。各計算ノードは、ハードウェア及びファームウェアを含むバリアインタフェースを有する。バリアインタフェースは、同期データの受信及び送信並びに待ち合わせを行う機構を複数個有する。ここでは、その機構をゲートと呼ぶ。ゲートには、始点となるゲート、終点となるゲート及び中継点となるゲートがある。各ゲートは、自計算ノードにおけるゲートからの同期データの受信（図１における実線矢印）と、他の計算ノードにおけるゲートからの受信（図１における点線矢印）とを待ち、受信を確認した後に次のゲートに同期データを送信する。各計算ノードにおいては、始点ゲート（ゲート１）が同期データを送信し、中継ゲート（ゲート２及びゲート３）が中継をし、終点ゲート（始点ゲートと同じゲートであるゲート１）がバリア同期完了の確認を行う。通信ライブラリは、ゲート毎に、受信及び送信の相手となるゲートの情報（例えば、計算ノード番号及びゲート番号）を設定する。通信ライブラリは、始点ゲート及び終点ゲートにおけるバリア同期の状態を確認することはできるが、中継ゲート（図１においては、ゲート２及びゲート３）におけるバリア同期の状態等を確認することができない。
【００１２】
ここで、ユーザからジョブの停止指示があった場合を考える。ジョブの停止指示があったときに計算ノード１乃至６がゲート１から同期データを送信し終わっていれば、計算ノード１乃至６におけるバリア同期は完了する。一方、同期データを送信し終えていない計算ノードがあった場合は、中継ゲートのいずれかが、同期データを送信し終えていない計算ノードから同期データを受信するのを待つことになり、終点ゲートに同期データが到達しない。この際、通信ライブラリは、各計算ノードの中継ゲートにおけるバリア同期の状態を確認することができないため、バリア同期がどの中継ゲートで止まっているのかがわからない。よって、通信ライブラリは、ジョブのプログラムをどの位置から再開すればバリア同期が適切に行われるのかがわからない。
【００１３】
そこで、以下では、バリア同期の実行中にジョブを一旦停止し、後に再開する場合において、再開後にバリア同期が適切に行われるようにジョブのプログラムの再開位置を決定する方法について説明する。
【００１４】
図２に、本実施の形態におけるシステムの概要を示す。本実施の形態におけるシステムは、計算ノード１乃至Ｎ（Ｎは２以上の自然数）を含む。図２に示したシステムは、メモリを共有しないＳＰＭＤ（Single Program, Multiple Data）の並列計算機であり、バリア同期によって計算ノード間で同期をとりながら並列でジョブを実行する。但し、ＳＰＭＤの並列計算機に限られるわけではない。
【００１５】
計算ノード１乃至Ｎの各々は、ＣＰＵＮ１及びメモリＮ２が搭載されたマザーボードＮ０を有する。マザーボードＮ０には、例えばＬＡＮ（Local Area Network）カード等の拡張カードであるネットワークインタフェース（図２においては、ＮＩと略されている）Ｎ４及びバリアインタフェース（図２においては、ＢＩと略されている）Ｎ３が接続される。
【００１６】
ネットワークインタフェースＮ４の各々は、例えばレイヤ２スイッチであるネットワークスイッチ２００に接続される。各計算ノードは、ネットワークインタフェースＮ４においてデータを受信及び送信することにより、他の計算ノードと１対１の通信を行う。ネットワークスイッチ２００は、計算ノードのネットワークインタフェース間の通信データを中継する。
【００１７】
バリアインタフェースＮ３の各々は、バリアネットワーク１００を介して他のバリアインタフェースと接続される。計算ノード１乃至Ｎは同じバリアグループに属しており、図１に示したように、各計算ノードが同期データの受信及び送信をすることにより、バリア同期が進行する。バリア同期をするための通信は１対多の通信であり、ネットワークインタフェースＮ４を介した通信とは独立して行われる。
【００１８】
図３を用いて、計算ノード１乃至Ｎにおいて実行されるプログラムについて説明する。ここでは、計算ノード１を例にして説明するが、計算ノード２乃至Ｎについても同様である。計算ノード１においては、収集部１０２及び決定部１０３を含む同期管理部１０１と、ジョブ管理部１０５と、資源管理部１０６と、ジョブ実行部１０７と、通信処理部１０８とがＣＰＵ１１により実行される。また、メモリ１２にはデータ格納部１０４のための領域が確保される。
【００１９】
収集部１０２は、他の計算ノードからバリア同期の進行状況に関する情報を収集し、データ格納部１０４に格納する。決定部１０３は、データ格納部１０４に格納されているデータを用いて、ジョブのプログラムの再開位置を決定する処理等を実行する。ジョブ管理部１０５は、ユーザからジョブのプログラムの停止指示を受け付け、スワップアウト要求を資源管理部１０６に出力する。また、ジョブ管理部１０５は、ジョブ実行部１０７を制御する。資源管理部１０６は、スワップアウト要求を受け取ると、同期管理部１０１を起動する。また、資源管理部１０６は、バリアインタフェース１３及びネットワークインタフェース１４等における資源を解放する処理等を実行する。通信処理部１０８は、例えばＭＰＩライブラリ等の通信ライブラリであり、通信に関する処理を実行する。
【００２０】
次に、図４乃至図１６を用いて、図２に示したシステムの動作について説明する。ここでは、ジョブ（以下、第１のジョブと呼ぶ）のプログラムを停止し、第１のジョブより優先度が高いジョブ（以下、第２のジョブと呼ぶ）のプログラムを実行することを、ユーザが計算ノード１に対して指示した場合を例にして説明する。
【００２１】
ジョブ管理部１０５は、第１のジョブのプログラムの実行の停止指示を受け付けると、ジョブ実行部１０７に第１のジョブの停止を要求する。これに応じ、ジョブ実行部１０７は処理を停止する。ジョブ管理部１０５は、第１のジョブのプログラムの停止位置を示す情報をメモリ１２に格納する。
【００２２】
ジョブ管理部１０５は、第１のジョブのスワップアウト要求を資源管理部１０６に出力する。資源管理部１０６は、他の計算ノードである計算ノード２乃至計算ノードＮに対し、スワップアウト要求を送信する。計算ノード１乃至計算ノードＮの各々における資源管理部１０６は、本実施の形態における処理を実行するスレッドとして、同期管理部１０１を起動する。
【００２３】
同期管理部１０１は、計算ノード１が他の計算ノードとの間で通信を行っている場合、通信処理部１０８に通信を中止させる。例えば、通信処理部１０８は、ネットワークインタフェース１４による通信データの送信を中止し、またバリア同期をするための同期データの送信を中止する。また、同期管理部１０１は、ネットワークインタフェース１４におけるメモリ等に格納された情報のうち退避すべき情報を、例えばハードディスク等の記憶装置に保存する（すなわち、スワップアウトする）。以上のような処理を実行した後、同期管理部１０１は、通信処理部１０８に対し、計算ノード間での通信を可能にする命令を出力する。これにより、ネットワークインタフェース１４の資源を通信に使用できるようになる。
【００２４】
なお、バリアインタフェース１３の資源とネットワークインタフェース１４の資源とは独立であるため、以下で説明するように、バリア同期の進行状況を確認するためにネットワークインタフェース１４の資源を使用することができる。
【００２５】
そして、同期管理部１０１は、第１のジョブのプログラムの再開位置を決定する処理を実行する。この処理については、図４乃至図１６を用いて説明する。
【００２６】
まず、同期管理部１０１における収集部１０２は、ネットワークインタフェース１４を介した通信を行うことにより、バリア同期の進行状況に関する情報を計算ノード２乃至Ｎから収集する（図４：ステップＳ１）。具体的には、収集部１０２は、計算ノード２乃至Ｎにおける所定のメモリ領域に格納されている、バリア同期の進行状況に関する情報を収集する。なお、自計算ノード（ここでは、計算ノード１）についてのバリア同期の進行状況に関する情報は、バリアインタフェース１３におけるメモリ等の記憶装置から取得する。
【００２７】
バリア同期の進行状況に関する情報には、バリア同期をするための同期データの送信をしたか否かを表す情報と、バリア同期の完了状態を表すシーケンス番号とが含まれる。同期データの送信をしたか否かを表す情報は、「Ｒ（１）」又は「Ｂ（０）」のいずれかである。Ｒ（１）は同期データを未だ送信していないことを表し、「Ｂ（０）」は同期データの送信を終えバリア同期の完了を待っていることを表す。バリア同期の完了状態を表すシーケンス番号は、バリア同期が完了する度に１インクリメントされる。初期値は０である。これらの情報は、バリアインタフェースにおけるファームウェア等により更新される。
【００２８】
収集部１０２は、ステップＳ１において収集された、バリア同期の進行状況に関する情報をデータ格納部１０４に格納する。図５に、データ格納部１０４に格納されるデータの一例を示す。図５の例では、計算ノードが４つである場合において、各計算ノードについて同期データの送信をしたか否かを表す情報と、バリア同期の完了状態を表すシーケンス番号とが格納されている。また、収集された情報を基に、収集部１０２が収束判定を行い、収束判定の結果がデータ格納部１０４に格納される。収束判定とは、バリア同期がこれ以上進行しない状態に達したか（すなわち、収束したか）否かを判定することである。「ＯＲ：１」であり且つ「ＭＡＸ−ＭＩＮ：０」である場合には、収束したと判定される。いずれかの計算ノードがＲ（１）である場合に「ＯＲ：１」になり、いずれの計算ノードもＢ（０）である場合には「ＯＲ：０」になる。「ＭＡＸ−ＭＩＮ」は、シーケンス番号の最大値と最小値との差である。図５の例の場合には、「ＯＲ：０」であり且つ「ＭＡＸ−ＭＩＮ：０」であるので、収束していないと判定される。
【００２９】
例えば、図６に示すようなデータがデータ格納部１０４に格納されていれば、バリア同期が収束したと判断される。図６の例では、いずれの計算ノードも送信の状態がＲ（１）であるため、２回目のバリア同期の同期データを未だ送信していない状態にある。また、いずれの計算ノードもシーケンス番号が「１」であるため、１回目のバリア同期が完了している状態にある。
【００３０】
なお、収集部１０２は、ステップＳ１の処理を最初に実行後バリア同期が収束するまで、例えば定期的にバリア同期の進行状況に関する情報を収集し、データ格納部１０４を更新する。
【００３１】
図４の説明に戻り、決定部１０３は、メモリ１２から、計算ノード１における第１のジョブのプログラムの停止位置を特定する（ステップＳ３）。
【００３２】
図７を用いて、ＭＰＩ＿Ｂａｒｒｉｅｒ関数の内部で呼び出される、ＭＰＩより低レベルの通信ライブラリに含まれる関数について説明する。本実施の形態においては、ＭＰＩ＿Ｂａｒｒｉｅｒ関数の内部において、バリア同期の設定関数と、同期データの送信関数と、バリア同期完了の確認関数とが呼び出される。図７においては、右に進むほどプログラムが進行しており、１回目のＭＰＩ＿Ｂａｒｒｉｅｒ関数によりバリア同期の設定関数、同期データ送信関数及びバリア同期完了の確認関数が呼び出され、２回目のＭＰＩ＿Ｂａｒｒｉｅｒ関数により同期データ送信関数が呼び出されている。２回目のＭＰＩ＿Ｂａｒｒｉｅｒ関数によってはバリア同期の設定関数が呼び出されていないが、これは、バリア同期の設定が１回目と同じであるため設定関数を呼び出さなくてもよいからである。
【００３３】
本実施の形態においては、ＭＰＩ＿Ｂａｒｒｉｅｒ関数が呼び出されている間をバリア同期の実行中であるとみなす。そして、ジョブのプログラムの停止位置がＭＰＩ＿Ｂａｒｒｉｅｒ関数の内部であった場合には、具体的にどの位置（例えば、ａ１、（１）、ａ２、（２）、ａ３など）においてジョブのプログラムが停止したかをステップＳ３において特定する。
【００３４】
図４の説明に戻り、決定部１０３は、第１のジョブのプログラムの停止位置が、計算ノード１が既に同期データを送信済みであることを示しているか判断する（ステップＳ５）。図７の例であれば、停止位置が（１）より後である場合には、同期データを送信済みである。なお、第１のジョブのプログラムの停止位置がａ２である場合には、同期データ送信関数が途中で終了することができないので、同期データを送信済みであるとみなす。
【００３５】
同期データを送信済みではない場合（ステップＳ５：Ｎｏルート）、決定部１０３は、データ格納部１０４における収束判定の欄を参照することにより、バリア同期が収束したか判断する（ステップＳ７）。ステップＳ７においては、収束判定の欄に「○」が格納されていればバリア同期が収束したと判断し、収束判定の欄に「×」が格納されていればバリア同期が収束していないと判断する。
【００３６】
収束していない場合（ステップＳ７：Ｎｏルート）、決定部１０３は、収集部１０２によるデータ格納部１０４の更新によってバリア同期が収束したと判断できるようになるまでリトライする。
【００３７】
収束している場合（ステップＳ７：Ｙｅｓルート）、同期データを送信するため、決定部１０３は、同期データ送信前の位置を再開位置に決定する（ステップＳ９）。決定部１０３は、再開位置を示す情報をメモリ１２に格納する。処理は端子Ａを介して図９に移行し終了する。同期データの送信前の位置とは、例えば図７における（１）である。
【００３８】
一方、同期データを送信済みである場合（ステップＳ５：Ｙｅｓルート）、決定部１０３は、第１のジョブのプログラムの停止位置が、計算ノード１が既にバリア同期完了を確認済みであることを示しているか判断する（ステップＳ１１）。図７の例であれば、停止位置が（２）より後である場合には、バリア同期完了を確認済みである。なお、第１のジョブのプログラムの停止位置がａ３である場合には、バリア同期完了の確認関数が途中で終了することができないので、バリア同期完了を確認済みであるとみなす。
【００３９】
バリア同期完了を確認済みではない場合（ステップＳ１１：Ｎｏルート）、決定部１０３は、データ格納部１０４における収束判定の欄を参照することにより、バリア同期が収束したか判断する（ステップＳ１３）。ステップＳ１３においては、収束判定の欄に「○」が格納されていればバリア同期が収束したと判断し、収束判定の欄に「×」が格納されていればバリア同期が収束していないと判断する。
【００４０】
収束していない場合（ステップＳ１３：Ｎｏルート）、決定部１０３は、収集部１０２によるデータ格納部１０４の更新によってバリア同期が収束したと判断できるようになるまでリトライする。
【００４１】
収束している場合（ステップＳ１３：Ｙｅｓルート）、決定部１０３は、バリア同期が完了しているか判断する（ステップＳ１５）。ステップＳ１５においては、決定部１０３は、自計算ノード（ここでは、計算ノード１）について、データ格納部１０４に格納されている、同期データを送信したか否かを表す情報を参照することにより判断する。ステップＳ５において同期データを送信済みであると判断されているので、Ｒ（１）であればバリア同期が完了しており、Ｂ（０）であればバリア同期の完了を待っている（すなわちバリア同期が完了していない）とみなすことができる。
【００４２】
バリア同期が完了している場合（ステップＳ１５：Ｙｅｓルート）、バリア同期完了の確認をするため、決定部１０３は、バリア同期完了の確認前の位置を再開位置に決定する（ステップＳ１７）。決定部１０３は、再開位置を示す情報をメモリ１２に格納する。処理は端子Ａを介して図９に移行し終了する。バリア同期完了の確認前の位置とは、図７の例であれば（２）である。
【００４３】
一方、バリア同期が完了していない場合（ステップＳ１５：Ｎｏルート）、同期データを再送信するため、決定部１０３は、同期データ送信の前の位置を再開位置に決定する（ステップＳ１９）。決定部１０３は、再開位置を示す情報をメモリ１２に格納する。処理は端子Ａを介して図９に移行し終了する。同期データ送信の前の位置とは、図７の例であれば（１）である。
【００４４】
図８に、ステップＳ１９の処理により再開位置が決定される場合の一例を示す。図８において軸は時間軸であり、時間の経過に伴ってバリア同期が進行している。計算ノード１乃至３は、同期データを送信した後バリア同期完了を確認しているが、計算ノード４は、同期データを未送信である（そのため、計算ノード４による同期データの送信を表すブロックは、点線で示されている）。よって、計算ノード１乃至４においてはバリア同期が完了することはないので、計算ノード１乃至４については、ステップＳ１９の処理により、同期データ送信の前の位置を再開位置に決定する。
【００４５】
図４の説明に戻り、バリア同期完了を確認済みである場合（ステップＳ１１：Ｙｅｓルート）、処理は端子Ｂを介して図９のステップＳ２１に移行する。
【００４６】
図９の説明に移行し、決定部１０３は、データ格納部１０４における収束判定の欄を参照することにより、バリア同期が収束したか判断する（ステップＳ２１）。ステップＳ２１においては、収束判定の欄に「○」が格納されていればバリア同期が収束したと判断し、収束判定の欄に「×」が格納されていればバリア同期が収束していないと判断する。
【００４７】
収束していない場合（ステップＳ２１：Ｎｏルート）、決定部１０３は、収集部１０２によるデータ格納部１０４の更新によってバリア同期が収束したと判断できるようになるまでリトライする。
【００４８】
収束している場合（ステップＳ２１：Ｙｅｓルート）、決定部１０３は、第１のジョブのプログラムの停止位置が、計算ノード１が既に次のバリア同期の同期データを送信済みであることを示しているか判断する（ステップＳ２３）。図７の例であれば、停止位置が（３）より後である場合には、次のバリア同期の同期データを送信済みである。なお、第１のジョブのプログラムの停止位置がａ４である場合には、同期データ送信関数が途中で終了することができないので、次のバリア同期の同期データを送信済みであるとみなす。
【００４９】
次のバリア同期の同期データを送信済みである場合（ステップＳ２３：Ｙｅｓルート）、決定部１０３は、次のバリア同期の同期データを送信する前の位置を再開位置に決定する（ステップＳ２７）。決定部１０３は、再開位置を示す情報をメモリ１２に格納する。そして処理は終了する。次のバリア同期の同期データを送信する前の位置とは、図７の例であれば（３）である。
【００５０】
一方、次のバリア同期の同期データを送信済みではない場合（ステップＳ２３：Ｎｏルート）、決定部１０３は、バリア同期完了の確認が終了した後の位置を再開位置に決定する（ステップＳ２５）。決定部１０３は、再開位置を示す情報をメモリ１２に格納する。そして処理は終了する。バリア同期完了の確認が終了した後の位置とは、図７の例であれば（３）である。
【００５１】
図１０に、ステップＳ２５の処理により再開位置が決定される場合の一例を示す。図１０において軸は時間軸であり、時間の経過に伴ってバリア同期が進行している。計算ノード１乃至４は、同期データを送信した後バリア同期完了を確認している。そのため、ジョブのプログラムの停止位置をそのまま再開位置としても、次のバリア同期は適切に行われる。
【００５２】
図１１乃至図１６を用いて、ジョブのプログラムの停止位置と再開位置との関係について説明する。図１１乃至図１６は、計算ノードが１２台である場合の例であり、各計算ノードについて、停止位置と、停止直後についてのバリア同期の進行状況に関する情報と、収束後におけるバリア同期の進行状況に関する情報と、再開位置とが示されている。また、停止直後及び収束後について、収束判定の結果が示されている。なお、停止位置及び再開位置は、図７の例に従っている。
【００５３】
図１１の例では、全計算ノードの停止位置が（１）であり、同期データを未送信である。よって、停止位置をそのまま再開位置としても、再開後全ノードが同期データを送信するので、バリア同期は適切に行われる。この場合、計算ノード１乃至１２の再開位置は、ステップＳ９の処理により決定される。
【００５４】
図１２の例では、全計算ノードの停止位置がａ２であるため、収束後、全計算ノードにおいてバリア同期が完了していない。よって、停止位置をそのまま再開位置とすれば、再開後全ノードがバリア同期完了の確認をするので、全ノードにおいてバリア同期が完了する。この場合、計算ノード１乃至１２の再開位置は、ステップＳ１７の処理により決定される。
【００５５】
図１３の例では、計算ノード１乃至８の停止位置がａ２であり、計算ノード９乃至１２の停止位置が（１）である。すなわち、同期データを送信済みの計算ノードと未送信の計算ノードとが混在しているので、停止位置をそのまま再開位置とすると、いずれの計算ノードにおいてもバリア同期が完了することはない。よって、全計算ノードの再開位置を（１）とし、同期データを送信済みである計算ノード１乃至８についても再度同期データを送信するようにする。この場合、計算ノード１乃至８についてはステップＳ１９により再開位置が決定され、計算ノード９乃至１２についてはステップＳ９の処理により再開位置が決定される。
【００５６】
図１４の例では、計算ノード１乃至４の停止位置がａ２であり、計算ノード５及び６の停止位置が（２）であり、計算ノード７及び８の停止位置がａ３であり、計算ノード９乃至１２の停止位置が（３）である。よって、計算ノード１乃至６は同期データを送信済みであるので、バリア同期完了の確認前の位置である（２）から再開すればバリア同期が完了する。また、計算ノード７乃至１２はバリア同期完了を確認済みであるので、バリア同期完了の確認後の位置である（３）から再開すればよい。このような場合、計算ノード１乃至６についてはステップＳ１７の処理により再開位置が決定され、計算ノード７乃至１２についてはステップＳ２５の処理により再開位置が決定される。
【００５７】
図１５の例では、計算ノード１乃至４の停止位置がａ２であり、計算ノード５及び６の停止位置が（２）であり、計算ノード７及び８の停止位置がａ３であり、計算ノード９及び１０の停止位置が（３）であり、計算ノード１１及び１２の停止位置がａ４である。よって、計算ノード１乃至６は同期データを送信済みであるので、バリア同期完了の確認前の位置である（２）から再開すればバリア同期が完了する。また、計算ノード７乃至１０はバリア同期完了を確認済みであるので、バリア同期完了の確認後の位置である（３）から再開すればよい。また、計算ノード１１及び１２については、計算ノード１乃至１０が次のバリア同期の同期データを未送信であり、次のバリア同期が完了しないため、次の同期データを送信する前の位置である（３）から再開位置とする。このような場合、計算ノード１乃至６についてはステップＳ１７の処理により再開位置が決定され、計算ノード７乃至１０についてはステップＳ２５の処理により再開位置が決定され、計算ノード１１及び１２についてはステップＳ２７の処理により再開位置が決定される。
【００５８】
図１６の例では、計算ノード１乃至４の停止位置がａ２であり、計算ノード５及び６の停止位置が（２）であり、計算ノード７及び８の停止位置がａ３であり、計算ノード９乃至１２の停止位置がａ４である。よって、計算ノード１乃至６は同期データを送信済みであるので、バリア同期完了の確認前の位置である（２）から再開すればバリア同期が完了する。また、計算ノード７及び８はバリア同期完了を確認済みであるので、バリア同期完了の確認後の位置である（３）から再開すればよい。また、計算ノード９乃至１２については、計算ノード１乃至８が次のバリア同期の同期データを未送信であり、次のバリア同期が完了しないため、次の同期データを送信する前の位置である（３）を再開位置とする。このような場合、計算ノード１乃至６についてはステップＳ１７の処理により再開位置が決定され、計算ノード７及び８についてはステップＳ２５の処理により再開位置が決定され、計算ノード９乃至１２についてはステップＳ２７の処理により再開位置が決定される。
【００５９】
以上のような処理を実行すれば、バリア同期の実行中にジョブを停止したとしても、バリア同期が適切に行われるようにジョブのプログラムの実行を再開できるようになる。
【００６０】
以上のような処理を実行した後、同期管理部１０１は、第１のジョブのプログラムを再び実行する際に用いる、バリアインタフェース１３におけるメモリ等の記憶装置に格納されている情報を、例えばハードディスク等の記憶装置に退避する。ここで、資源管理部１０６は、バリアインタフェース１３及びネットワークインタフェース１４等における、メモリ及びその他のハードウェア等の資源を解放する。
【００６１】
そして、ジョブ管理部１０５が第２のジョブのプログラムを起動することにより、第２のジョブを計算ノード１において実行する。第２のジョブの実行が完了すると、同期管理部１０１は、第１のジョブを再度実行するために退避しておいた情報を元に戻す（すなわち、スワップインする）。そして、ジョブ管理部１０５は、再開位置を示す情報をメモリ１２から特定する。また、ジョブ管理部１０５は、第１のジョブのプログラムを起動し、決定された再開位置から、第１のジョブを計算ノード１において再度実行する。なお、計算ノード２乃至Ｎにおいても、計算ノード１と同様に、第１のジョブを停止した後に第２のジョブを実行し、第２のジョブの実行が完了すると、第１のジョブの実行を再開する。
【００６２】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した計算ノード１乃至Ｎの機能ブロック構成は実際のプログラムモジュール構成に対応しない場合もある。
【００６３】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００６４】
また、上で述べた例では、バリア同期を実行するための機構としてバリアインタフェースを用いる例を示したが、バリアインタフェースを用いず、ネットワークスイッチにおけるファームウェアに同様の機能を持たせてもよい。
【００６５】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００６６】
本実施の形態に係る並列計算機の制御方法は、複数のノード（当該ノードは、ＣＰＵ又はＣＰＵコアであってもよい）を有する並列計算機における上記複数のノードのうちいずれかのノードである第１のノードにより実行される。そして、本制御方法は、（Ａ）複数のノードの各々においてジョブのプログラムの実行が停止された場合に、複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集し、（Ｂ）第１のノードにおけるジョブのプログラムの停止位置と、複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、第１のノードにおけるジョブのプログラムの再開位置を決定する処理を含む。
【００６７】
このようにすれば、バリア同期の実行中にジョブを停止したとしても、バリア同期が適切に行われるようにジョブのプログラムの実行を再開できるようになる。
【００６８】
また、上で述べたジョブのプログラムの再開位置を決定する処理が、（ｂ１）複数のノードにおけるバリア同期の進行状況に関する情報に基づき、並列計算機においてバリア同期がこれ以上進行しない状態に達したか判定し、（ｂ２）バリア同期がこれ以上進行しない状態に達した場合に、ジョブのプログラムの再開位置を決定する処理を含む。
【００６９】
ジョブのプログラムの停止直後においては、ジョブのプログラムの停止前に送信された同期データによってバリア同期が進行している可能性がある。そこで、上で述べたようにすれば、不適切な再開位置を決定するのを防げるようになる。
【００７０】
また、バリア同期がこれ以上進行しない状態に達したか判定する処理が、（ｂ１−１）複数のノードのうち少なくともいずれかのノードが当該ノードにおいてバリア同期のための同期データを送信し終えておらず且つ複数のノードのうちいずれのノードにおいてもバリア同期が完了した又は複数のノードのうちいずれのノードにおいてもバリア同期が完了していない場合に、バリア同期がこれ以上進行しない状態に達したと判定する処理を含む。このような場合には、バリア同期の進行状況が変化しなくなっているとみなすことができる。
【００７１】
また、上で述べたジョブのプログラムの再開位置を決定する処理が、（ｂ３）第１のノードがバリア同期のための同期データの送信を終えており且つ同期データを第１のノード以外のノードから受信するのを待っている場合に、同期データを再度送信する位置まで戻した位置を再開位置とするようにしてもよい。このような場合には、第１のノード以外のノードが同期データを送信していないので、バリア同期は完了しない。そこで、同期データを再度送信する位置からジョブのプログラムの実行を再開することにより、バリア同期が適切に行われるようになる。
【００７２】
また、上で述べたジョブのプログラムの再開位置を決定する処理が、（ｂ４）第１のノードにおいてバリア同期が完了しさらに次のバリア同期のための同期データの送信を終えている場合に、次のバリア同期のための同期データを再度送信する位置まで戻した位置を再開位置とするようにしてもよい。このような場合には、次のバリア同期のための同期データを送信していないノードが存在する可能性があるため、次のバリア同期は完了しないことがある。そこで、次のバリア同期のための同期データを再度送信する位置からジョブのプログラムの実行を再開させることにより、次のバリア同期が適切に行われるようになる。
【００７３】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００７４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７５】
（付記１）
複数のノードを有する並列計算機の制御プログラムであって、
前記複数のノードのうちいずれかのノードである第１のノードに、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集させ、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定させる
ことを特徴とする、並列計算機の制御プログラム。
【００７６】
（付記２）
前記ジョブのプログラムの再開位置を決定させる処理において、
前記複数のノードにおけるバリア同期の進行状況に関する情報に基づき、前記並列計算機においてバリア同期がこれ以上進行しない状態に達したか判定させ、
前記バリア同期がこれ以上進行しない状態に達した場合に、前記ジョブのプログラムの再開位置を決定させ
ことを特徴とする、付記１記載の並列計算機の制御プログラム。
【００７７】
（付記３）
前記バリア同期がこれ以上進行しない状態に達したか判定させる処理において、
前記複数のノードのうち少なくともいずれかのノードが当該ノードにおいてバリア同期のための同期データを送信し終えておらず且つ前記複数のノードのうちいずれのノードにおいてもバリア同期が完了した又は前記複数のノードのうちいずれのノードにおいてもバリア同期が完了していない場合に、前記バリア同期がこれ以上進行しない状態に達したと判定させる
ことを特徴とする、付記２記載の並列計算機の制御プログラム。
【００７８】
（付記４）
前記ジョブのプログラムの再開位置を決定させる処理において、
前記第１のノードがバリア同期のための同期データの送信を終えており且つ前記同期データを前記第１のノード以外のノードから受信するのを待っている場合に、前記同期データを再度送信する位置まで戻した位置を再開位置とさせる
ことを特徴とする、付記１記載の並列計算機の制御プログラム。
【００７９】
（付記５）
前記ジョブのプログラムの再開位置を決定させる処理において、
前記第１のノードにおいてバリア同期が完了しさらに次のバリア同期のための同期データの送信を終えている場合に、前記次のバリア同期のための同期データを再度送信する位置まで戻した位置を再開位置とさせる
ことを特徴とする、付記１記載の並列計算機の制御プログラム。
【００８０】
（付記６）
前記複数の計算ノードの各々は、
演算処理を実行する演算処理装置又は演算処理部を含む
ことを特徴とする、付記１記載の並列計算機の制御プログラム。
【００８１】
（付記７）
複数のノードを有する並列計算機の制御方法であって、
前記複数のノードのうちいずれかのノードである第１のノードが、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集し、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定する
ことを特徴とする、並列計算機の制御方法。
【００８２】
（付記８）
複数のノードを有する並列計算機であって、
前記複数のノードのうちいずれかのノードである第１のノードが、
前記複数のノードの各々においてジョブのプログラムの実行が停止された場合に、前記複数のノードの各々から、当該ノードにおけるバリア同期の進行状況に関する情報を収集する収集部と、
前記第１のノードにおける前記ジョブのプログラムの停止位置と、前記複数のノードにおけるバリア同期の進行状況に関する情報とに基づき、前記第１のノードにおける前記ジョブのプログラムの再開位置を決定する決定部と
を有することを特徴とする並列計算機。
【符号の説明】
【００８３】
１，２，Ｎ  計算ノード    １００  バリアネットワーク
２００  ネットワークスイッチ    １０，２０，Ｎ０  マザーボード
１１，２１，Ｎ１  ＣＰＵ    １２，２２，Ｎ２  メモリ
１３，２３，Ｎ３  バリアインタフェース
１４，２４，Ｎ４  ネットワークインタフェース
１０１  同期管理部    １０２  収集部
１０３  決定部    １０４  データ格納部
１０５  ジョブ管理部    １０６  資源管理部
１０７  ジョブ実行部    １０８  通信処理部
【図１】
2014106660.tif 000003
【図２】
2014106660.tif 000004
【図３】
2014106660.tif 000005
【図４】
2014106660.tif 000006
【図５】
2014106660.tif 000007
【図６】
2014106660.tif 000008
【図７】
2014106660.tif 000009
【図８】
2014106660.tif 000010
【図９】
2014106660.tif 000011
【図１０】
2014106660.tif 000012
【図１１】
2014106660.tif 000013
【図１２】
2014106660.tif 000014
【図１３】
2014106660.tif 000015
【図１４】
2014106660.tif 000016
【図１５】
2014106660.tif 000017
【図１６】
2014106660.tif 000018