(57)【要約】【課題】バックアップにかかる時間を短縮すること。【解決手段】ノードＮ０〜Ｎ３でバリア同期を行う際に、ノードＮ０は、ノードＮ０〜Ｎ３のうち最初に同期をとるノードＮ１に自ノードの情報（自ノードのチェックポイントデータ）を送信するとともに、ノードＮ１からノードＮ１の情報（ノードＮ１のチェックポイントデータ）を受信する。ノードＮ０は、送信した自ノードの情報を自ノードの記憶装置２０１内の第１の記憶領域に格納するとともに、受信したノードＮ１の情報を記憶装置２０１内の第２の記憶領域に格納する。【選択図】図２
2020067722.tif 000002
【特許請求の範囲】
【請求項１】
同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
制御部を有することを特徴とする並列処理装置。
【請求項２】
前記制御部は、
前記バリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとるグループ内の少なくともいずれかの他ノードに自ノードの情報を送信するとともに、前記グループ内の少なくともいずれかの他ノードから当該他ノードの情報を受信する、
ことを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記制御部は、
前記バリア同期を行う際に、前記グループ内の他ノードそれぞれに自ノードの情報を送信するとともに、前記他ノードそれぞれから当該他ノードの情報を受信し、
送信した前記自ノードの情報を前記第１の記憶領域に格納するとともに、受信した前記他ノードそれぞれの情報を前記記憶装置内の前記他ノードそれぞれに対応する第２の記憶領域に格納する、
ことを特徴とする請求項２に記載の並列処理装置。
【請求項４】
前記制御部は、
前記他ノードと同期をとるタイミングで前記他ノードに自ノードの情報を送信し、
前記他ノードに自ノードの情報を送信し、かつ、前記他ノードから前記他ノードの情報を受信したことに応じて、前記他ノードとの同期が完了したと判断する、
ことを特徴とする請求項１〜３のいずれか一つに記載の並列処理装置。
【請求項５】
前記ジョブの実行を開始してから所定時間が経過した後のバリア同期ごとに、前記他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信する、ことを特徴とする請求項１〜４のいずれか一つに記載の並列処理装置。
【請求項６】
前記制御部は、
前記他ノードで障害が発生した場合、前記他ノードの処理を引き継ぐ予備ノードに、前記第２の記憶領域に格納された前記他ノードの情報を送信し、
前記第１の記憶領域に格納された自ノードの情報に基づいて、前記ジョブの実行を再開する、
ことを特徴とする請求項１〜５のいずれか一つに記載の並列処理装置。
【請求項７】
同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
処理をコンピュータに実行させることを特徴とする並列演算実行プログラム。
【請求項８】
同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
処理をコンピュータが実行することを特徴とするバックアップ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置、並列演算実行プログラムおよびバックアップ方法に関する。
【背景技術】
【０００２】
複数のデータ処理装置（ノード）をネットワークで接続したシステム、例えば、ＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）分野で使われるシステムで実行されるジョブには、長大なデータを多数ノードで長時間にわたって処理するという特徴がある。一方、ハードウェアエラー等の理由で処理を途中で停止しなければならない事態が発生した場合、それまでの処理結果が保証できなくなるため、定期的に中間結果のバックアップをとるといった運用がなされることがある。
【０００３】
先行技術としては、例えば、通常処理の間、基本メモリ素子に書き込まれたデータの写像が、遠隔チェックポイント・メモリ素子によって捕獲され、新たなチェックポイントが望まれる場合、以前に捕獲されたデータを用いて、新たなチェックポイント状態を確立するものがある。また、論理ノード番号と物理ノード番号との対応関係を示すノード番号変換テーブルを含むジョブ管理情報と、論理ノード番号を含むプロセス管理情報とを取得して、ジョブをリスタートするためのリスタートファイルを作成する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０００−５０１２１６号公報
【特許文献２】特開２０１１−１８６６０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、複数のノードでジョブを並列実行する際の各ノードの途中の処理結果のバックアップにかかる時間が増大するという問題がある。
【０００６】
一つの側面では、本発明は、バックアップにかかる時間を短縮することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、並列処理装置が提供される。
【発明の効果】
【０００８】
本発明の一側面によれば、バックアップにかかる時間を短縮することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、処理システム１００のシステム構成例を示す説明図である。
【図２】図２は、実施の形態にかかるバックアップ方法の一実施例を示す説明図である。
【図３】図３は、ノードＮｉのハードウェア構成例を示すブロック図である。
【図４】図４は、ノードＮｉの機能的構成例を示すブロック図である。
【図５】図５は、ノードＮｉの動作例を示す説明図（その１）である。
【図６】図６は、ノードＮｉの動作例を示す説明図（その２）である。
【図７】図７は、ノードＮｉの動作例を示す説明図（その３）である。
【図８】図８は、スモールストレージ領域３１０の他の例を示すブロック図である。
【図９】図９は、ログインサーバ１０３のジョブ実行依頼処理手順の一例を示すフローチャートである。
【図１０】図１０は、ストレージサーバ１０２のロード処理手順の一例を示すフローチャートである。
【図１１】図１１は、管理サーバ１０１の実行制御処理手順の一例を示すフローチャートである。
【図１２】図１２は、ノードＮｉの並列演算実行処理手順の一例を示すフローチャート（その１）である。
【図１３】図１３は、ノードＮｉの並列演算実行処理手順の一例を示すフローチャート（その２）である。
【図１４】図１４は、ノードＮｉの並列演算実行処理手順の一例を示すフローチャート（その３）である。
【図１５】図１５は、ターゲット問題の具体例を示す説明図である。
【図１６Ａ】図１６Ａは、プログラムの一例を示す説明図（その１）である。
【図１６Ｂ】図１６Ｂは、プログラムの一例を示す説明図（その２）である。
【図１６Ｃ】図１６Ｃは、プログラムの一例を示す説明図（その３）である。
【図１６Ｄ】図１６Ｄは、プログラムの一例を示す説明図（その４）である。
【図１７Ａ】図１７Ａは、メモリマップの一例を示す説明図（その１）である。
【図１７Ｂ】図１７Ｂは、メモリマップの一例を示す説明図（その２）である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかる並列処理装置、並列演算実行プログラムおよびバックアップ方法の実施の形態を詳細に説明する。
【００１１】
（実施の形態）
まず、実施の形態にかかる処理システム１００のシステム構成について説明する。
【００１２】
図１は、処理システム１００のシステム構成例を示す説明図である。図１において、処理システム１００は、ノードＮ０〜Ｎｎ（ｎ：１以上の自然数）と、予備ノードＲＮ（図１では、２台）と、管理サーバ１０１と、ストレージサーバ１０２と、ログインサーバ１０３と、を含む。処理システム１００において、ノードＮ０〜Ｎｎ、予備ノードＲＮ、管理サーバ１０１、ストレージサーバ１０２およびログインサーバ１０３は、ネットワーク１１０を介して相互に通信可能に接続される。ネットワーク１１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【００１３】
ノードＮ０〜Ｎｎは、計算処理を実行するコンピュータであり、並列処理装置の一例である。ノードＮ０〜Ｎｎは、例えば、インタコネクトを通じて相互に通信しながら計算処理を実行する。各ノードＮ０〜Ｎｎは、例えば、サーバである。ただし、各ノードＮ０〜Ｎｎは、物理サーバ上で起動される仮想マシンによって実現されることにしてもよい。
【００１４】
以下の説明では、ノードＮ０〜Ｎｎのうちの任意のノードを「ノードＮｉ」と表記する場合がある（ｉ＝０，１，…，ｎ）。
【００１５】
予備ノードＲＮは、ハードウェア故障等の理由でノードＮｉの計算処理が停止したときに、そのノードＮｉの計算処理を引き継いで実行するノードである。管理サーバ１０１は、ジョブの実行を制御したり、ジョブの実行中にエラーが発生したときの対処を実施したりするコンピュータである。
【００１６】
ストレージサーバ１０２は、外部ストレージ１２０を有し、ジョブの実行に用いるデータやプログラムを格納するコンピュータである。例えば、ストレージサーバ１０２は、ジョブの実行を開始する際に、各ノードＮｉにデータおよびプログラムをロードし、ジョブの実行が終了したら、ジョブの実行結果をセーブする。
【００１７】
ログインサーバ１０３は、処理システム１００のユーザがログインして使用するコンピュータである。ログインサーバ１０３では、プログラムの作成やコンパイルが実施される。コンパイル済のプログラムや初期データは、例えば、インタコネクト経由でログインサーバ１０３からストレージサーバ１０２に格納される。
【００１８】
なお、図１の例では、管理サーバ１０１、ストレージサーバ１０２およびログインサーバ１０３を、それぞれ別々のコンピュータとしたが、これに限らない。例えば、管理サーバ１０１、ストレージサーバ１０２およびログインサーバ１０３は、１台のサーバやノードＮｉで実現することにしてもよい。また、各ノードＮｉと各種サーバ１０１〜１０３との通信には、各ノードＮｉの計算処理に影響が出ないように、ノード間のネットワークとは異なる別ネットワークを用いて行うことにしてもよい。
【００１９】
ここで、複数のノードでジョブを実行中に、ハードウェアエラー等の理由で処理を途中で停止しなければならない事態が発生した場合、処理結果が保証できなくなる。このような場合に、ハードウェアエラーが発生したノードを除外して最初からジョブの実行をやり直すとなると、エラー発生までに使用していた資源（ノード数×実行時間）が全て無駄になってしまう。
【００２０】
長大なデータを多数ノードで長時間にわたって処理するようなジョブであるほど、処理を途中で停止した際の損失は大きいものとなる。従来の汎用機では、定期的に外部ストレージへ各ノードの中間結果を格納するようにし、ハードウェアエラーが発生した際に、中間状態からジョブを再開可能にして処理の手戻りを少なくする試みがなされている（いわゆる、チェックポイントリスタート機能）。
【００２１】
しかし、ＨＰＣ分野へチェックポイントリスタート機能を適用しようとすると、多数ノード（例えば、数万台のノード）から１ヶ所ないし、ストライピングを使用した場合でも数カ所のストレージへ中間結果を書き出すことになる。このため、ストレージへのアクセスが集中して、ジョブの処理時間よりもストレージへの中間結果の書き出し（バックアップ）に時間がかかり、システム性能の低下を招くおそれがある。
【００２２】
そこで、本実施の形態では、バリア同期ごとに、ペアとなっているノード間で相互にバックアップをとることで、定期的なバックアップの際に生じるストレージへのアクセス集中を防いで、バックアップにかかる時間を短縮するバックアップ方法について説明する。ここで、図２を用いて、処理システム１００の処理例について説明する。
【００２３】
図２は、実施の形態にかかるバックアップ方法の一実施例を示す説明図である。図２において、ノードＮ０〜Ｎ３と、予備ノードＲＮとが示されている。ここでは、同一のジョブをノードＮ０〜Ｎ３で並列実行する場合を想定する（ｎ＝３）。各ノードＮｉは、バリア同期機構により必要に応じて同期処理をしながら計算処理を進めていく。なお、図２中、「○印」は、各ノードＮ０〜Ｎ３の状態を表している。
【００２４】
バリア同期とは、並列実行されている処理（スレッド、プロセス）の実行の進行具合を合わせるための同期方法の一つである。バリア同期では、同期をとるバリアポイントが設定される。例えば、バリア同期を行うプロセスは、バリアポイントに到達した場合、処理を一時的に停止し、並列処理されている全てのプロセスがバリアポイントに到達した時点で、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【００２５】
本実施の形態の一実施例として、バリア同期はバタフライバリアで実装するものとする。バタフライバリアとは、同期処理を複数のステージに分割し、ステージごとに各プロセスが他のプロセスと信号の通信を行って同期をとる方法である。なお、バタフライバリアによるバリア同期については、例えば、特開２０１０−１２２８４８号公報を参照することができる。
【００２６】
ノードＮ０〜Ｎ３でバリア同期を行う場合、まず、ノードＮ０，Ｎ１間で同期をとり、ノードＮ２，Ｎ３間で同期をとる（バリアステージ１）。すなわち、ノードＮ０，Ｎ１は、最初に同期をとるペアである。同様に、ノードＮ２，Ｎ３は、最初に同期をとるペアである。
【００２７】
この際、ノードＮ０は、ノードＮ１に自ノードの情報を送信するとともに、ノードＮ１からノードＮ１の情報を受信する。各ノードの情報は、例えば、各ノードの中間結果を含むチェックポイントデータである。そして、ノードＮ０は、送信した自ノードの情報を自ノードの記憶装置２０１内の第１の記憶領域に格納するとともに、受信したノードＮ１の情報を記憶装置２０１内の第２の記憶領域に格納する。
【００２８】
また、ノードＮ１は、ノードＮ０に自ノードの情報を送信するとともに、ノードＮ０からノードＮ０の情報を受信する。そして、ノードＮ１は、送信した自ノードの情報を自ノードの記憶装置２０２内の第１の記憶領域に格納するとともに、受信したノードＮ０の情報を記憶装置２０２内の第２の記憶領域に格納する。
【００２９】
同様に、ノードＮ２は、ノードＮ３に自ノードの情報を送信するとともに、ノードＮ３からノードＮ３の情報を受信する。そして、ノードＮ２は、送信した自ノードの情報を自ノードの記憶装置２０３内の第１の記憶領域に格納するとともに、受信したノードＮ３の情報を記憶装置２０３内の第２の記憶領域に格納する。
【００３０】
また、ノードＮ３は、ノードＮ２に自ノードの情報を送信するとともに、ノードＮ２からノードＮ２の情報を受信する。そして、ノードＮ３は、送信した自ノードの情報を自ノードの記憶装置２０４内の第１の記憶領域に格納するとともに、受信したノードＮ２の情報を記憶装置２０４内の第２の記憶領域に格納する。
【００３１】
つぎに、ノードＮ０，Ｎ２間で同期をとり、ノードＮ１，Ｎ３間で同期をとる（バリアステージ２）。これにより、ノードＮ０〜Ｎ３間で同期をとることができる。なお、バリアステージ１以外のタイミング（例えば、バリアステージ２）では、ノード間で各ノードのチェックポイントデータのやり取りは行わない。
【００３２】
このように、各ノードＮ０〜Ｎ３によれば、バリア同期を行う際に、バリアステージ１で同期対象となる２台のノード間で、チェックポイントデータを互いに保持しあうことができる。これにより、ジョブを実行中の定期的なバックアップの際に生じるストレージへのアクセス集中を防いで、各ノードＮ０〜Ｎ３のチェックポイントデータ（中間結果）のバックアップにかかる時間を短縮することができる。
【００３３】
また、ハードウェアエラー等が発生した場合には、各ノード間で相互保持したチェックポイントデータを用いて、ジョブを途中から再開することができる。例えば、ノードＮ１にハードウェアエラーが発生した場合、ノードＮ０から予備ノードＲＮに、ノードＮ０の記憶装置２０１に格納されたノードＮ１の情報（チェックポイントデータ）を移行することで、ジョブを中間状態から再開することが可能となる。
【００３４】
すなわち、処理システム１００によれば、ハードウェア故障等の理由により途中でプログラムが停止するような事態が発生した場合も、プログラムを最初から再実行するのではなく、途中の状態をセーブ（チェックポイント）する機能を実装し、かつ、予め準備された予備ノードにハードウェア故障が発生したノードの処理を引き継がせることによって、プログラムを途中から再実行（リスタート）させることができる。
【００３５】
（ノードＮｉのハードウェア構成例）
図３は、ノードＮｉのハードウェア構成例を示すブロック図である。図３において、ノードＮｉは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メインメモリ３０２と、ディスク３０３と、を有する。ＣＰＵ３０１は、メモリインタフェース３０４と、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）インタフェース３０５と、バリア装置３０６と、インターノードインタフェース３０７と、を含む。また、各構成部はバス３００によってそれぞれ接続される。
【００３６】
ここで、ＣＰＵ３０１は、ノードＮｉの全体の制御を司る。ＣＰＵ３０１は、複数のコアを有していてもよい。メインメモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。ＣＰＵ３０１は、メモリインタフェース３０４を介して、メインメモリ３０２にアクセスする。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メインメモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００３７】
ディスク３０３は、各種情報を記憶する記憶装置である。例えば、ディスク３０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などである。ＣＰＵ３０１は、ＩＯインタフェース３０５を介して、ディスク３０３にアクセスする。
【００３８】
ディスク３０３には、スモールストレージ領域３１０が設けられる。スモールストレージ領域３１０は、自ノードメモリ領域３１１と、他ノードメモリ領域３１２とを含む。スモールストレージ領域３１０の記憶容量は、例えば、最大でメインメモリ３０２の記憶容量の２倍となる。自ノードメモリ領域３１１は、図２で説明した第１の記憶領域に相当する。また、他ノードメモリ領域３１２は、図２で説明した第２の記憶領域に相当する。ディスク３０３は、図２に示した記憶装置２０１〜２０４の一例である。
【００３９】
バリア装置３０６は、バリア同期を行う。例えば、バリア装置３０６は、自ノードの状態をインタコネクト経由で他ノードに送り、他ノードから送られてきた状態を受信して、全体として計算処理がどこまで進んでいるかを検出可能である。
【００４０】
インターノードインタフェース３０７は、通信回線を通じてネットワーク１１０に接続され、ネットワーク１１０を介して他のコンピュータに接続される。そして、インターノードインタフェース３０７は、ネットワーク１１０と自装置内部とのインタフェースを司り、他のコンピュータからのデータの入出力を制御する。
【００４１】
なお、バリア装置３０６は、ＣＰＵ３０１とは別体に設けられることにしてもよく、また、ソフトウェアによって実現されることにしてもよい。また、スモールストレージ領域３１０は、例えば、メインメモリ３０２やメモリカード（不図示）などに設けられることにしてもよい。また、図１に示した予備ノードＲＮ、管理サーバ１０１、ストレージサーバ１０２およびログインサーバ１０３についても、ノードＮｉと同様のハードウェア構成により実現することができる。ただし、管理サーバ１０１、ストレージサーバ１０２およびログインサーバ１０３は、バリア装置３０６を有していなくてもよい。
【００４２】
（ノードＮｉの機能的構成例）
図４は、ノードＮｉの機能的構成例を示すブロック図である。図４において、ノードＮｉは、通信制御部４０１と、格納部４０２と、検出部４０３と、再開制御部４０４と、を含む。通信制御部４０１〜再開制御部４０４は制御部となる機能であり、具体的には、例えば、図３に示したメインメモリ３０２、ディスク３０３などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、メインメモリ３０２、ディスク３０３などの記憶装置に記憶される。
【００４３】
通信制御部４０１は、同一のジョブを実行するノードＮ０〜Ｎｎでバリア同期を行う際に、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、他ノードから他ノードの情報を受信する。ここで、各ノードＮｉの情報は、各ノードＮｉの中間結果、すなわち、バリア同期を行うまでに各ノードＮｉで実行された計算処理の結果を含むチェックポイントデータである。
【００４４】
他ノードは、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとるグループ内の少なくともいずれかのノードＮｊ（ｊ≠ｉ、ｊ＝０，１，…，ｎ）である。最初に同期をとるグループとは、バリア同期の第１ステージ（バリアステージ１）で同期をとるグループである。最初に同期をとるグループ内のノード数は、２以上であればよく、偶数であっても奇数であってもよい。
【００４５】
なお、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとるグループ内のノード数が「２」の場合の各ノードＮｉの動作例については、図５を用いて後述する。また、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとるグループ内のノード数が「３」の場合の各ノードＮｉの動作例については、図７を用いて後述する。
【００４６】
以下の説明では、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとる他ノードを「自ノードとペアとなる他ノード」と表記する場合がある。なお、自ノードと最初に同期をとる他ノードの情報は、例えば、予めノードＩＤテーブル（不図示）に記憶されている。ノードＩＤテーブルは、例えば、メインメモリ３０２やディスク３０３などの記憶装置により実現される。
【００４７】
具体的には、例えば、通信制御部４０１は、ジョブを実行中にバリア同期ポイントに到達すると、自ノードとペアとなる他ノードと同期をとる。より詳細に説明すると、例えば、通信制御部４０１は、図３に示したバリア装置３０６を用いて、各ノードの状態をノード間で通知し合うことで、自ノードとペアとなる他ノードと同期をとる。
【００４８】
そして、通信制御部４０１は、自ノードとペアとなる他ノードとの同期が完了すると、メインメモリ３０２からデータを読み出して、読み出したデータをチェックポイントデータとして他ノードに送信する。また、通信制御部４０１は、自ノードとペアとなる他ノードとの同期が完了すると、他ノードからチェックポイントデータを受信する。
【００４９】
他ノードのチェックポイントデータは、他ノードのメインメモリ３０２から読み出されたデータである。読み出し対象となるデータは、例えば、メインメモリ３０２内の全データであってもよく、また、メインメモリ３０２内のシステム領域を除くデータであってもよい。
【００５０】
なお、各ノードＮｉにおいてバリア同期ポイントに到達すると、各ノードＮｉにおけるジョブの処理は停止される。そして、ノードＮ０〜Ｎｎでバリア同期が成立すると、各ノードＮｉにおいて停止されたジョブの処理が再開される。
【００５１】
格納部４０２は、通信制御部４０１によって送信された自ノードの情報を、自ノードの記憶装置内の第１の記憶領域に格納する。また、格納部４０２は、通信制御部４０１によって受信された他ノードの情報を、自ノードの記憶装置内の第２の記憶領域に格納する。
【００５２】
具体的には、例えば、格納部４０２は、送信された自ノードのチェックポイントデータ（自ノードのメインメモリ３０２内のデータ）を、図３に示したディスク３０３内のスモールストレージ領域３１０の自ノードメモリ領域３１１に格納する。また、格納部４０２は、受信された他ノードのチェックポイントデータ（他ノードのメインメモリ３０２内のデータ）を、ディスク３０３内のスモールストレージ領域３１０の他ノードメモリ領域３１２に格納する。
【００５３】
これにより、同一ジョブを実行中のノードＮ０〜Ｎｎでバリア同期を行う際に、バリア同期の第１ステージ（バリアステージ１）で同期をとるノード間で、メインメモリ３０２内のデータ（チェックポイントデータ）のバックアップをとりあうことができる。
【００５４】
なお、ノードＮ０〜Ｎｎで実行されるジョブは、例えば、分割後の処理の実行時間が、各ノードＮｉのチェックポイントデータ（メインメモリ３０２のデータ）を他ノードに送るのに要する時間より長い時間となるように分割されて実行される。
【００５５】
検出部４０３は、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとる他ノードで障害が発生したことを検出する。具体的には、例えば、検出部４０３は、管理サーバ１０１からＯＮ  ＥＲＲＯＲ解除トラップを受信したことに応じて、ノードＮ０〜Ｎｎのうちのいずれかのノードで障害が発生したと判断する。
【００５６】
ＯＮ  ＥＲＲＯＲ解除トラップは、障害（回復不能なエラー）が発生したノードの存在を通知する情報である。ＯＮ  ＥＲＲＯＲ解除トラップは、障害が発生したノードの情報（例えば、ノード番号）と、障害が発生したノードの計算処理を引き継ぐ予備ノードＲＮの情報（例えば、物理ノード情報）とを含む。
【００５７】
つぎに、検出部４０３は、ＯＮ  ＥＲＲＯＲ解除トラップから特定される障害が発生したノードが、自ノードとペアとなる他ノードであるか否かを判断する。そして、検出部４０３は、障害が発生したノードが、自ノードとペアとなる他ノードであれば、当該他ノードで障害が発生したことを検出する。
【００５８】
また、通信制御部４０１は、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとる他ノードで障害が発生したことが検出された場合、他ノードの処理を引き継ぐ予備ノードＲＮに、自ノードの記憶装置内の第２の記憶領域に格納された他ノードの情報を送信する。
【００５９】
具体的には、例えば、通信制御部４０１は、自ノードとペアとなる他ノードで障害が発生した場合、ディスク３０３内のスモールストレージ領域３１０の他ノードメモリ領域３１２から他ノードのチェックポイントデータを読み出す。そして、通信制御部４０１は、ＯＮ  ＥＲＲＯＲ解除トラップから特定される予備ノードＲＮに、読み出した他ノードのチェックポイントデータを送信する。この際、通信制御部４０１は、予備ノードＲＮの情報（例えば、物理ノード情報）を用いて、ノードＩＤテーブル（不図示）を更新する。
【００６０】
また、予備ノードＲＮには、管理サーバ１０１の制御に従って、ストレージサーバ１０２からジョブのプログラムがロードされる。この結果、予備ノードＲＮが、障害が発生した他ノードの処理を引き継ぎ可能な状態となり、ジョブを並列実行するノード群に組み込まれる。
【００６１】
なお、通信制御部４０１は、自ノードとペアとなる他ノードで障害が発生した場合に、スモールストレージ領域３１０の自ノードメモリ領域３１１から自ノードのチェックポイントデータをあわせて読み出すことにしてもよい。そして、通信制御部４０１は、読み出した自ノードのチェックポイントデータを、他ノードのチェックポイントデータとともに予備ノードＲＮに送信することにしてもよい。これにより、予備ノードＲＮに、ノードＮｉのチェックポイントデータを保持させることができる。
【００６２】
再開制御部４０４は、自ノードの記憶装置内の第１の記憶領域に格納された自ノードの情報に基づいて、ジョブの実行を再開する。具体的には、例えば、再開制御部４０４は、障害が発生した他ノードの処理を引き継ぐ予備ノードＲＮを認識する。すなわち、障害が発生した他ノードを予備ノードＲＮに切り替えて、同一のジョブを並列実行するノード群が、ノードＮ０〜Ｎｎのうち障害が発生したノードを除く残余のノードと、予備ノードＲＮとに更新される。
【００６３】
つぎに、再開制御部４０４は、ディスク３０３内のスモールストレージ領域３１０の自ノードメモリ領域３１１に格納された自ノードのチェックポイントデータに基づいて、ジョブの再開ポイントを復元する。そして、再開制御部４０４は、全ノードでの再開ポイントの復元が完了したら、エラーが発生した処理（ルーチン）の再実行を行って、ジョブの実行を再開する。
【００６４】
上述した説明では、通信制御部４０１は、バリア装置３０６を用いて、各ノードの状態をノード間で通知し合うことで、自ノードとペアとなる他ノードと同期をとることにしたが、これに限らない。例えば、通信制御部４０１は、他ノードと同期をとるタイミングで他ノードに自ノードの情報を送信することにしてもよい。そして、通信制御部４０１は、自ノードの情報を送信し、かつ、他ノードから他ノードの情報を受信したことに応じて、他ノードとの同期が完了したと判断することにしてもよい。
【００６５】
具体的には、例えば、通信制御部４０１は、ジョブを実行中にバリア同期ポイントに到達すると、メインメモリ３０２からデータを読み出して、読み出したデータをチェックポイントデータとして他ノードに送信する。そして、通信制御部４０１は、自ノードのチェックポイントデータを送信し、かつ、他ノードからチェックポイントデータを受信したことに応じて、他ノードとの同期が完了したと判断する。
【００６６】
これにより、各ノードの状態をノード間で通知しあうことなく、自ノードとペアとなる他ノードと同期をとることができる。すなわち、バリア同期の第１ステージ（バリアステージ１）の完了を、ノード間でのチェックポイントデータの相互保持の完了をもって判断可能となり、ノード間の同期確認にかかる通信を削減することができる。なお、通信制御部４０１は、自ノードのチェックポイントデータが自ノードメモリ領域３１１に格納され、他ノードのチェックポイントデータが他ノードメモリ領域３１２に格納されるのを待って、他ノードとの同期が完了したと判断してもよい。
【００６７】
また、通信制御部４０１は、バリア同期ごとに、自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、他ノードから他ノードの情報を受信することにしてもよい。これにより、ノードＮ０〜Ｎｎでジョブを実行中のバリア同期ごとに、その都度、バリア同期の第１ステージで同期をとるノード間で、チェックポイントデータを相互保持することができる。
【００６８】
また、通信制御部４０１は、ジョブの実行を開始してから所定時間Ｔが経過した後のバリア同期ごとに、他ノードに自ノードの情報を送信するとともに、他ノードから他ノードの情報を受信することにしてもよい。すなわち、ジョブの実行を開始してから所定時間Ｔが経過するまでは、バリア同期を行うタイミングとなっても、ノード間でのチェックポイントデータの相互保持は実施しない。所定時間Ｔは、任意に設定可能である。
【００６９】
これにより、ジョブの実行を開始してしばらくはバックアップをとるメリットが少ないことを考慮して、ノード間でのチェックポイントデータの相互保持を実施するタイミングを遅らせることができる。なお、ジョブの実行を開始してから所定時間Ｔが経過した段階から、ノード間でのチェックポイントデータの相互保持を実施する場合の動作例については、図６を用いて後述する。
【００７０】
（ノードＮｉの動作例）
つぎに、バリア同期を行うにあたり、最初に同期をとるグループ内のノード間でチェックポイントデータを相互保持する際のノードＮｉの動作例について説明する。ここでは、最初に同期をとるグループ内のノードを「ノードＮ０，Ｎ１」とし、２ノード間でチェックポイントデータを相互保持する場合を例に挙げて説明する。
【００７１】
図５は、ノードＮｉの動作例を示す説明図（その１）である。図５において、バリア同期を行う際に、最初に同期をとるノードＮ０，Ｎ１が示されている。ただし、図５の例では、各ノードＮ０，Ｎ１のバリア装置３０６の図示を省略している。以下、ノードＮ０，Ｎ１間でチェックポイントデータを相互保持する場合の各ノードＮ０，Ｎ１の動作例について説明する。
【００７２】
ノードＮ０は、ジョブを実行中にバリア同期ポイントに到達すると、自ノードとペアとなるノードＮ１と同期をとる。ノードＮ０は、ノードＮ１との同期が完了すると、メインメモリ３０２からデータを読み出して、読み出したデータを自ノードのチェックポイントデータとして、ノードＮ１に送信する（図５中、矢印５０１）。
【００７３】
同様に、ノードＮ１は、ジョブを実行中にバリア同期ポイントに到達すると、自ノードとペアとなるノードＮ０と同期をとる。ノードＮ１は、ノードＮ０との同期が完了すると、メインメモリ３０２からデータを読み出して、読み出したデータを自ノードのチェックポイントデータとして、ノードＮ０に送信する（図５中、矢印５０２）。
【００７４】
つぎに、ノードＮ０は、送信した自ノードのチェックポイントデータ（ノードＮ０のメインメモリ３０２内のデータ）を、ディスク３０３内の自ノードメモリ領域３１１に格納する（図５中、矢印５０３）。また、ノードＮ０は、受信したノードＮ１のチェックポイントデータ（ノードＮ１のメインメモリ３０２内のデータ）を、ディスク３０３内の他ノードメモリ領域３１２に格納する（図５中、矢印５０２）。
【００７５】
同様に、ノードＮ１は、送信した自ノードのチェックポイントデータ（ノードＮ１のメインメモリ３０２内のデータ）を、ディスク３０３内の自ノードメモリ領域３１１に格納する（図５中、矢印５０４）。また、ノードＮ１は、受信したノードＮ０のチェックポイントデータ（ノードＮ０のメインメモリ３０２内のデータ）を、ディスク３０３内の他ノードメモリ領域３１２に格納する（図５中、矢印５０１）。
【００７６】
ここで、ノードＮ０，Ｎ１間でのチェックポイントデータの相互保持にかかる時間について説明する。ここでは、各ノードＮ０，Ｎ１のメインメモリ３０２の記憶容量を「６４［ＧＢ］」とし、ＣＰＵ／ディスク間の帯域を「１００［ＭＢ／ｓｅｃ］」とする。また、メインメモリ帯域およびネットワーク帯域は、ＣＰＵ／ディスク間の帯域より大きいものとする。
【００７７】
この場合、ノードＮ０，Ｎ１間でのチェックポイントデータの相互保持にかかる時間は、「約２２分（＝６４［ＧＢ］×２／１００［ＭＢ／ｓｅｃ］／６０＝２１．３３［ｍｉｎ］）＋レイテンシ（α）」となる。したがって、ノードＮ０，Ｎ１間でチェックポイントデータを送り合う間隔は、（２２＋α）分以上とすることが望ましい。
【００７８】
上述した例は、メインメモリ３０２内の全データを送り合うことを前提としたが、各ノードＮ０，Ｎ１の処理に必要なデータ（配列）だけ抽出して、スモールストレージ領域３１０に格納することにしてもよい。これにより、ノードＮ０，Ｎ１間でのチェックポイントデータの相互保持にかかる時間を短縮することができる。
【００７９】
（所定時間Ｔが経過した段階からチェックポイントデータの相互保持を実施する場合）
つぎに、ジョブの実行を開始してから所定時間Ｔが経過した段階から、ノード間でのチェックポイントデータの相互保持を実施する場合の動作例について説明する。
【００８０】
図６は、ノードＮｉの動作例を示す説明図（その２）である。図６の（６−１）および（６−２）において、ノードＮｉでのデータ処理およびセーブ処理の実行にかかる時間が示されている。データ処理は、ノードＮｉで実行されるジョブの計算処理に相当する。セーブ処理は、ノードＮｉで実行されるノード間でチェックポイントデータを相互保持する処理に相当する。
【００８１】
（６−１）の例は、ジョブを実行中のバリア同期ごとに、ノード間でチェックポイントデータを相互保持する場合の動作例を示している。具体的には、各データ処理（ｉ），（ｉｉ），（ｉｉｉ）の実行が完了する度に、各セーブ処理（ａ），（ｂ），（ｃ）がそれぞれ実行されている。
【００８２】
（６−２）の例は、ジョブの実行を開始してから所定時間Ｔが経過した後のバリア同期ごとに、ノード間でチェックポイントデータを相互保持する場合の動作例を示している。ここでは、データ処理（ｉｉ）を実行中に所定時間Ｔが経過している。この場合、実行が完了したタイミングではセーブ処理は実行されず、データ処理（ｉｉ），（ｉｉｉ）の実行が完了する度に、各セーブ処理（ａ），（ｂ）がそれぞれ実行される。
【００８３】
例えば、全体の処理に２４時間かかるとし、上記（６−１）のように、１時間ごとにセーブ処理を実行し（すなわち、１時間ごとにバリア同期が発生）、セーブ処理に１０分かかるとする。この場合、ジョブが完了するまでに要する時間は、「２７．８時間＝２４×６０＋２３×１０＝１６７０分」となる。
【００８４】
また、所定時間Ｔを「１０時間」とし、上記（６−２）のように、ジョブの実行を開始してから１０時間が経過した後のバリア同期ごとに、ノード間でチェックポイントデータを相互保持するとする。この場合、ジョブが完了するまでに要する時間は、「２５．８時間≒２４×６０＋１１×１０＝１５５０分」となる。
【００８５】
このように、ジョブの実行を開始してから所定時間Ｔが経過するまでは、バリア同期を行うタイミングとなっても、ノード間でのチェックポイントデータの相互保持を実施しないことで、ジョブの実行が完了するまでの時間を短縮させることができる。
【００８６】
（最初に同期をとるグループ内のノード数が「３」の場合の動作例）
つぎに、ノードＮ０〜Ｎｎのうち最初に同期をとるグループ内のノード数が「３」の場合のノードＮｉの動作例について説明する。
【００８７】
図７は、ノードＮｉの動作例を示す説明図（その３）である。図７において、ノードＮ０〜Ｎ８が示されている。ここでは、同一のジョブをノードＮ０〜Ｎ８で並列実行する場合を想定する（ｎ＝８）。また、最初に同期をとるグループを、「ノードＮ０，Ｎ１，Ｎ２」、「ノードＮ３，Ｎ４，Ｎ５」および「ノードＮ６，Ｎ７，Ｎ８」とする。なお、図７中、「○印」は、各ノードＮ０〜Ｎ８の状態を表している。
【００８８】
ノードＮ０〜Ｎ８でバリア同期を行う場合、まず、ノードＮ０，Ｎ１，Ｎ２間で同期をとり、ノードＮ３，Ｎ４，Ｎ５間で同期をとり、ノードＮ６，Ｎ７，Ｎ８間で同期をとる（バリアステージ１）。ここで、ノードＮ０，Ｎ１，Ｎ２のグループを例に挙げて、ノード間でチェックポイントデータを相互保持するための動作例について説明する。
【００８９】
ノードＮ０は、ノードＮ０，Ｎ１，Ｎ２間で同期をとるにあたり、例えば、ノードＮ１に自ノードのチェックポイントデータを送信するとともに、ノードＮ２からノードＮ２のチェックポイントデータを受信する。そして、ノードＮ０は、送信した自ノードのチェックポイントデータを自ノードメモリ領域３１１に格納するとともに、受信したノードＮ２のチェックポイントデータを他ノードメモリ領域３１２に格納する。
【００９０】
また、ノードＮ１は、ノードＮ０，Ｎ１，Ｎ２間で同期をとるにあたり、例えば、ノードＮ２に自ノードのチェックポイントデータを送信するとともに、ノードＮ０からノードＮ０のチェックポイントデータを受信する。そして、ノードＮ１は、送信した自ノードのチェックポイントデータを自ノードメモリ領域３１１に格納するとともに、受信したノードＮ０のチェックポイントデータを他ノードメモリ領域３１２に格納する。
【００９１】
また、ノードＮ２は、ノードＮ０，Ｎ１，Ｎ２間で同期をとるにあたり、例えば、ノードＮ０に自ノードのチェックポイントデータを送信するとともに、ノードＮ１からノードＮ１のチェックポイントデータを受信する。そして、ノードＮ２は、送信した自ノードのチェックポイントデータを自ノードメモリ領域３１１に格納するとともに、受信したノードＮ１のチェックポイントデータを他ノードメモリ領域３１２に格納する。
【００９２】
このように、最初に同期をとるグループ内のノード数が「３」の場合であっても、グループ内のノード間でチェックポイントデータを相互保持することができる。すなわち、バリア同期の際に最初に同期をとるグループ内のノード数が２以外の構成に拡張でき、ひいては、全ノード数が偶数以外に拡張可能である。なお、グループ内のノード数が「２」の場合に比べて、３ノードで同期がとれるまでの時間は増える可能性はある。
【００９３】
（スモールストレージ領域３１０の他の例）
つぎに、ノードＮｉが有するディスク３０３内のスモールストレージ領域３１０の他の例について説明する。ここでは、ノードＮ０〜Ｎｎのうち最初に同期をとるグループ内のノード数が「３」の場合を例に挙げて説明する。
【００９４】
図８は、スモールストレージ領域３１０の他の例を示すブロック図である。図８において、スモールストレージ領域３１０は、自ノードメモリ領域３１１と、他ノードメモリ領域３１２−１と、他ノードメモリ領域３１２−２とを含む。すなわち、スモールストレージ領域３１０に、グループ内の他ノードのチェックポイントデータを格納するためのメモリ領域をそれぞれ設ける。
【００９５】
この場合、ノードＮｉの通信制御部４０１は、バリア同期を行う際に、グループ内の他ノードそれぞれに自ノードの情報を送信するとともに、他ノードそれぞれから当該他ノードの情報を受信する。そして、格納部４０２は、送信された自ノードの情報を、自ノードの記憶装置内の第１の記憶領域に格納する。また、格納部４０２は、受信された他ノードそれぞれの情報を、自ノードの記憶装置内の他ノードそれぞれに対応する第２の記憶領域に格納する。
【００９６】
ここで、ノードＮ０，Ｎ１，Ｎ２のグループ内のノードＮ０を例に挙げて、具体的な処理内容について説明する。まず、ノードＮ０は、例えば、バリア同期ポイントに到達すると、メインメモリ３０２からデータを読み出して、読み出したデータをチェックポイントデータとして、ノードＮ１，Ｎ２に送信する。また、ノードＮ０は、各ノードＮ１，Ｎ２がバリア同期ポイントに到達すると、各ノードＮ１，Ｎ２から各ノードＮ１，Ｎ２のチェックポイントデータを受信する。
【００９７】
つぎに、ノードＮ０は、送信した自ノードのチェックポイントデータ（自ノードのメインメモリ３０２内のデータ）を、スモールストレージ領域３１０の自ノードメモリ領域３１１に格納する。また、ノードＮ０は、受信したノードＮ１のチェックポイントデータ（ノードＮ１のメインメモリ３０２内のデータ）を、スモールストレージ領域３１０の他ノードメモリ領域３１２−１に格納する。また、ノードＮ０は、受信したノードＮ２のチェックポイントデータ（ノードＮ２のメインメモリ３０２内のデータ）を、スモールストレージ領域３１０の他ノードメモリ領域３１２−２に格納する。
【００９８】
これにより、ノードＮ０は、最初に同期をとるグループ内の他ノード（ノードＮ１，Ｎ２）それぞれのチェックポイントデータを保持することができる。このため、例えば、グループ内のノードＮ１，Ｎ２が同時にハードウェア故障となっても、２台の予備ノードＲＮを準備して、ノードＮ０のスモールストレージ領域３１０内の情報からジョブを再実行することが可能となる。
【００９９】
また、ノードＮ０は、グループ内のノード間でのチェックポイントデータの相互保持の完了をもって、バリア同期の第１ステージ（バリアステージ１）の完了を判断することにしてもよい。これにより、バリア同期の第１ステージ（バリアステージ１）を、１回のデータ転送で完了することができる（図７の例では、２回転送）。
【０１００】
（処理システム１００の各種処理手順例）
つぎに、処理システム１００の各種処理手順例について説明する。まず、ログインサーバ１０３のジョブ実行依頼処理手順について説明する。
【０１０１】
図９は、ログインサーバ１０３のジョブ実行依頼処理手順の一例を示すフローチャートである。図９のフローチャートにおいて、まず、ログインサーバ１０３は、ユーザの操作入力により、ジョブのプログラムを作成する（ステップＳ９０１）。そして、ログインサーバ１０３は、作成したプログラムをコンパイルする（ステップＳ９０２）。
【０１０２】
つぎに、ログインサーバ１０３は、コンパイルされたプログラムを、ストレージサーバ１０２の外部ストレージ１２０に格納する（ステップＳ９０３）。そして、ログインサーバ１０３は、管理サーバ１０１にジョブの実行依頼を送信して（ステップＳ９０４）、本フローチャートによる一連の処理を終了する。これにより、管理サーバ１０１に対して、ジョブの実行依頼を行うことができる。
【０１０３】
つぎに、ストレージサーバ１０２のロード処理手順について説明する。
【０１０４】
図１０は、ストレージサーバ１０２のロード処理手順の一例を示すフローチャートである。図１０のフローチャートにおいて、まず、ストレージサーバ１０２は、管理サーバ１０１から、全ノードＮ０〜Ｎｎへのロード要求を受信したか否かを判断する（ステップＳ１００１）。
【０１０５】
ここで、ストレージサーバ１０２は、ロード要求を受信するのを待つ（ステップＳ１００１：Ｎｏ）。そして、ストレージサーバ１０２は、ロード要求を受信した場合（ステップＳ１００１：Ｙｅｓ）、全ノードＮ０〜Ｎｎに対して、外部ストレージ１２０に格納された、ジョブの実行に用いるプログラム、データを送信する（ステップＳ１００２）。
【０１０６】
つぎに、ストレージサーバ１０２は、ノードＮｉからジョブの実行結果を受信したか否かを判断する（ステップＳ１００３）。ここで、ジョブの実行結果を受信していない場合（ステップＳ１００３：Ｎｏ）、ストレージサーバ１０２は、管理サーバ１０１から、予備ノードＲＮへのロード要求を受信したか否かを判断する（ステップＳ１００４）。
【０１０７】
ここで、予備ノードＲＮへのロード要求を受信していない場合（ステップＳ１００４：Ｎｏ）、ストレージサーバ１０２は、ステップＳ１００３に戻る。一方、予備ノードＲＮへのロード要求を受信した場合（ステップＳ１００４：Ｙｅｓ）、予備ノードＲＮに対して、外部ストレージ１２０に格納された、ジョブの実行に用いるプログラムを送信して（ステップＳ１００５）、ステップＳ１００３に戻る。
【０１０８】
また、ステップＳ１００３において、ノードＮｉからジョブの実行結果を受信した場合（ステップＳ１００３：Ｙｅｓ）、ストレージサーバ１０２は、受信したジョブの実行結果を外部ストレージ１２０に格納して（ステップＳ１００６）、本フローチャートによる一連の処理を終了する。
【０１０９】
これにより、管理サーバ１０１からの要求に応じて、ジョブを並列実行するノードＮ０〜Ｎｎにプログラムやデータを送信したり、ハードウェア故障等が発生したノードの処理を引き継ぐ予備ノードＲＮにプログラムを送信したりすることができる。
【０１１０】
つぎに、管理サーバ１０１の実行制御処理手順について説明する。
【０１１１】
図１１は、管理サーバ１０１の実行制御処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、管理サーバ１０１は、ログインサーバ１０３からジョブの実行依頼を受信したか否かを判断する（ステップＳ１１０１）。ここで、管理サーバ１０１は、ジョブの実行依頼を受信するのを待つ（ステップＳ１１０１：Ｎｏ）。
【０１１２】
そして、管理サーバ１０１は、ジョブの実行依頼を受信した場合（ステップＳ１１０１：Ｙｅｓ）、ストレージサーバ１０２に対して、全ノードＮ０〜Ｎｎへのロード要求を送信する（ステップＳ１１０２）。つぎに、管理サーバ１０１は、ジョブの実行が終了したか否かを判断する（ステップＳ１１０３）。
【０１１３】
ここで、ジョブの実行が終了していない場合（ステップＳ１１０３：Ｎｏ）、管理サーバ１０１は、ノードＮ０〜ＮｎのうちのいずれかのノードＮｉからＦａｔａｌ  Ｅｒｒｏｒを受信したか否かを判断する（ステップＳ１１０４）。Ｆａｔａｌ  Ｅｒｒｏｒは、ハードウェア故障等の障害が発生したことを示す信号である。
【０１１４】
ここで、Ｆａｔａｌ  Ｅｒｒｏｒを受信していない場合（ステップＳ１１０４：Ｎｏ）、管理サーバ１０１は、ステップＳ１１０３に戻る。一方、Ｆａｔａｌ  Ｅｒｒｏｒを受信した場合（ステップＳ１１０４：Ｙｅｓ）、管理サーバ１０１は、予備ノードＲＮを準備する（ステップＳ１１０５）。
【０１１５】
つぎに、管理サーバ１０１は、ストレージサーバ１０２に対して、準備した予備ノードＲＮへのロード要求を送信する（ステップＳ１１０６）。そして、管理サーバ１０１は、全ノードにＯＮ  Ｅｒｒｏｒ解除トラップを送信して（ステップＳ１１０７）、ステップＳ１１０３に戻る。
【０１１６】
ＯＮ  Ｅｒｒｏｒ解除トラップによれば、全ノードに対して新たに予備ノードＲＮを使用することを通知することができる。全ノードとは、ノードＮ０〜ＮｎのうちのＦａｔａｌ  Ｅｒｒｏｒの送信元ノードを除く残りのノード、および、準備された予備ノードＲＮである。
【０１１７】
また、ステップＳ１１０３において、ジョブの実行が終了した場合（ステップＳ１１０３：Ｙｅｓ）、管理サーバ１０１は、本フローチャートによる一連の処理を終了する。これにより、ジョブの実行を制御することができる。例えば、ジョブ実行中にハードウェア故障等が発生した障害ノードを切り離しつつ、予備ノードＲＮに処理を引き継がせることができる。
【０１１８】
つぎに、ノードＮｉの並列演算実行処理手順について説明する。ここでは、ジョブを実行中にバリア同期を行う際に最初に同期をとるグループ内のノード数が「２」の場合を例に挙げて説明する。
【０１１９】
図１２〜図１４は、ノードＮｉの並列演算実行処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、ノードＮｉは、ストレージサーバ１０２から、ジョブの実行に用いるプログラム、データを受信する（ステップＳ１２０１）。そして、ノードＮｉは、受信したプログラム、データを用いて、ジョブの実行を開始する（ステップＳ１２０２）。
【０１２０】
つぎに、ノードＮｉは、管理サーバ１０１からＯＮ  Ｅｒｒｏｒ解除トラップを受信したか否かを判断する（ステップＳ１２０３）。ここで、ＯＮ  Ｅｒｒｏｒ解除トラップを受信していない場合（ステップＳ１２０３：Ｎｏ）、ノードＮｉは、バリア同期ポイントに到達したか否かを判断する（ステップＳ１２０４）。
【０１２１】
ここで、バリア同期ポイントに到達していない場合（ステップＳ１２０４：Ｎｏ）、ノードＮｉは、ステップＳ１２０３に戻る。一方、バリア同期ポイントに到達した場合（ステップＳ１２０４：Ｙｅｓ）、ノードＮｉは、最初に同期をとる他ノードとの同期待ちをする（ステップＳ１２０５）。
【０１２２】
そして、ノードＮｉは、最初に同期をとる他ノードとの２ノード間の同期が完了したか否かを判断する（ステップＳ１２０６）。ここで、２ノード間の同期が完了していない場合（ステップＳ１２０６：Ｎｏ）、ノードＮｉは、ステップＳ１２０５に戻る。一方、２ノード間の同期が完了した場合には（ステップＳ１２０６：Ｙｅｓ）、ノードＮｉは、図１３に示すステップＳ１３０１に移行する。
【０１２３】
図１３のフローチャートにおいて、まず、ノードＮｉは、ジョブの全計算処理が終了したか否かを判断する（ステップＳ１３０１）。ここで、全計算処理が終了していない場合（ステップＳ１３０１：Ｎｏ）、ノードＮｉは、自ノードのチェックポイントデータを、同期が完了した他ノードに送信し、当該他ノードからチェックポイントデータを受信する（ステップＳ１３０２）。自ノードのチェックポイントデータは、メインメモリ３０２から読み出される。
【０１２４】
つぎに、ノードＮｉは、自ノードのチェックポイントデータを自ノードメモリ領域３１１に格納するとともに、受信した他ノードのチェックポイントデータを他ノードメモリ領域３１２に格納する（ステップＳ１３０３）。そして、ノードＮｉは、全ノード間での同期待ちをする（ステップＳ１３０４）。
【０１２５】
そして、ノードＮｉは、全ノード間の同期が完了したか否かを判断する（ステップＳ１３０５）。ここで、全ノード間の同期が完了していない場合（ステップＳ１３０５：Ｎｏ）、ノードＮｉは、ステップＳ１３０４に戻る。一方、全ノード間の同期が完了した場合（ステップＳ１３０５：Ｙｅｓ）、ノードＮｉは、図１２に示したステップＳ１２０３に戻る。
【０１２６】
すなわち、ペアとなっている２ノード間での同期がとれたところでチェックポイントデータの相互保持のフェーズに入り、チェックポイントデータの相互保持の完了後に、全体のバリア同期を待って次の計算処理に入ることができる。
【０１２７】
また、ステップＳ１３０１において、全計算処理が終了した場合（ステップＳ１３０１：Ｙｅｓ）、ノードＮｉは、全ノード間での同期待ちをする（ステップＳ１３０６）。そして、ノードＮｉは、全ノード間の同期が完了したか否かを判断する（ステップＳ１３０７）。
【０１２８】
ここで、ノードＮｉは、全ノード間の同期が完了していない場合（ステップＳ１３０７：Ｎｏ）、ステップＳ１３０６に戻って、全ノード間の同期が完了するのを待つ。そして、全ノード間の同期が完了した場合（ステップＳ１３０７：Ｙｅｓ）、ノードＮｉは、ストレージサーバ１０２にジョブの実行結果を送信して（ステップＳ１３０８）、本フローチャートによる一連の処理を終了する。
【０１２９】
また、図１２に示したステップＳ１２０３において、ＯＮ  Ｅｒｒｏｒ解除トラップを受信した場合（ステップＳ１２０３：Ｙｅｓ）、ノードＮｉは、図１４に示すステップＳ１４０１に移行する。なお、自ノードにおいてハードウェア故障等の障害が発生した場合は、ノードＮｉは、管理サーバ１０１にＦａｔａｌ  Ｅｒｒｏｒを送信する。ただし、障害により通信不能となっている場合は、ノードＮｉとペアとなっている他ノードが、生存監視等の方法でノードＮｉの異常を検知して、管理サーバ１０１にＦａｔａｌ  Ｅｒｒｏｒを送信する。
【０１３０】
図１４のフローチャートにおいて、まず、ノードＮｉは、自ノードが、故障ノードの替わりに組み込まれる予備ノードＲＮであるか否かを判断する（ステップＳ１４０１）。ここで、予備ノードＲＮの場合（ステップＳ１４０１：Ｙｅｓ）、ノードＮｉは、ストレージサーバ１０２から、ジョブの実行に用いるプログラムを受信する（ステップＳ１４０２）。
【０１３１】
そして、ノードＮｉは、故障ノードを自ノードに置き換えた形でジョブを実行するノード群（ノードＮ０〜Ｎｎ）を構成するために、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を初期化する（ステップＳ１４０３）。つぎに、ノードＮｉは、バリア同期の際に最初に同期をとるペアノードからチェックポイントデータを受信する（ステップＳ１４０４）。受信されたチェックポイントデータは、自ノードメモリ領域３１１に格納される。
【０１３２】
つぎに、ノードＮｉは、全ノード間での同期待ちをする（ステップＳ１４０５）。そして、ノードＮｉは、全ノード間の同期が完了したか否かを判断する（ステップＳ１４０６）。ここで、ノードＮｉは、全ノード間の同期が完了するのを待つ（ステップＳ１４０６：Ｎｏ）。
【０１３３】
そして、全ノード間の同期が完了した場合（ステップＳ１４０６：Ｙｅｓ）、ノードＮｉは、自ノードメモリ領域３１１に格納されたチェックポイントデータを用いて、ジョブの実行を再開して（ステップＳ１４０７）、図１２に示したステップＳ１２０３に戻る。
【０１３４】
また、ステップＳ１４０１において、予備ノードＲＮではない場合（ステップＳ１４０１：Ｎｏ）、ノードＮｉは、スモールストレージ領域３１０の自ノードメモリ領域３１２からチェックポイントデータを読み出す（ステップＳ１４０８）。つぎに、ノードＮｉは、予備ノードＲＮの情報に基づいて、ノードＩＤテーブルを更新する（ステップＳ１４０９）。
【０１３５】
そして、ノードＮｉは、バリア同期の際に最初に同期をとるペアノードに、読み出したチェックポイントデータを送信して（ステップＳ１４１０）、ステップＳ１４０５に移行する。ただし、ノードＮｉが故障ノードのペアノードではない場合には、ステップＳ１４０１において、予備ノードＲＮではない場合に（ステップＳ１４０１：Ｎｏ）、ノードＮｉは、ステップＳ１４０５に移行することにしてもよい。
【０１３６】
これにより、ジョブを実行中のバリア同期ごとに、バリア同期の第１ステージで同期をとるペアノードとの間で、チェックポイントデータをバックアップし合うことができる。また、ペアノードに障害が発生した場合は、故障ノードの替わりに組み込まれた予備ノードＲＮにチェックポイントデータを送信して、ジョブの実行を中間状態から再開することができる。
【０１３７】
なお、図１２，１３には図示していないが、ステップＳ１２０５〜Ｓ１２０６、ステップＳ１３０４〜Ｓ１３０５およびステップＳ１３０６〜Ｓ１３０７の同期待ち中においても、ＯＮ  ＥＲＲＯＲ解除トラップを受信したときには、ステップＳ１２０３に戻って処理を継続するものとする。これはノードＮｉが同期待ちでハングアップしないために必要である。
【０１３８】
（処理システム１００の実施例）
つぎに、多数ノードで計算する具体的なターゲット問題を例に挙げて、処理システム１００の実施例について説明する。
【０１３９】
図１５は、ターゲット問題の具体例を示す説明図である。ここでは、図１５に示す行列ベクトル演算を、ノードＮ０〜Ｎｐで計算する場合を想定する。ただし、下記（１）〜（５）を前提とする。
【０１４０】
（１）「ｙ＝Ａ＊ｘ」を計算する。
【０１４１】
（２）「Ａ＝ＭｘＮ」の要素を持つ。
【０１４２】
（３）１行（Ｍ要素数）を複数ノードで処理し、最後に全体結果を１つのノードに集めて結果をストレージサーバ１０２に格納するものとする。
【０１４３】
（４）１行ごとにバリア同期を実施するものとする。すなわち、ハードウェア故障が発生した場合でも再実行は１行分で済むことになる。
【０１４４】
（５）Ａ，ｘのデータは、予め全ノードにロードされているものとする。
【０１４５】
例えば、ａ［０：ｎ］［０］〜ａ［０：ｎ］［２］に関する計算をノードＮ０で実行し、ａ［０：ｎ］［３］〜ａ［０：ｎ］［５］に関する計算をノードＮ１で実行し、ａ［０：ｎ］［ｍ−２］〜ａ［０：ｎ］［ｍ］に関する計算をノードＮｐで実行する。
【０１４６】
ここで、各ノードＮ０〜Ｎｐにロードするプログラムの一例について説明する。
【０１４７】
図１６Ａ、図１６Ｂ、図１６Ｃおよび図１６Ｄは、プログラムの一例を示す説明図である。図１６Ａ〜図１６Ｄにおいて、プログラム１６００は、各ノードＮ０〜Ｎｐにロードするプログラムを簡素化して示したものである。ただし、図１６Ａ〜図１６Ｄでは、プログラム１６００の一部を抜粋して表示している。また、下記＜１＞〜＜８＞を前提とする。
【０１４８】
＜１＞管理サーバ１０１からのＯＮ  Ｅｒｒｏｒ解除トラップで、予備ノードＲＮの物理ノード情報、故障ノードの仮想ノード番号が送付される。
【０１４９】
＜２＞ハード故障発生時、管理サーバ１０１の要求により予備ノードＲＮにロードされるプログラムには予備ノード情報を含んでいるものとする。例えば、ＭＰＩ通信を使う場合、予備ノードＲＮでＭＰＩ初期化処理をしたら、故障ノードを予備ノードＲＮに置き換えた形でノード群が構成されるものとする。
【０１５０】
＜３＞ｃｏｐｙａｒｅａは、ｉｎｔ型で領域として確保している。
【０１５１】
＜４＞エラーハンドラの関数（Ｏｎ＿ｅｒｒｏｒ）があり、バリア待ちの最中でも割り込んで処理できる関数とする。
【０１５２】
＜５＞ペア２ノード間の終了状況を知ることができる関数（ＰａｉｒＢａｒｒｉｅｒ）があるものとする。
【０１５３】
＜６＞ペア２ノード間の相互保持関数（ＭｕｔｕａｌＣｐ）があるものとする。
【０１５４】
＜７＞自ノード内領域コピー関数（ＩｎｔｅｒｍｅｄｉａｔｅＣＰ）があるものとする。
【０１５５】
＜８＞自ノードの物理ノード情報を取得できる関数（ＰｈｙｓｉｃａｌＮｏｄｅ）があるものとする。
【０１５６】
図１７Ａおよび図１７Ｂは、メモリマップの一例を示す説明図である。図１７Ａおよび図１７Ｂにおいて、ノードＮｉおよびノードＮ（ｉ＋１）のメモリマップが示されている。図１７Ａおよび図１７Ｂの例では、０ｘ８０００００００以降にスモールストレージ領域が設けられている。
【０１５７】
システム領域（ＯＳ領域）とプログラム領域は、０ｘ００００００００〜０ｘ３ＦＦＦＦＦＦＦにあるものとし、計算に用いるエリアは０ｘ４０００００００〜０ｘ７ＦＦＦＦＦＦＦの間に要素数ＣＡ分だけあるものとする。このエリアには、（２）テーブル領域、（３）データ領域ｙ、（４）データ領域Ａ、および（５）データ領域ｘがある。計算結果は、（３）データ領域ｙに記憶されるものとする。
【０１５８】
スモールストレージは、自ノードでデータバックアップ領域０ｘ８０００００００〜０ｘＢＦＦＦＦＦＦＦと、ペアノードのバックアップ領域０ｘＣ０００００００〜０ｘＦＦＦＦＦＦＦＦとからなる。いずれも要素数はＣＡである。
【０１５９】
（２）テーブル領域には、バリアポイント番号と、仮想ノード→実ノード変換のテーブル領域があり、バリアポイント番号によって行列計算の何行目まで実行したかがわかるようになっている。また、仮想ノード→実ノード変換のテーブルを持つことによって、プログラムの変更なしに予備ノードＲＮを使用できるようにし、プログラムの再実行に支障がないようにしている。
【０１６０】
図１６Ｂに示した符号１６０１部分は、行列計算のメインルーチンである。１行の行列要素をｉｓｔ，ｉｅｎまでに分割して計算し、ｌｉｎｅで処理行を進めていき最後にＭＰＩ＿Ａｌｌｒｅｄｕｃｅ関数で最終結果を得るようになっている。ハードウェア故障がない場合には、ｗｈｉｌｅループを繰り返し実行し、ｙの要素数がＮになるまで演算を繰り返す。
【０１６１】
図１６Ｂに示した符号１６０２部分は、Ｏｎ＿ｅｒｒｏｒ処理のルーチンである。ハードウェア故障が発生したときは、ハードウェア故障が発生したノードが直接、あるいはペアとなっているノードが生存監視等の方法で異常を検知し、ハードウェア故障が発生したことを管理サーバ１０１に通知する。管理サーバ１０１は、ハードウェア故障を検知すると、予備ノードＲＮを準備し、続いて並列動作しているノード群（プログラム中ではＭＰＩ＿ＣＯＭＭ＿ＷＯＲＬＤが組となっている）に対して、ＯＮ  Ｅｒｒｏｒ解除トラップを発行する。
【０１６２】
ＯＮ  Ｅｒｒｏｒ解除トラップを受け取ったノードは、多くはバリア待ちでループ状態になっているが、割り込み処理でＯｎ＿ｅｒｒｏｒ関数を実行する。Ｏｎ＿ｅｒｒｏｒ関数は、予備ノードＲＮとハードウェア故障が発生していないノード（正常ノード）で動作が異なる。
【０１６３】
予備ノードＲＮについては、ストレージサーバ１０２からプログラムをロード、ＭＰＩ関数を使うための初期化処理を実行し、ペアとなるノードからｃｏｐｙａｒｅａ＿ｐａｉｒのデータを受信する。管理サーバ１０１から予備ノード情報を含んだ形でプログラムをロードし、ＭＰＩ＿ｉｎｉｔ時には故障ノードを予備ノードに置き換えた形で初期化されるものとし、ＭＰＩ通信でｃｏｐｙａｒｅａ＿ｐａｉｒが受信できるようになっているものとする（前提＜２＞）。その後、他ノードと同じバリア待ちのルーチンに入り、自身はバリア待ち状態となる。
【０１６４】
正常ノードは、自ノードのｃｏｐｙａｒｅａ＿ｍｙのエリアをｂａｓｅａｒｅａにコピーし、トラップ情報（ＯＮ  Ｅｒｒｏｒ解除トラップ）からハードウェア故障が発生した仮想ノードの物理ノード番号を予備ノードＲＮの物理ノード番号に置き換える。また、正常ノードは、自ノードのペアがハードウェア故障を起こした場合には、ｓｍａｌｌ  ｓｔｏｒａｇｅにあるｃｏｐｙａｒｅａ＿ｐａｉｒを予備ノードＲＮに送り、その後バリア待ち状態となる。
【０１６５】
全ノードがバリア待ち状態に入ったことを認識したノードから、バリア状態を抜けてｗｈｉｌｅ文の先頭から再実行する。なお、ｗｈｉｌｅ文中のＭＰＩ＿Ｂａｒｒｉｅｒ時には処理行を示すｌｉｎｅは更新されていないので、ｌｉｎｅについてはｂａｓｅａｒｅａにある値をそのまま使えばよい。
【０１６６】
以上説明したように、実施の形態にかかるノードＮｉによれば、同一のジョブを実行するノードＮ０〜Ｎｎでバリア同期を行う際に、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとる他ノードに自ノードのチェックポイントを送信するとともに、他ノードから他ノードのチェックポイントデータを受信することができる。そして、ノードＮｉによれば、送信した自ノードのチェックポイントデータをディスク３０３内の自ノードメモリ領域３１１に格納するとともに、受信した他ノードのチェックポイントデータをディスク３０３内の他ノードメモリ領域３１２に格納することができる。ノードＮｉのチェックポイントデータは、ノードＮｉのメインメモリ３０２内の情報である。他ノードのチェックポイントデータは、他ノードのメインメモリ３０２内の情報である。
【０１６７】
これにより、同一ジョブを実行中のノードＮ０〜Ｎｎでバリア同期を行うタイミングで、バリア同期の第１ステージで同期をとるノード間において、メインメモリ３０２内のデータ（チェックポイントデータ）のバックアップをとりあうことができる。
【０１６８】
また、ノードＮｉによれば、バリア同期を行う際に、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとるグループ内の少なくともいずれかの他ノードに自ノードのチェックポイントデータを送信するとともに、グループ内の少なくともいずれかの他ノードから当該他ノードのチェックポイントデータを受信することができる。
【０１６９】
これにより、バリア同期の第１ステージで同期をとるグループ内のノード数が３以上の場合であっても、グループ内のノード間でチェックポイントデータを相互保持することができる。また、グループ内の各ノードＮｉのチェックポイントデータを、グループ内のいずれか一つの他ノードが保持すればよいようにペアを形成することで、各ノードＮｉにおけるバックアップにかかる記憶容量の増加を防ぐことができる。
【０１７０】
また、ノードＮｉによれば、バリア同期を行う際に、ノードＮ０〜Ｎｎのうち自ノードと最初に同期をとるグループ内の他ノードそれぞれに自ノードのチェックポイントデータを送信するとともに、他ノードそれぞれから当該他ノードのチェックポイントデータを受信することができる。そして、ノードＮｉによれば、送信した自ノードのチェックポイントデータをディスク３０３内の自ノードメモリ領域３１１に格納するとともに、受信した他ノードそれぞれのチェックポイントデータをディスク３０３内の他ノードそれぞれに対応する他ノードメモリ領域３１２（例えば、図８に示した他ノードメモリ領域３１２−１，３１２−２）に格納することができる。
【０１７１】
これにより、バリア同期の第１ステージで同期をとるグループ内の他ノードそれぞれのチェックポイントデータを保持することができる。このため、グループ内のノードが複数同時にハードウェア故障となっても、グループ内の正常ノードのスモールストレージ領域３１０内の情報をもとにジョブを途中から再実行することが可能となる。
【０１７２】
また、ノードＮｉによれば、他ノードと同期をとるタイミング、すなわち、バリア同期ポイントに到達したタイミングで、他ノードに自ノードのチェックポイントデータを送信することができる。そして、ノードＮｉによれば、他ノードに自ノードのチェックポイントデータを送信し、かつ、他ノードから他ノードのチェックポイントデータを受信したことに応じて、他ノードとの同期が完了したと判断することができる。
【０１７３】
これにより、バリア同期の第１ステージの完了を、ノード間でのチェックポイントデータの相互保持の完了をもって判断することができる。このため、ノード間で同期をとるにあたり、各ノードの状態を通知しあわなくてもよく、ノード間の同期確認にかかる通信を削減することができる。
【０１７４】
また、ノードＮｉによれば、ジョブの実行を開始してから所定時間Ｔが経過した後のバリア同期ごとに、他ノードに自ノードのチェックポイントデータを送信するとともに、他ノードから他ノードのチェックポイントデータを受信することができる。
【０１７５】
これにより、ジョブの実行を開始してしばらくはバックアップをとるメリットが少ないことを考慮して、ノード間でのチェックポイントデータの相互保持を実施するタイミングを遅らせることができる。
【０１７６】
また、ノードＮｉによれば、他ノードで障害が発生した場合、他ノードの処理を引き継ぐ予備ノードＲＮに、ディスク３０３内の他ノードメモリ領域３１２に格納された他ノードのチェックポイントデータを送信することができる。そして、ノードＮｉによれば、ディスク３０３内の自ノードメモリ領域３１１に格納された自ノードのチェックポイントデータに基づいて、ジョブの実行を再開することができる。
【０１７７】
これにより、バリア同期の第１ステージで同期をとる他ノードで障害が発生しても、全ノードでバリア同期が成功した時点のチェックポイントデータを用いて、処理（エラーが発生したルーチン）の再実行を行って、ジョブの実行を再開することができる。このため、ハードウェア故障等でノードが使用できなくなっても、最長で定期的なセーブ処理が実施される間隔までの手戻りとすることができる。例えば、全体の処理に２４時間かかるジョブを１時間ごとに区切って実行するとする。本バックアップ方法を使わない場合のペナルティは、ハードウェア故障までにジョブを実行した時間であり、最長２４時間となる。一方、本バックアップ方法を使った場合のペナルティは、「１時間（最長）＋２３×チェックポイントデータの相互保持にかかる時間＋α（管理サーバ１０１が予備ノードＲＮを準備する等の時間）」となる。
【０１７８】
より具体的に説明すると、例えば、全体の処理に２４時間かかるとし、１時間ごとにセーブ処理を実行し（すなわち、１時間ごとにバリア同期が発生）、セーブ処理に１０分かかるとする。この場合、ジョブが完了するまでに要する時間は、「２７．８時間＝２４×６０＋２３×１０＝１６７０分」となる。
【０１７９】
また、３回に１回、ジョブの実行を開始してから１０時間が経過した後のいずれかのタイミングでハードウェア故障が発生するとする。この場合、６本のプログラム（ジョブ）を実行するのにかかる時間は、本処理システム１００では、「１６９．０時間（＝１６７０×６＋６０×（６／３）＝１０，１４０分）」となる。
【０１８０】
一方、既存の処理システムでは、「１８７．０時間（＝１６７０×６＋６００×（６／３）＝１１，２２０分）」となる（ただし、ペナルティを１０時間として計算している。）。この場合、本処理システム１００のほうが、既存の処理システムよりも時間が短くなっており、メリットがあるといえる。
【０１８１】
また、システム内にストレージが一つある従来方式と、本実施の形態の相互保持時間を以下の前提で比較する。
【０１８２】
（１）ノード当たりの相互保持データ量が８ＭＢ
（２）ノード数１００
（３）通信帯域はＩＯ帯域よりも大きいものとする。かつ、送信・受信は同時に処理できるものとする。
（４）従来方式のストレージのＩＯ帯域はストライピング技術を用いて１ＧＢ／ｓｅｃを実現しているものとする。
（５）本実施の形態のＩＯはノード内に実装されるが、１００ＭＢ／ｓｅｃのディスクで構成されるものとし、ＩＯ帯域は１００ＭＢ／ｓｅｃとする。
【０１８３】
従来方式では、１００ノード分の８ＭＢデータを１ＧＢ／ｓｅｃの帯域を持ったストレージに格納するため、０．８秒（＝８ＭＢ  ｘ  １００／１ＧＢ／ｓｅｃ）を要する。それに対して、本実施の形態では、相互保持データをペアノードに格納するため、１００ノードでもデータ量は８ＭＢのままである。０．０８秒（＝８ＭＢ  ｘ  １／１００ＭＢ／ｓｅｃ）となり、バックアップ時間は１／１０となる。また、本実施の形態ではシステムのストレージを広帯域とする必要はないため、ストレージにかかるコストを下げられる可能性がある。
【０１８４】
これらのことから、実施の形態にかかる処理システム１００およびノードＮｉによれば、ジョブを実行中の定期的なバックアップの際に生じるストレージへのアクセス集中を防いで、システム全体への負荷を減らし、バックアップにかかる時間を短縮することができる。
【０１８５】
なお、本実施の形態で説明したバックアップ方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列演算実行プログラムは、ハードディスク、フレキシブルディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）−ＲＯＭ、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本並列演算実行プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１８６】
また、本実施の形態で説明した並列処理装置（ノードＮｉ）は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣやＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。
【０１８７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８８】
（付記１）同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
制御部を有することを特徴とする並列処理装置。
【０１８９】
（付記２）前記制御部は、
前記バリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとるグループ内の少なくともいずれかの他ノードに自ノードの情報を送信するとともに、前記グループ内の少なくともいずれかの他ノードから当該他ノードの情報を受信する、
ことを特徴とする付記１に記載の並列処理装置。
【０１９０】
（付記３）前記制御部は、
前記バリア同期を行う際に、前記グループ内の他ノードそれぞれに自ノードの情報を送信するとともに、前記他ノードそれぞれから当該他ノードの情報を受信し、
送信した前記自ノードの情報を前記第１の記憶領域に格納するとともに、受信した前記他ノードそれぞれの情報を前記記憶装置内の前記他ノードそれぞれに対応する第２の記憶領域に格納する、
ことを特徴とする付記２に記載の並列処理装置。
【０１９１】
（付記４）前記制御部は、
前記他ノードと同期をとるタイミングで前記他ノードに自ノードの情報を送信し、
前記他ノードに自ノードの情報を送信し、かつ、前記他ノードから前記他ノードの情報を受信したことに応じて、前記他ノードとの同期が完了したと判断する、
ことを特徴とする付記１〜３のいずれか一つに記載の並列処理装置。
【０１９２】
（付記５）前記ジョブの実行を開始してから所定時間が経過した後のバリア同期ごとに、前記他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信する、ことを特徴とする付記１〜４のいずれか一つに記載の並列処理装置。
【０１９３】
（付記６）前記制御部は、
前記他ノードで障害が発生した場合、前記他ノードの処理を引き継ぐ予備ノードに、前記第２の記憶領域に格納された前記他ノードの情報を送信し、
前記第１の記憶領域に格納された自ノードの情報に基づいて、前記ジョブの実行を再開する、
ことを特徴とする付記１〜５のいずれか一つに記載の並列処理装置。
【０１９４】
（付記７）自ノードの情報は、自ノードのメインメモリ内の情報であり、
前記他ノードの情報は、前記他ノードのメインメモリ内の情報である、
ことを特徴とする付記１〜６のいずれか一つに記載の並列処理装置。
【０１９５】
（付記８）同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
処理をコンピュータに実行させることを特徴とする並列演算実行プログラム。
【０１９６】
（付記９）同一のジョブを実行する複数のノードでバリア同期を行う際に、前記複数のノードのうち自ノードと最初に同期をとる他ノードに自ノードの情報を送信するとともに、前記他ノードから前記他ノードの情報を受信し、
送信した前記自ノードの情報を自ノードの記憶装置内の第１の記憶領域に格納するとともに、受信した前記他ノードの情報を前記記憶装置内の第２の記憶領域に格納する、
処理をコンピュータが実行することを特徴とするバックアップ方法。
【符号の説明】
【０１９７】
１００  処理システム
１０１  管理サーバ
１０２  ストレージサーバ
１０３  ログインサーバ
１１０  ネットワーク
１２０  外部ストレージ
２０１，２０２，２０３，２０４  記憶装置
３００  バス
３０１  ＣＰＵ
３０２  メインメモリ
３０３  ディスク
３０４  メモリインタフェース
３０５  ＩＯインタフェース
３０６  バリア装置
３０７  インターノードインタフェース
３１０  スモールストレージ領域
３１１  自ノードメモリ領域
３１２，３１２−１，３１２−２  他ノードメモリ領域
４０１  通信制御部
４０２  格納部
４０３  検出部
４０４  再開制御部
１６００  プログラム
Ｎ０〜Ｎｎ，Ｎｉ  ノード
【図１】
2020067722.tif 000003
【図２】
2020067722.tif 000004
【図３】
2020067722.tif 000005
【図４】
2020067722.tif 000006
【図５】
2020067722.tif 000007
【図６】
2020067722.tif 000008
【図７】
2020067722.tif 000009
【図８】
2020067722.tif 000010
【図９】
2020067722.tif 000011
【図１０】
2020067722.tif 000012
【図１１】
2020067722.tif 000013
【図１２】
2020067722.tif 000014
【図１３】
2020067722.tif 000015
【図１４】
2020067722.tif 000016
【図１５】
2020067722.tif 000017
【図１６Ａ】
2020067722.tif 000018
【図１６Ｂ】
2020067722.tif 000019
【図１６Ｃ】
2020067722.tif 000020
【図１６Ｄ】
2020067722.tif 000021
【図１７Ａ】
2020067722.tif 000022
【図１７Ｂ】
2020067722.tif 000023