(57)【特許請求の範囲】
【請求項１】
サーバと接続される分散処理を実行する複数の演算装置であって、
前記サーバから前記分散処理の一時停止の要求を受信したとき、前記演算装置を停止させる演算処理一時停止部と、
分散処理が停止したときに、前記サーバから送信された、前記演算装置ごとに設けられた分散処理の演算進度をカウントするカウンタのカウンタ値を参照する演算タイムステップ参照通知に基づいて、前記カウンタ値を取得し前記サーバに送信する演算タイムステップ参照部と、
前記複数の演算装置のそれぞれの前記演算タイムステップ参照部から取得した複数のカウンタ値の最大値に少なくとも１カウント加算したタイムステップ最大値を前記サーバから取得してレジスタに記録する演算終了タイムステップ更新部と、
停止状態から前記分散処理を再開する演算再開部と、を備え、
前記分散処理を再開して前記タイムステップ最大値まで進めてから再度分散処理を停止することを特徴とする演算装置。
【請求項２】
前記演算タイムステップ参照部により取得した前記カウンタ値に基づいて、前記複数の演算装置中で最も前記カウンタ値が小さい前記演算装置から演算を再開することを特徴とする請求項１に記載の演算装置。
【請求項３】
請求項１または２に記載の演算装置と接続されるサーバであって、
分散処理が停止したときの前記複数の演算装置から送信された前記複数のカウンタ値の最大値を検出し、検出した前記最大値に少なくとも１カウント加算した前記タイムステップ最大値を算出して前記演算装置に送信することを特徴とするサーバ。
【請求項４】
前記カウンタ値に基づいて、前記複数の演算装置中で最も前記カウンタ値が小さい前記演算装置から演算を再開する指示を前記演算装置に送信することを特徴とする請求項３に記載のサーバ。
【請求項５】
サーバと接続される複数の演算装置の分散処理方法であって、
前記サーバが、前記分散処理の一時停止の要求をし、
前記複数の演算装置が、前記要求を受信して前記演算装置ごとに処理を一時停止し、
前記サーバが、分散処理の停止時に前記演算装置ごとに設けられた分散処理の演算進度をカウントするカウンタのカウンタ値を参照する演算タイムステップ参照通知を送信し、
前記複数の演算装置が、前記演算タイムステップ参照通知に基づいて、前記カウンタ値を取得し前記サーバに送信し、
前記サーバが、前記複数の演算装置から送信された複数のカウンタ値の最大値を検出し、検出した前記最大値に少なくとも１カウント加算したタイムステップ最大値を算出して前記演算装置に送信し、
前記演算装置が、前記タイムステップ最大値をレジスタに記録し、
前記サーバが、停止状態から前記分散処理を再開する通知を前記演算装置に送信し、
前記演算装置が、停止状態から前記分散処理を再開する通知に基づいて前記分散処理を再開して前記タイムステップ最大値まで分散処理を進めて停止する、
ことを特徴とする分散処理方法。
【請求項６】
一時停止時に、前記演算装置から取得した前記カウンタ値に基づいて、前記複数の演算装置中で最も前記カウンタ値が小さい前記演算装置から演算を再開することを特徴とする請求項５に記載の分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理装置のタイムステップの同期制御の技術に関する。
【背景技術】
【０００２】
近年、分散処理システム環境下においてＳＰＭＤ（単一プログラム複数データ）型プログラムなどのプログラムを実行する際、実行後の途中経過を確認してから、再度実行を継続するために、同期して停止させたいというニーズがある。
【０００３】
従来は、ＳＰＭＤ型プログラムを同期して停止させる場合には、汎用ＯＳ（Operating System）搭載の計算機（サーバ）により、計算機同士によるメッセージパッシングや同期関数などを用いることにより実現していた。
【０００４】
図７は、従来の各計算機（サーバ）間のやり取りで同期を実現する場合の分散処理システムの構成を示す図である。分散処理システム７０は４台のサーバＡ（７１ａ）、サーバＢ（７１ｂ）、サーバＣ（７１ｃ）、サーバＤ（７１ｄ）から構成されている。各サーバＡ〜Ｄ（７１ａ〜７１ｄ）はＣＰＵ７２（７２ａ〜７２ｄ）とＯＳ７４（７４ａ〜７４ｄ）を有し、各ＣＰＵは演算部７３（７３ａ〜７３ｄ）を有している。演算部７３は演算処理を実行し、ＯＳ７４はサーバＡ〜Ｄ（７１ａ、７１ｂ、７１ｃ、７１ｄ）自身の制御および、各サーバ同士の制御を行っている。
【０００５】
各サーバＡ〜Ｄ（７１ａ〜７１ｄ）には、それぞれＳＰＭＤ型プログラムＰ０（Ｐ１、Ｐ２、Ｐ３、Ｐ４）が実装され、外部から入力されるデータＤ１〜Ｄ３を用いてサーバ７１ｂ、７１ｃ、７１ｄがそれぞれに割り当てられた演算を実行する。また、サーバＡ（７１ａ）は親サーバとして、他のサーバＢ〜Ｄ（７１ｂ、７１ｃ、７１ｄ）との通信を行い、命令およびデータの送受信をする。他のサーバＢ〜Ｄ（７１ｂ、７１ｃ、７１ｄ）間でも通信を行う。
【０００６】
通常、上記のような構成の分散処理システムでは、利用者が演算の途中経過を確認する場合に、利用者が親サーバであるサーバＡ（７１ａ）のＯＳ７４ａから演算一時停止命令を出力する。各サーバＢ〜Ｄ（７１ｂ、７１ｃ、７１ｄ）のＯＳ７４ｂ、７４ｃ、７４ｄに対して送信される。その後、演算一時停止命令を受信した各サーバＡ〜Ｄ（７１ａ、７１ｂ、７１ｃ、７１ｄ）は一時停止の準備後、演算を停止させる。
【０００７】
図８は、図７に示した分散処理システムの動作を説明する図である。
ステップＳ８１では、サーバＡ（７１ａ）がサーバＢ（７１ｂ）に演算の開始を指示する（サーバＢ演算開始通知）。ステップＳ８２では、サーバＢ（７１ｂ）がサーバＢ演算開始通知を受信して、ステップＳ８３のタイミングからプログラムＰ０の実行を開始する。
【０００８】
次に、ステップＳ８４では、サーバＡ（７１ａ）がサーバＣ（７１ｃ）に演算の開始を指示する（サーバＣ演算開始通知）。ステップＳ８５では、サーバＣ（７１ｃ）がサーバＣ演算開始通知を受信して、ステップＳ８６のタイミングからプログラムＰ０の実行を開始する。
【０００９】
同様に、ステップＳ８７では、サーバＡ（７１ａ）がサーバＤ（７１ｄ）に演算の開始を指示する（サーバＤ演算開始通知）。ステップＳ８８では、サーバＤ（７１ｄ）がサーバＤ演算開始通知を受信して、ステップＳ８９のタイミングからプログラムＰ０の実行を
開始する。
【００１０】
ステップＳ８１０のタイミングでは、サーバＡ（７１ａ）は他のサーバＢ〜Ｄ（７１ｂ〜７１ｄ）の演算が終了するまで待機状態になる。
ステップＳ８１４ではサーバＢ（７１ｂ）の演算が終了し、サーバＢ（７１ｂ）からサーバＢ演算終了通知が送信される。ステップＳ８１５のタイミングでサーバＡ（７１ａ）はサーバＢ演算終了通知を受信する。次に、ステップＳ８１６ではサーバＣ（７１ｃ）の演算が終了し、サーバＣ（７１ｃ）からサーバＣ演算終了通知が送信される。ステップＳ８１７のタイミングでサーバＡ（７１ａ）はサーバＣ演算終了通知を受信する。同様に、ステップＳ８１８ではサーバＤ（７１ｄ）の演算が終了し、サーバＤ（７１ｄ）からサーバＤ演算終了通知が送信される。ステップＳ８１９のタイミングでサーバＡ（７１ａ）はサーバＤ演算終了通知を受信する。
【００１１】
ステップＳ８２０のタイミングでは、サーバＡ（７１ａ）は他のサーバＢ〜Ｄ（７１ｂ〜６１ｄ）の演算が終了したことを判断して待機状態から抜ける。ステップＳ８２１では次のプログラムが実行される。
【００１２】
しかしながら、上記のようにＯＳ（ソフトウェア）によりＳＰＭＤ型プログラムの実行を制御している場合に、各サーバＡ〜Ｄ（７１ａ〜７１ｄ）に演算を一時停止させると、各サーバＡ〜Ｄ（７１ａ〜７１ｄ）の実行した演算結果にズレが生じてしまうという問題がある。
【００１３】
また、特許文献１、特許文献２にはＦＰＧＡを使ったサーバ間での同期処理が提案されている。
【特許文献１】特開平１１−３１２１４８号公報
【特許文献２】特開平０２−０９０３５７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
分散処理装置の演算を一時停止させても該分散処理装置を構成する演算装置の演算結果にズレが生じない同期制御を行うことを目的とする。
【課題を解決するための手段】
【００１５】
態様のひとつであるサーバと接続される分散処理を実行する複数の演算装置であって、前記サーバから前記分散処理の一時停止の要求を受信したとき、前記演算装置を停止させる演算処理一時停止部と、分散処理が停止したときに、前記サーバから前記演算装置ごとに設けられた分散処理の演算進度をカウントするカウンタの値を参照する演算タイムステップ参照通知に基づいて、前記カウンタ値を取得し前記サーバに送信する演算タイムステップ参照部と、前記演算装置ごとの前記演算タイムステップ参照部から取得した前記カウンタ値から最大値を検出して前記検出した前記カウンタ値の最大値に少なくとも１カウント加算したタイムステップ最大値を前記サーバから取得してレジスタに記録する演算終了タイムステップ更新部と、停止状態から前記分散処理を再開する演算再開部と、を備え、前記分散処理を再開して前記タイムステップ最大値まで進めてから再度分散処理を停止する。
【００１６】
上記のように専用ハードハードウェアである演算装置を設けることにより、演算装置にＯＳなどが不要となる。また、サーバからの指示により演算装置が演算を実行するためシステム全体の整合をとることが容易にできる。
【発明の効果】
【００１７】
分散処理装置の演算を一時停止させても該分散処理装置を構成する演算装置の演算結果にズレが生じない同期制御を行うことができる。
【発明を実施するための最良の形態】
【００１８】
以下図面に基づいて、本発明の実施形態について詳細を説明する。
（実施例１）
図１は、１台の計算機（サーバ：ホストＰＣ等）と複数台の専用ハードウェアにより構成された分散処理システムの構成を示す図である。図１に示す分散処理システム１は、サーバ２と、複数の演算装置３（３ａ、３ｂ、３ｃ〜：専用ハードウェア）から構成されている。そして、図１に示す分散処理システム１を用いてＳＰＭＤプログラムなどの分散処理をする場合の演算一時停止時の同期ズレを防止する。
【００１９】
図２を用いてＳＰＭＤプログラムの同期ズレについて説明する。例えば、流体の動きをシミュレーションする場合について説明する。図２Ａは、流体の動きを８つの空間に分け、演算装置（ハード１〜ハード４）４台を用いて分散処理を行う場合について示している。ハード１は３つの空間の演算を担当し、ハード２は１つの空間の演算を担当し、ハード３は３つの空間の演算を担当し、ハード４は１つの空間の演算を担当する。
【００２０】
図２Ｂに示す縦軸は演算装置の名称を示し、横軸はシミュレーションにおける進度を示す（カウント値：タイムステップ）。例えば、流体が１秒後、２秒後・・・にどのような状態になるかを示している。
【００２１】
ハード１〜４が分散処理を同時にスタートし（カウント値＝０、実時間＝０秒）、カウント値３で停止させる場合、担当する空間が多い演算装置の演算の進みは遅くなる。図２Ｂではハード２がカウント値３まで演算を進めていれば、ハード１は空間の担当している量がハード２の３倍なので進度は１／３になる。つまり、実時間で停止するとハード１とハード２のカウント値にズレがでてしまう。
【００２２】
そこで、ハード１〜ハード４までの全てのカウント値が同じになるまで演算を実行して同期ズレをなくす。
図３にサーバ２の構成を示す。サーバ２は通信部３３と、ＯＳ３４（Operating System）、演算部３５、演算データ設定指示部３６、演算終了タイムステップ設定指示部３７、演算開始指示部３８、演算一時停止指示部３９、演算タイムステップ参照指示部３１０、演算終了タイムステップ更新指示部３１１、演算再開指示部３１２、リスタートデータ取得指示部３１３を搭載している。
【００２３】
通信部３３は、各演算装置３（３ａ〜３ｃ）との通信を行う。
演算部３５は、ＳＰＭＤ（単一プログラム複数データ）型プログラムなどを含むプログラムを実行する。また、演算部３５は最大値タイムステップ演算部３１４を有している。ここで、図１においてサーバ２が実行するＳＰＭＤプログラムは、図７、図８を用いて説明したプログラムＰ０のうちプログラムＰ１に関する部分である。また、サーバ２は、各演算装置３に対してＳＰＭＤプログラムに用いる演算データを送信する。図１では、ＳＰＭＤプログラムのうちプログラムＰ２〜Ｐ４に用いる演算データＤ１〜Ｄ３が送信される。また、サーバ２はＳＰＭＤプログラムを実行する指示も各演算装置３に転送する。
【００２４】
演算データ設定指示部３６は、サーバ２に接続された入力装置（不図示）から入力された演算データを各演算装置３に設定する指示を生成する。
演算終了タイムステップ設定指示部３７は、分散処理により演算するシミュレーションを終了するタイムステップを各演算装置３に設定する指示を生成する。
【００２５】
演算開始指示部３８は、各演算装置３に演算開始を指示するために演算開始通知を生成する。
演算一時停止指示部３９は、分散処理により演算中のシミュレーションを一時停止するときに各演算装置３に指示をするための演算一時停止通知を生成する。
【００２６】
演算タイムステップ参照指示部３１０は、各演算装置３の分散処理中のシミュレーションなどの演算がどこまで進んでいるかを参照するときに用いる演算タイムステップ参照通知を生成する。
【００２７】
演算終了タイムステップ更新指示部３１１は、各演算装置３に後述する最大値タイムステップ演算部３１４の演算した最大値タイムステップまで演算を進めるために各演算装置３の演算終了タイムステップレジスタ６の値を更新する演算タイムステップ更新通知を生成する。
【００２８】
演算再開指示部３１２は、一時停止を解除して再度演算を開始する通知を生成する。
リスタートデータ取得指示部３１３は、演算の再開時に必要な演算データを含むデータを取得するための通知を生成する。
【００２９】
演算装置３は、演算部４（４ａ〜４ｃ）、カウンタ５（５ａ〜５ｃ）、演算終了タイムステップレジスタ６（６ａ〜６ｃ）などを含んでいる。例えば、演算装置３はプログラム可能な集積回路などを用いて上記演算部４（４ａ〜４ｃ）、カウンタ５（５ａ〜５ｃ）、演算終了タイムステップレジスタ６（６ａ〜６ｃ）を構築し、構築した各部を制御する。ここで、プログラム可能な集積回路とはＦＰＧＡ（Field Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）などのことであるが、これらのデバイスに限定するものではない。
【００３０】
また、演算装置３にはそれぞれ割り当てられるプログラムがあり、そのプログラムに基づいて回路が構築される。図１では演算装置３ａにはプログラムＰ２、演算装置３ｂにはプログラムＰ３、演算装置３ｃにはプログラムＰ４が割り当てられている。例えば、ＦＰＧＡを用いる場合は、外部装置（ＰＣなど）から各演算装置３にプログラムＰ２、Ｐ３、Ｐ４に基づいて生成された回路構築のためのデータをメモリに格納して、コンフィギュレーション時に回路を構築する。また、サーバ２から送信されたデータＤ１、Ｄ２、Ｄ３を、そのデータに対応する演算装置３が受信して、そのデータを用いて演算を実行する。
【００３１】
カウンタ５（５ａ〜５ｃ）はサーバ２、演算装置３の同期を制御するために設けられたカウンタであり、予め設定された一定時間ごとにカウントをするカウンタである。ここで、カウンタ５がカウントする一定時間は、ＣＰＵに供給されるシステムクロックなどにより実際に時間計測するものでない。例えば、流体の動きを０〜１００秒の間１秒間隔でシミュレーションする場合に、流体の１０秒後の動きと、１１秒後の動きが異なれば演算量も異なる。流体の動きが１０秒後より１１秒後の方が複雑であれば１１秒後の演算量の方が１０秒後の演算量より増える。つまり、カウンタ５は予め設定された時間に対応する演算が終了するごとにカウントをするカウンタである。
【００３２】
演算終了タイムステップレジスタ６（６ａ〜６ｃ）は、例えば、シミュレーションを行う場合に、演算を終了するカウンタ５のカウント値をセットするためのレジスタである。演算終了タイムステップレジスタ６にセットするデータ（演算終了タイムステップ）はサーバ２から入力する。
【００３３】
図４は、演算装置３の構成を示す図である。
演算装置３は、演算部４、カウンタ５、演算終了タイムステップレジスタ６、通信部７
、制御部８、メモリ９、演算データ設定部１０、演算終了タイムステップ設定部１１、演算開始部１２、演算一時停止部１３、演算タイムステップ参照部１４、演算終了タイムステップ更新部１５、演算再開部１６、リスタートデータ取得部１７を備えている。
【００３４】
通信部７は、サーバ２との間で送受信される、演算データ（各演算装置３が演算に用いるデータ）、制御データ（演算装置３自身の制御するための通知および演算を制御するための通知）を含むデータの通信制御を行う。
【００３５】
制御部８は、通信部７から受信した演算データ、制御データに基づいて演算装置３を構成する各部（図４に示す４〜７、９〜１７を含む）の制御を行う。メモリ９は、演算データや演算結果などのデータを記録する。
【００３６】
演算データ設定部１０は、演算データの設定と、該設定された演算データを制御部８を介して演算部４に転送する。演算データの演算データ設定部１０への設定は、分散処理（ＳＰＭＤ型プログラムなど）に必要な演算データを、サーバ２に接続される入力装置（不図示）から入力し、通信部７と制御部８を介して演算データ設定部１０に転送されたのち設定される。例えば、演算データ設定部１０に設けられたメモリに演算データを記録する。また、演算データ設定部１０は、演算が開始されると、必要に応じて制御部８から送信される上記設定した演算データを演算部４に転送するための要求通知を受け取る。その後、その要求通知に基づいて演算データを制御部８を介して演算部４へ転送する。
【００３７】
演算終了タイムステップ設定部１１は、演算終了タイムステップレジスタ６にサーバ２および各演算装置３が分散処理を終了するタイムステップを示す演算終了タイムステップデータを設定するための制御を行う。ここで、タイムステップとは上記説明したカウンタ５がカウントする値に相当する。演算終了タイムステップデータは、サーバ２から入力され通信部７と制御部８を介して演算終了タイムステップ設定部１１に転送される。その後、演算終了タイムステップ設定部１１は、演算終了タイムステップレジスタ６に演算終了タイムステップデータを記録する。また、制御部８は演算終了タイムステップレジスタ６に記録された演算終了タイムステップデータを参照して演算部４の演算を終了させる。
【００３８】
演算開始部１２は分散処理の演算を開始するときに用いる。サーバ２から演算開始通知を受信したら全ての演算装置３の演算部４を開始する。演算開始通知は、サーバ２から送信され通信部７により受信され、通信部７から制御部８を介して演算開始部１２に送信される。例えば、演算開始部１２に演算開始フラグを設けて、演算開始通知の内容が演算開始を示していれば演算開始フラグを開始中の状態に遷移させ、演算部４で分散処理の演算を開始する。なお、演算開始時に演算開始部１２を参照して開始状態に遷移したことを検出して、上記カウンタ５の値を初期状態にしてもよい。
【００３９】
演算一時停止部１３は、分散処理の演算途中に一時停止するときに用いる。サーバ２から演算一時停止通知を受信したら全ての演算装置３の演算部４を即時停止する。演算一時停止通知は、サーバ２から送信され通信部７により受信され、通信部７から制御部８を介して演算一時停止部１３に送信される。例えば、演算一時停止部１３に演算一時停止フラグを設けて、分散処理の一時停止通知の内容が演算一時停止を示していれば演算一時停止フラグを一時停止中の状態に遷移させ、演算部４を即時停止する。また、演算部４で演算された演算結果もメモリ９などに保持しておく。
【００４０】
演算タイムステップ参照部１４は、カウンタ５の値を参照して現在どのタイムステップまで演算が実行されているかを検出する。演算タイムステップ参照部１４は、カウンタ５の値を取得して制御部８に転送する。そして、通信部７は、制御部８を介して一時停止したタイムステップの示す値をサーバ２に送信する。
【００４１】
演算終了タイムステップ更新部１５は、各演算装置３から送信された一時停止したときのタイムステップの値に基づいて生成されたタイムステップ最大値を受信する。演算終了タイムステップ更新部１５は、タイムステップ最大値通知を受信すると、演算終了タイムステップ設定部１１を介して演算終了タイムステップレジスタにタイムステップ最大値通知の示すタイムステップを設定する。タイムステップ最大値はサーバ２で生成される。サーバ２が収集した各演算装置３の一時停止時のタイムステップのうち最大のタイムステップを選択し、選択した最大のタイムステップにさらに少なくとも１タイムステップを追加したものである。例えば、演算装置３ａの一時停止時のタイムステップＴ１、演算装置３ｂの停止時のタイムステップＴ２、演算装置３ｃの停止時のタイムステップＴ３のうち、最大の停止時のタイムステップがＴ１であればＴ１＋１をタイムステップ最大値にし、タイムステップ最大値通知に含めて通知をする。
【００４２】
演算再開部１６は、一時停止した演算を再開させタイムステップ最大値になるまで演算を実行する。演算再開部１６は、演算終了タイムステップレジスタ６を参照してタイムステップ最大値の取得と、制御部８を介して演算部４に演算再開の通知をするとともに、メモリに一時保存した演算結果などのデータを演算部に転送するように通知をする。
【００４３】
リスタートデータ取得部１７は、一時停止（同期ズレのない一時停止）後に、一時停止を解除して再び演算を開始するために必要なデータを取得する。
（動作説明）
図５を用いて図１に示す分散処理装置の動作を説明する。ただし、便宜上図５ではサーバ２、演算装置３ａ（ハード１）、演算装置３ｂ（ハード２）の構成を用いて説明する。
【００４４】
ステップＳ１からステップＳ２では、サーバ２の有するＯＳとプログラムが、分散処理を行うために実行される。ここで、プログラムとはＳＰＭＤ（単一プログラム複数データ）型プログラムを含むプログラムである。
【００４５】
ステップＳ３では、サーバ２に接続されている入力装置から演算データが設定され、演算データを演算装置３ａに送信する。このとき演算データとともに演算装置３ａを識別する演算装置識別データを送信する。
【００４６】
ステップＳ４では、サーバ２から送信された演算データを演算装置３ａの通信部７が受信して演算装置３ａの演算データ設定部１０に設定する。
ステップＳ５、ステップＳ６ではステップＳ３、Ｓ４と同様に演算装置３ｂの演算データ設定部１０に演算データを設定する。
【００４７】
ステップＳ７では、サーバ２に接続されている入力装置から分散処理の演算を終了する演算終了タイムステップ（Ｔ１＿ｅｎｄ）が設定され、演算終了タイムステップを演算装置３ａに送信する。このとき演算終了タイムステップ設定通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００４８】
ステップＳ８では、サーバ２から送信された演算終了タイムステップを演算装置３ａの通信部７が受信して演算装置３ａの演算終了タイムステップ設定部１１に設定する。
ステップＳ９、ステップＳ１０ではステップＳ７、Ｓ８と同様に演算装置３ｂの演算終了タイムステップ設定部１１に演算終了タイムステップを設定する。
【００４９】
例えば、Ｔ１＿ｅｎｄに「１００」を設定するとタイムステップ（カウンタ５のカウント）が１００になると演算装置３ａは分散処理を終了する。
ステップＳ１１では、サーバ２に接続されている入力装置から分散処理の演算開始をす
る演算開始通知が設定され、演算開始通知を演算装置３ａに送信する。このとき演算開始通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００５０】
ステップＳ１２では、サーバ２から送信された演算開始通知を演算装置３ａの通信部７が受信して演算装置３ａの演算開始部１２に演算が開始された状態であることを設定して演算部４の演算を開始する。また、カウンタ５のカウンタ値を０にする。
【００５１】
ステップＳ１３、ステップＳ１４ではステップＳ１１、Ｓ１２と同様に演算装置３ｂの演算開始部１２に演算が開始された状態であることを設定する。
次に、サーバ２は演算一時停止イベントを検出する。例えば、演算一時停止イベントは分散処理の途中の演算結果を確認するために演算を一時停止するイベントである。
【００５２】
ステップＳ１５では、サーバ２に演算一時停止イベントに基づいて分散処理を一時停止するため演算一時停止通知が設定され、演算一時停止通知を演算装置３ａに送信する。このとき演算一時停止通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００５３】
ステップＳ１６では、サーバ２から送信された演算一時停止通知を演算装置３ａの通信部７が受信して演算装置３ａの演算一時停止部１３に演算が一時停止された状態であることを設定する。また、演算装置３ａの演算を停止させる。また、カウンタ５のカウントを停止させる。
【００５４】
ステップＳ１７、ステップＳ１８ではステップＳ１５、Ｓ１６と同様に演算装置３ｂの演算一時停止部１３に演算が一時停止された状態であることを設定する。また、演算装置３ａの演算を停止させる。
【００５５】
このとき、演算装置３ａのカウント値は６であり、演算装置３ｂのカウント値は８である。
ステップＳ１９では、サーバ２に一時停止したときのタイムステップを確認するために演算タイムステップ参照通知が設定され、演算タイムステップ参照通知を演算装置３ａに送信する。このとき演算タイムステップ参照通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００５６】
ステップＳ２０では、サーバ２から送信された演算タイムステップ参照通知を演算装置３ａの通信部７が受信して演算装置３ａの演算タイムステップ参照部１４が、カウンタ５のカウンタ値を取得する。
【００５７】
ステップＳ２１では、演算装置３ａの通信部７からカウント値をサーバ２に送信する。本例では、カウント値として６を送信する。
ステップＳ２２では、サーバ２の通信部が演算装置３ａのカウント値を取得する。
【００５８】
ステップＳ２３、ステップＳ２４、ステップＳ２５、ステップＳ２６では、ステップＳ１９〜Ｓ２２と同様にサーバ２が演算装置３ｂの一時停止時のカウント値を取得する。本例では、サーバ２はカウント値として８を取得する。
【００５９】
ステップＳ２７からステップＳ２８では、サーバ２は各演算装置３ａ、３ｂから取得したカウンタ値（一時停止時のタイムステップ）から最大値を検出する。本例では、演算装置３ａのカウンタ値６より演算装置３ｂのカウンタ値８の方が大きいためカウント値８を選択する。そして、カウント値８に１を加算してタイムステップ最大値を算出する（Ｔｅｎｄ＝８＋１）。ここで、タイムステップに１を加算しているのは演算途中で演算が停止
しているためである。
【００６０】
ステップＳ２９では、サーバ２の通信部からタイムステップ最大値を演算装置３ａに送信する。このときタイムステップ最大値とともに演算装置３ａを識別する演算装置識別データを送信する。
【００６１】
ステップＳ３０では、サーバ２から送信されたタイムステップ最大値を演算装置３ａの通信部７が受信し、演算終了タイムステップ更新部１５が演算終了タイムステップレジスタ６にタイムステップ最大値を設定する。なお、本例では、タイムステップ最大値を演算終了タイムステップレジスタ６に設定しているが、演算終了タイムステップレジスタ６にせず他にレジスタを設けてもよい。
【００６２】
ステップＳ３１、ステップＳ３２ではステップＳ２９、Ｓ３０と同様に、サーバ２からの送信により、演算装置３ｂにタイムステップ最大値を取得させる。
ステップＳ３３では、サーバ２からタイムステップ最大値までの演算を再開するための演算再開通知を演算装置３ａに送信する。このとき演算再開通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００６３】
ステップＳ３４では、演算装置３ａの通信部７により演算再開通知を受信し、演算再開部１６により一時停止した演算を再開させタイムステップ最大値になるまで演算を実行する。
【００６４】
ステップＳ３５、ステップＳ３６では、ステップＳ３３、Ｓ３４と同様に、サーバ２からの通知により、演算装置３ｂでもタイムステップ最大値になるまで演算を実行させる。
演算装置３ａ、３ｂはタイムスタンプ最大値まで演算をして自動停止する。ここで、演算装置３ａと演算装置３ｂの実際に停止する時刻は、演算量の違いによって異なる。
【００６５】
ステップＳ３７では、サーバ２がタイムスタンプ最大値までの演算をして停止していることを確認する。サーバ２には、再停止したときのタイムステップを確認するために演算タイムステップ参照通知が設定され、演算タイムステップ参照通知を演算装置３ａに送信する。このとき演算タイムステップ参照通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００６６】
ステップＳ３８では、サーバ２から送信された演算タイムステップ参照通知を演算装置３ａの通信部７が受信して演算装置３ａの演算タイムステップ参照部１４が、カウンタ５のカウンタ値を取得する。
【００６７】
ステップＳ３９では、演算装置３ａの通信部７からカウント値をサーバ２に送信する。本例では、カウント値として９を送信する。
ステップＳ４０では、サーバ２の通信部が演算装置３ａのカウント値を取得する。
【００６８】
ステップＳ４１、ステップＳ４２、ステップＳ４３、ステップＳ４４では、ステップＳ３７〜Ｓ４０と同様にサーバ２が演算装置３ｂの再停止時のカウント値を取得する。本例では、サーバ２はカウント値として９を取得する。
【００６９】
ステップＳ４５では、サーバ２は演算装置３ａから演算結果を取得するためにリスタートデータ取得通知を演算装置３ａに送信する。このときリスタートデータ取得通知とともに演算装置３ａを識別する演算装置識別データを送信する。
【００７０】
ステップＳ４６では、演算装置３ａがリスタートデータ取得通知を受信する。そして、
リスタートデータ取得通知に基づいてリスタートデータ取得部１７により再停止時の演算結果を収集してステップＳ４７でサーバ２へ送信する。ステップＳ４８では、サーバ２が演算結果を取得する。
【００７１】
ステップＳ４９、ステップＳ５０、ステップＳ５１、ステップＳ５２では、ステップＳ４５〜Ｓ４８と同様にサーバ２が演算装置３ｂの再停止時の演算結果を取得するための処理を実行する。
【００７２】
ステップＳ５３からステップＳ５４ではサーバ２はプログラムを終了する。
ステップＳ５５からステップＳ５６では、サーバ２は分散処理プログラムを再停止時に取得した演算結果を用いて演算を再開する。本例では、タイムステップが１００になるまで各演算装置３ａ、３ｂが演算を行う。または、タイムステップ０から演算を再び行う。
【００７３】
例えばＦＰＧＡなどにおいては、専用ハードウェアの回路面積や消費電力、メモリ搭載量の制限などにより、割り込み等のイベント通知機能を実装できない場合があるが、上記説明した分散処理システムにより、サーバ（汎用ＯＳ搭載計算機）から演算装置（専用ハードウェア）間の同期を制御し、同期停止を実現することができる。
【００７４】
（実施例２）
一時停止後の分散処理をより早く実行するために、サーバ２は各演算装置３へ演算再開通知をする際、一時停止時に取得したタイムステップを比較してタイムスタンプが小さかった演算装置３から優先的に実行させるようにする。
【００７５】
図６Ａ（一時停止時の各演算装置３のタイムステップを示す図）は、演算装置３（ハード１）のカウント値が３、演算装置３（ハード２）のカウント値が１、演算装置３（ハード３）のカウント値が３であため、図６Ｂ（演算再開時のタイムステップが小さい順に並び替えことを示す図）である。
【００７６】
なお、本発明は、上記説明したＳＰＭＤ型プログラムだけでなく、複数プログラムを分散処理する場合にも適用することができる。例えば、演算装置３ａ〜３ｃに流体の演算を担当させ、その他の演算装置３に流体の動きに基づいた温度の演算をさせる。
【００７７】
上記構成された分散処理システムにおいて、１台のサーバから、仮停止と本停止の２段階停止命令でプログラムの演算停止を同期させることができる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない。
【図面の簡単な説明】
【００７８】
【図１】分散処理システムの構成を示す図である。
【図２】分散処理システムにおける同期ズレを説明するための図である。
【図３】サーバの構成を示す図である。
【図４】演算装置の構成を示す図である。
【図５】分散処理システムの動作を示す図である。
【図６】一時停止後に演算を開始する際の優先順位を示す図である。
【図７】従来の分散処理システムを示す図である。
【図８】従来の分散処理システムの動作を示す図である。
【符号の説明】
【００７９】
１  分散処理システム
２  サーバ
３  演算装置
４  演算部
５  カウンタ
６  演算終了タイムステップレジスタ
７  通信部
８  制御部
９  メモリ
１０  演算データ設定部
１１  演算終了タイムステップ設定部
１２  演算開始部
１３  演算一時停止部
１４  演算タイムステップ参照部
１５  演算終了タイムステップ更新部
１６  演算再開部
１７  リスタートデータ取得部
３３  通信部
３４  ＯＳ
３５  演算部
３６  演算データ設定指示部
３７  演算終了タイムステップ設定指示部
３８  演算開始指示部
３９  演算一時停止指示部
３１０  演算タイムステップ参照指示部
３１１  演算終了タイムステップ更新指示部
３１２  演算再開指示部
３１３  リスタートデータ取得指示部
３１４  最大値タイムステップ演算部
７０  分散処理システム
７１  サーバ
７２  ＣＰＵ
７３  演算部
７４  ＯＳ
【図１】
0005181762.tif 000002
【図２】
0005181762.tif 000003
【図３】
0005181762.tif 000004
【図４】
0005181762.tif 000005
【図５】
0005181762.tif 000006
【図６】
0005181762.tif 000007
【図７】
0005181762.tif 000008
【図８】
0005181762.tif 000009