(57)【要約】【課題】複数の処理装置をそなえる処理システムの性能低下を抑制する。【解決手段】  演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置３と、前記演算結果を得るための処理において、或る処理装置３が実行した処理の処理結果を他の各処理装置３に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置３を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置３の各々の処理の進捗を示す情報を前記複数の処理装置３の各々から集約する集約部２１と、前記集約部２１が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する決定部２２と、をそなえる。【選択図】図８
2018128923.tif 000002
【特許請求の範囲】
【請求項１】
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置と、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約する集約部と、
前記集約部が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する決定部と、をそなえる
ことを特徴とする、処理システム。
【請求項２】
前記決定部が決定した前記送信順序を前記複数の処理装置の各々に通知する通知部をさらにそなえ、
前記複数の処理装置の各々は、前記通知部から通知された前記送信順序に従って、前記逐次的な送信を行なう、
ことを特徴とする、請求項１記載の処理システム。
【請求項３】
前記決定部は、規定時間ごとに、当該規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置に対する前記送信順序を決定する、
ことを特徴とする、請求項１又は請求項２記載の処理システム。
【請求項４】
前記決定部は、規定時間内に受信していない前記処理の進捗を示す情報の送信元の処理装置の前記送信順序を、前記規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置よりも後となるように決定する、
ことを特徴とする、請求項１又は請求項２記載の処理システム。
【請求項５】
前記処理の進捗を示す情報は、時刻を示す情報であり、
前記決定部は、先の時刻を示す情報を送信した処理装置ほど、前記逐次的な送信において先の順序となるように前記送信順序を決定する、
ことを特徴とする、請求項１〜４のいずれか１項記載の処理システム。
【請求項６】
演算結果を得るための処理が各々に分散して割り当てられた複数のコンピュータのうちのいずれかのコンピュータに、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記処理装置の処理の進捗を示す情報を集約装置に送信し、
前記集約装置により前記複数の処理装置の各々の処理の進捗を示す情報に基づき決定された前記逐次的な送信における送信順序を、前記集約装置から受信し、
前記集約装置から受信した前記送信順序に従って、前記逐次的な送信を行なう、
処理を実行させることを特徴とする、処理プログラム。
【請求項７】
コンピュータに、
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置による前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約し、
集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する、
処理を実行させることを特徴とする、集約プログラム。
【請求項８】
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置のうちのいずれかの処理装置であって、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記処理装置の処理の進捗を示す情報を集約装置に送信する送信部と、
前記集約装置により前記複数の処理装置の各々の処理の進捗を示す情報に基づき決定された前記逐次的な送信における送信順序を、前記集約装置から受信する受信部と、
前記集約装置から受信した前記送信順序に従って、前記逐次的な送信を行なう処理部と、をそなえる
ことを特徴とする、処理装置。
【請求項９】
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置による前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約する集約部と、
前記集約部が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する決定部と、をそなえる
ことを特徴とする、集約装置。
【請求項１０】
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置と、集約装置と、をそなえる処理システムにおける処理方法であって、
前記集約装置が、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約し、
集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する、
ことを特徴とする、処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理システム、処理プログラム、集約プログラム、処理装置、集約装置、及び処理方法に関する。
【背景技術】
【０００２】
処理システムとして、複数の処理装置、例えば、複数のサーバをネットワークで相互に通信可能に接続したクラスタシステム（「ＰＣ（Personal Computer）クラスタ」と称されてもよい）が知られている。
【０００３】
クラスタシステムの性能は、クラスタシステムを構成するサーバの台数が多いほど高くなる場合が多い。例えば、高性能なスーパーコンピュータでは数千〜数万台のサーバが搭載される場合がある。
【０００４】
クラスタシステムでは、サーバ間の通信の一例として、図１に例示するようなブロードキャスト（Broadcast）が行なわれる場合がある。ブロードキャストは、或るサーバにおいて、或るデータを自身のサーバ以外の複数のサーバに送信する集合通信の１つであり、サーバで実行される様々なアプリケーションにおいて活用されている。
【０００５】
ブロードキャストの実装例の１つとして、図２に例示するようなバケツリレー型ブロードキャストが知られている。バケツリレー型ブロードキャストは、サーバが転送対象のデータを分割し、分割したデータをバケツリレーのように次のサーバに送信する。
【０００６】
一例として、サーバ＃０がサーバ＃１に分割データを送信すると、サーバ＃１がサーバ＃２に分割データを送信し、その後、サーバ＃２がサーバ＃３に分割データを送信する、という手順が分割データごとに繰り返される。これにより、全てのサーバに転送対象のデータが送信される。
【０００７】
バケツリレー型ブロードキャストは、図３に例示するように、複数のサーバがスイッチに接続されるようなスター型トポロジを持つクラスタシステムにおいて有効である。スター型トポロジでは、サーバ＃０から他のサーバへの通信はスイッチを経由することになる。この場合、サーバ＃０が全てのサーバに対してブロードキャストを行なうと、サーバ＃０とスイッチとの間の経路に通信が集中するため、バンド幅が圧迫され、当該経路がシステムの性能のボトルネックになることがある。
【０００８】
これに対し、バケツリレー型ブロードキャストでは、サーバ＃０とスイッチとの間のような特定の経路に通信が集中しないため、システムの性能低下を抑制できる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−３１８２７４号公報
【特許文献２】特開２００８−１１７１１６号公報
【特許文献３】特開２００３−２４２０６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
サーバにおけるアプリケーションの実行では、プロセッサによる何らかの処理が終わった後に通信（例えばブロードキャスト）が行なわれることが多い。このため、ＯＳ（Operating System）ノイズやロードインバランス等の影響によって、サーバ間でプログラムの進行度合いにバラつきが生じる場合がある。
【００１１】
上述したバケツリレー型ブロードキャストでは、データを受け取ったサーバが次のサーバにデータを送信する。従って、いずれか１つのサーバにおいてプログラムの実行が遅れていると、後続のサーバにおける通信が遅れてしまい、アプリケーションの性能が低下し、結果として、クラスタシステムの性能が低下する場合がある。
【００１２】
１つの側面では、本発明は、複数の処理装置をそなえる処理システムの性能低下を抑制することを目的とする。
【課題を解決するための手段】
【００１３】
１つの側面では、処理システムは、演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置と、集約部と、決定部とをそなえてよい。前記集約部は、前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約してよい。前記逐次的な送信では、前記処理結果が前記他の各処理装置を順次経由する経路で送信されてよい。また、前記決定部は、前記集約部が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定してよい。
【発明の効果】
【００１４】
１つの側面では、複数の処理装置をそなえる処理システムの性能低下を抑制できる。
【図面の簡単な説明】
【００１５】
【図１】ブロードキャストによるデータ転送例を示す図である。
【図２】バケツリレー型ブロードキャストによるデータ転送例を示す図である。
【図３】複数のサーバがスイッチに接続されるクラスタシステムの一例を示す図である。
【図４】複数のサーバでのＬＵ分解の一例を説明する図である。
【図５】複数のサーバでのＬＵ分解の一例を説明する図である。
【図６】ブロードキャストの通信時間の一例を示す図であり、（ａ）は全サーバで同時に通信準備が完了した場合を示し、（ｂ）はサーバ＃１の通信準備が遅れた場合を示す。
【図７】一実施形態に係る通信順序の制御の一例を示す図である。
【図８】一実施形態に係るクラスタシステムの構成例を示すブロック図である。
【図９】一実施形態に係るサーバのハードウェア構成例を示すブロック図である。
【図１０】時刻情報管理テーブルの一例を示す図である。
【図１１】集約サーバ及び計算サーバの動作例を説明する図である。
【図１２】変換サーバによるソースコードの変換手順の一例を示す図である。
【図１３】ソースコードの変換例を示す図である。
【図１４】変換サーバの第１の動作例を示すフローチャートである。
【図１５】変換サーバの第２の動作例を示すフローチャートである。
【図１６】計算サーバの動作例を示すフローチャートである。
【図１７】集約サーバの第１の動作例を示すフローチャートである。
【図１８】集約サーバの第２の動作例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示あり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１７】
〔１〕一実施形態
〔１−１〕クラスタシステムについて
一実施形態に係るクラスタシステムは、複数のサーバにより構成されてよく、複数のサーバを、例えば、メッシュ、クロスバ、トーラス等、或いは、これらの２以上の組み合わせによるトポロジによって相互に通信可能に接続してよい。なお、クラスタシステムのトポロジには、図３に例示するスター型のトポロジが含まれてもよい。
【００１８】
クラスタシステムは、例えば、与えられたデータに対する処理を複数のサーバの各々に分散して割り当て、各サーバの処理結果を統合することで、与えられたデータに対する処理の処理結果（解）を得ることができる。換言すれば、複数のサーバは、演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置の一例である。
【００１９】
このような複数のサーバの協調動作（例えば並列処理）では、或るサーバが行なった処理の結果を、他のサーバでの処理に利用する場合がある。サーバ間での処理結果の送受信、換言すれば、サーバ間の通信は、上述したブロードキャスト、例えば、バケツリレー型ブロードキャストにより行なわれてよい。サーバ間の通信は、演算結果を得るための処理において、或るサーバが実行した処理の処理結果を他の各サーバに送信するための送信であって、処理結果を他の各サーバを順次経由する経路で送信する逐次的な送信の一例である。
【００２０】
以下、ブロードキャスト、例えば、バケツリレー型ブロードキャストが行なわれる状況の一例として、複数のサーバによりＬＵ分解が行なわれる場合について説明する。なお、ＬＵ分解は、与えられた行列を、下三角行列Ｌ（Lower triangle matrix）と上三角行列Ｕ（Upper triangle matrix）との積ＬＵに分解する演算である。
【００２１】
図４に例示するように、クラスタシステムは、行列データが与えられた場合（符号（１）参照）、当該データを分割して、複数（例えば４つ）のサーバ＃０〜＃３（Ｐ０〜Ｐ３と表記する場合がある）に割り当てる（符号（２）参照）。
【００２２】
次いで、図５に例示するように、Ｐ０、Ｐ１、Ｐ２は、それぞれ、元の行列データにおける最も左の列と、最も上の列とをＬＵ分解する（符号（３）参照）。
【００２３】
符号（３）で示す状態において、クラスタシステムは、符号（４）に示すように、Ａｘの行列とＢｙの行列との行列積を解き、Ｃｚ部分を更新したい。このときの計算内容は、Ｃ０＝Ｃ０−Ａ０Ｂ０、Ｃ１＝Ｃ１−Ａ１Ｂ０、Ｃ２＝Ｃ２−Ａ０Ｂ１、Ｃ３＝Ｃ３−Ａ１Ｂ１となる。なお、ｘ、ｙはそれぞれ０又は１の整数、ｚは０〜３の整数である。
【００２４】
しかし、Ｐ０は計算用のデータＡ０及びＢ０を持つためＣ０を計算できるが、Ｐ０以外のＰ１、Ｐ２、及びＰ３は、計算用のデータを持たない。そこで、符号（５）に示すように、計算用のデータを持つサーバは、当該計算用のデータを利用するサーバにデータ転送を行なう。
【００２５】
例えば、Ｃ１を計算するＰ１はＡ１を持つがＢ０を持たないため、Ｐ０はＢ０をＰ１にブロードキャスト（紙面縦方向）してよい。また、Ｃ２を計算するＰ２はＢ１を持つがＡ０を持たないため、Ｐ０はＡ０をＰ２にブロードキャスト（紙面横方向）してよい。さらに、Ｃ３を計算するＰ３はＡ１及びＢ０の双方を持たないため、Ｐ１はＡ１をＰ３にブロードキャスト（紙面横方向）し、Ｐ２はＢ１をＰ３にブロードキャスト（紙面縦方向）してよい。
【００２６】
データが転送されると、Ｐ１、Ｐ２、及びＰ３はそれぞれ行列積の計算を行なう。以上の処理により、Ｐ０〜Ｐ３の各計算結果が得られる。これらの計算結果は、図４の符号（１）に示す行列データのＬＵ分解の解である、下三角行列Ｌと上三角行列Ｕとの積の導出に用いられてよい。
【００２７】
以上のように、クラスタシステムにおいて、ブロードキャストは、例えば、或る１つのサーバが行なった処理の結果を他のサーバが使用して次の処理を行なう場合等に利用されることがある。
【００２８】
なお、図４及び図５では、転送対象の各データがサーバ間で１回ずつ転送される例を示しているが、処理を行なうサーバ数や処理内容によっては、例えば図２に示すバケツリレー型ブロードキャストにより逐次的に転送される場合もある。
【００２９】
図６は、ブロードキャストの通信時間の一例を示す図である。図６に例示するように、ブロードキャスト、例えば、バケツリレー型ブロードキャストでは、図６の（ａ）に示すように、全サーバで同時に通信準備が完了した場合、各サーバにおいて通信の待ち時間は発生しない。
【００３０】
一方、図６の（ｂ）に示すように、例えばサーバ＃１の通信準備が遅れた場合、サーバ＃１で待ち時間が発生し、通信時間が増加するため、アプリケーションの性能低下が生じてしまう。
【００３１】
そこで、一実施形態では、複数のサーバによるアプリケーションの実行中に、処理の実行の進行度の早いサーバから順に通信を行なうように制御することで、サーバでの通信の待ち時間を小さくする。これは、ブロードキャストでは、最終的に送信先（送信対象）のサーバが転送対象のデータを有している状態になればよく、転送順序に制約はない、すなわち、転送順序を自由に決定できることを利用したものである。
【００３２】
例えば、一実施形態では、図７に示すように、サーバ＃１の通信準備が遅れた場合、処理の進行が早い順、例えばサーバ＃０→＃２→＃３→＃１の順となるように転送順序を変更してよい。これにより、サーバ＃１での待ち時間の発生を抑制でき、サーバ＃０→＃１→＃２→＃３の転送順序とした図６の（ｂ）の場合に比べて、通信時間を減少させることができるため、アプリケーションの性能低下を抑制できる。なお、「転送順序」は、「通信順序」、「送信順序」、又は、「送受信順序」と称されてもよい。
【００３３】
クラスタシステムのサーバ（「ノード」と称されてもよい）の数は年々増加傾向にある。また、サーバ台数が多くなるにつれて、サーバ間の通信がアプリケーションの実行時間に占める割合は増加する。
【００３４】
従って、上述した手法によりブロードキャスト通信を高速化させることは、クラスタシステムにおいて実行されるアプリケーションの性能向上を図る上で効果的である。コンピュータ、例えば、スーパーコンピュータのベンチマークに用いられるＬＩＮＰＡＣＫにおいても、転送順序を変更することによる有意な結果が得られた。
【００３５】
〔１−２〕クラスタシステムの構成例
次に、一実施形態に係るクラスタシステム１の構成例について説明する。図８は一実施形態に係るクラスタシステム１の機能構成例を示すブロック図であり、図９はサーバ１０のハードウェア構成例を示すブロック図である。
【００３６】
図８に示すように、クラスタシステム１は、例示的に、集約サーバ２、複数の計算サーバ３、及び、変換サーバ４をそなえてよい。なお、集約サーバ２及び変換サーバ４の一方又は双方は、クラスタシステム１に複数台存在してもよい。
【００３７】
集約サーバ２、計算サーバ３、及び、変換サーバ４は、ネットワーク５を介して相互に通信可能に接続されてよい。ネットワーク５としては、例えば、イーサネット（Ethernet；登録商標）、インフィニバンド（InfiniBand）、ミリネット（Myrinet）等の高速なバスアーキテクチャに対応したネットワーク（「インターコネクト」と称されてもよい）が挙げられる。集約サーバ２、計算サーバ３、及び、変換サーバ４間は、ネットワーク５を介して、上述した高速なバスアーキテクチャに対応したメタルケーブル又は光ケーブル等によって接続されてよい。
【００３８】
（ハードウェア構成例）
次に、集約サーバ２、計算サーバ３、及び、変換サーバ４のハードウェア構成例について説明する。なお、集約サーバ２、計算サーバ３、及び、変換サーバ４は、いずれも同様のハードウェア構成をそなえてよい。以下、便宜上、集約サーバ２、計算サーバ３、及び、変換サーバ４をまとめてサーバ１０と表記し、サーバ１０のハードウェア構成例について説明する。
【００３９】
図９に示すように、コンピュータの一例としてのサーバ１０は、例示的に、プロセッサ１０ａ、メモリ１０ｂ、記憶部１０ｃ、ＩＦ（Interface）部１０ｄ、Ｉ／Ｏ（Input / Output）部１０ｅ、及び読取部１０ｆをそなえてよい。
【００４０】
プロセッサ１０ａは、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ１０ａは、各ブロック１０ｂ〜１０ｆとバス１０ｉで相互に通信可能に接続されてよい。プロセッサ１０ａとしては、ＣＰＵ、ＧＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤ（例えばＦＰＧＡ）等の集積回路（ＩＣ）が用いられてもよい。なお、ＣＰＵはCentral Processing Unitの略称であり、ＧＰＵはGraphics Processing Unitの略称であり、ＭＰＵはMicro Processing Unitの略称である。ＤＳＰはDigital Signal Processorの略称であり、ＡＳＩＣはApplication Specific Integrated Circuitの略称である。ＰＬＤはProgrammable Logic Deviceの略称であり、ＦＰＧＡはField Programmable Gate Arrayの略称である。
【００４１】
メモリ１０ｂは、種々のデータやプログラムを格納するハードウェアの一例である。メモリ１０ｂとしては、揮発性メモリ、例えば、ＤＲＡＭ（Dynamic RAM）等のＲＡＭが挙げられる。
【００４２】
記憶部１０ｃは、種々のデータやプログラム等を格納するハードウェアの一例である。例えば、記憶部１０ｃは、サーバ１０の二次記憶装置として使用されてよく、ＯＳやファームウェア、アプリケーション等のプログラム、及び各種データが格納されてよい。記憶部１０ｃとしては、例えば、ＨＤＤ（Hard Disk Drive）等の磁気ディスク装置、ＳＳＤ（Solid State Drive）等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、ＳＣＭ（Storage Class Memory）、ＲＯＭ（Read Only Memory）等が挙げられる。記憶部１０ｃは、サーバ１０の各種機能の全部若しくは一部を実現するプログラム１０ｇを格納してもよい。
【００４３】
ＩＦ部１０ｄは、ネットワーク５を介して、集約サーバ２、計算サーバ３、又は、変換サーバ４との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばＩＦ部１０ｄとしては、イーサネット（登録商標）、インフィニバンド、ミリネット等に準拠したアダプタが挙げられる。なお、サーバ１０は、管理者の管理端末との間の接続及び通信の制御等を行なう通信インタフェースをそなえてもよく、当該通信インタフェースを用いて、図示しないネットワークからプログラム１０ｇをダウンロードしてもよい。
【００４４】
Ｉ／Ｏ部１０ｅは、例えば、マウス、キーボード、タッチパネル、操作ボタン等の入力装置、並びに、ディスプレイや、プロジェクタ、プリンタ等の出力装置の少なくとも一方を含んでよい。
【００４５】
読取部１０ｆは、記録媒体１０ｈに記録されたデータやプログラムを読み出しプロセッサ１０ａに出力するリーダの一例である。読取部１０ｆは、記録媒体１０ｈを接続又は挿入可能な接続端子又は装置を含んでもよい。読取部１０ｆとしては、例えばＵＳＢ（Universal Serial Bus）等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、ＳＤカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体１０ｈにはプログラム１０ｇ等が格納されてもよい。
【００４６】
記録媒体１０ｈとしては、例示的に、磁気／光ディスクやフラッシュメモリ等の非一時的なコンピュータ読取可能な記録媒体が挙げられる。磁気／光ディスクとしては、例示的に、フレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク、ＨＶＤ（Holographic Versatile Disc）等が挙げられる。フラッシュメモリとしては、例示的に、ＵＳＢメモリやＳＤカード等の半導体メモリが挙げられる。なお、ＣＤとしては、例示的に、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、例示的に、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【００４７】
上述したサーバ１０のハードウェア構成は例示である。従って、サーバ１０内でのハードウェアの増減（例えば任意のブロックの追加や削除）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。例えば、クラスタシステム１において計算を行なう複数の計算サーバ３の構成から、Ｉ／Ｏ部１０ｅや読取部１０ｆを除外してもよい。
【００４８】
（機能構成例）
次に、集約サーバ２、計算サーバ３、及び、変換サーバ４の機能構成例について説明する。
【００４９】
集約サーバ２は、集約装置の一例である。例えば、集約サーバ２は、各計算サーバ３の通信順序、例えば、ブロードキャストを行なう順序を決定する。図８に示すように、集約サーバ２は、例示的に、時刻情報受信部２１、送信順序決定部２２、及び、通知部２３をそなえてよい。
【００５０】
時刻情報受信部２１は、演算結果を得るための処理において、或る計算サーバ３が実行した処理の処理結果を他の各計算サーバ３に送信するための逐次的な送信を行なう場合に、各計算サーバ３の処理の進捗を示す情報を集約する集約部の一例である。
【００５１】
例えば、時刻情報受信部２１は、複数の計算サーバ３の各々から特定のタイミングで送信された時刻情報を受信し、計算サーバ３ごとの時刻情報を管理してよい。時刻情報は、時刻を示す情報であり、計算サーバ３における処理の進捗を示す情報の一例である。
【００５２】
時刻情報としては、例えば、計算サーバ３自身のシステム上の時刻を示す情報であってもよいし、集約サーバ２に集約サーバ２のシステム上の時刻を取得させるトリガとなる情報であってもよい。後者の場合、時刻情報受信部２１は、計算サーバ３から時刻情報を受信すると、集約サーバ２自身のシステム上の時刻を取得し、当該時刻を計算サーバ３に対応付けて管理してよい。
【００５３】
図１０は、時刻情報受信部２１が管理する時刻情報管理テーブル２１１のデータ構成例を示す図である。
【００５４】
図１０に示すように、時刻情報管理テーブル２１１は、例示的に、「転送元サーバ」、「サーバ番号」、及び、「時刻」の情報を含んでよい。
【００５５】
「転送元サーバ」には、複数の計算サーバ３間の通信の起点となる「転送元」の計算サーバ３であるか否かを示す情報が設定されてよい。例えば、「転送元」である計算サーバ３には「転送元サーバ」に“１”が設定されてよい。
【００５６】
「サーバ番号」は、計算サーバ３を特定する識別情報の一例である。「サーバ番号」としては、計算サーバ３が担当する処理のプロセス番号、例えば、ＭＰＩ（Message Passing Interface）ランク番号等が用いられてもよい。
【００５７】
「時刻」には、計算サーバ３から受信した時刻情報が設定されてよい。なお、「時刻」は、ＵＮＩＸ（登録商標）時間等のコンピュータで扱われる形式であってもよい。
【００５８】
時刻情報受信部２１は、計算サーバ３から時刻情報を受信すると、当該計算サーバ３の「サーバ番号」に対応する「時刻」に受信した時刻情報を設定してよい。なお、「転送元サーバ」及び「サーバ番号」の情報は、集約サーバ２により、管理端末や後述する変換サーバ４から事前に（少なくとも、通信が開始される前に）取得されてよい。
【００５９】
なお、図１０の例では、便宜上、時刻情報管理テーブル２１１をテーブル形式で示しているが、時刻情報管理テーブル２１１は、配列やデータベース等の所定の形式で、例えば集約サーバ２のメモリ１０ｂ又は記憶部１０ｃが有する記憶領域に格納されてよい。
【００６０】
送信順序決定部２２は、時刻情報受信部２１が集約した各計算サーバ３の処理の進捗を示す情報に基づいて、逐次的な送信における送信順序を決定する決定部の一例である。
【００６１】
例えば、送信順序決定部２２は、時刻情報管理テーブル２１１に基づいて、複数の計算サーバ３間の通信における各計算サーバ３の送受信の順序を決定してよい。
【００６２】
一例として、送信順序決定部２２は、時刻情報を受信した順に、換言すれば、先の時刻を示す時刻情報を送信した計算サーバ３ほど、逐次的な送信において先の順序となるように送信順序を決定してよい。なお、「転送元」の計算サーバ３については、送信順序の先頭が割り当てられてよい。
【００６３】
送信順序決定部２２による送信順序の決定の手法としては、例えば、以下の（ａ）又は（ｂ）の手法が挙げられる。
【００６４】
（ａ）送信順序決定部２２は、規定時間ごとに、当該規定時間内に受信した時刻情報の送信元の計算サーバ３に対する送信順序を決定してよい。また、送信順序決定部２２は、時刻情報の無い計算サーバ３については、次回以降の規定時間において時刻情報を受信したときに、残りの送信順序を割り当ててよい。なお、通信を行なう全ての計算サーバ３から時刻情報を受信するまで、換言すれば、全ての計算サーバ３に送信順序を割り当てるまで、規定時間ごとの決定が繰り返されてよい。
【００６５】
（ｂ）送信順序決定部２２は、規定時間内に受信していない時刻情報の送信元の計算サーバ３の送信順序を、規定時間内に受信した時刻情報の送信元の計算サーバ３よりも後となるように決定してよい。例えば、送信順序決定部２２は、規定時間が経過しても時刻情報の無い計算サーバ３については、残りの送信順序を割り当ててよい。規定時間が経過しても時刻情報の無い計算サーバ３が複数存在する場合は、「サーバ番号」の小さい計算サーバ３から順に、残りの送信順序が割り当てられてよい。
【００６６】
上記（ｂ）の手法では、送信順序は、「転送元」の計算サーバ３、時刻情報の有る計算サーバ３（「時刻」が早い順）、時刻情報の無い計算サーバ３（「サーバ番号」の小さい順）、の順となる。これにより、処理の遅延によって時刻情報を送信できない計算サーバ３に対しても通信における送信順序を決定できるため、当該計算サーバ３が行なう予定の時刻情報の送信を省略させて処理負荷を軽減させることができる。
【００６７】
通知部２３は、送信順序決定部２２が決定した送信順序を、対応する計算サーバ３の各々に通知する。
【００６８】
なお、上記（ｂ）の手法により送信順序が決定された場合、通知部２３は、時刻情報の無い計算サーバ３に対して、決定した送信順序とともに、時刻情報の送信をキャンセルさせる旨を通知してもよい。
【００６９】
複数の計算サーバ３は、自身のメモリ１０ｂ等に展開されたプログラムに従い、アプリケーションの処理が各々に分散して割り当てられた複数の処理装置の一例である。アプリケーションの処理は、演算結果を得るための処理の一例である。
【００７０】
計算サーバ３が実行するプログラムには、ソースコードにおいて、アプリケーションの処理とともに、時刻情報を集約サーバ２に送信する処理、及び、集約サーバ２から送信順序を受信する処理、が記述されてよい。
【００７１】
図８に示すように、計算サーバ３は、例示的に、計算部３１、時刻情報送信部３２、及び、送信順序受信部３３をそなえてよい。
【００７２】
計算部３１は、アプリケーションの処理を実行する。また、計算部３１は、アプリケーションの処理のうちの通信、例えばブロードキャストの処理において、送信順序受信部３３が受信した送信順序に従って、転送対象のデータに対する逐次的な送信を行なう処理部の一例である。
【００７３】
時刻情報送信部３２は、時刻情報を集約サーバ２に送信する送信部の一例である。
【００７４】
時刻情報の送信処理は、ソースコードの段階で、計算部３１による処理と処理との間に挿入されているため、時刻情報送信部３２は、計算部３１による処理が完了してから、次の処理が実行されるまでの間に、時刻情報の送信処理を行なってよい。
【００７５】
なお、時刻情報は、計算部３１によるブロードキャストの通信準備の前に送信されてよい。時刻情報の集約サーバ２への送信タイミングの説明は、後述する変換サーバ４の説明において行なう。
【００７６】
送信順序受信部３３は、集約サーバ２により決定された送信順序を集約サーバ２から受信する受信部の一例である。例えば、送信順序受信部３３は、計算部３１による処理とは非同期に集約サーバ２から送信順序を受信し、例えば変数としてメモリ１０ｂに格納してよい。
【００７７】
図１１は、上述した集約サーバ２及び計算サーバ３の動作例を説明する図である。図１１に示すように、各計算サーバ３（図１１中、「サーバ＃０」〜「サーバ＃３」と表記）は、処理の合間に、集約サーバ２に対して時刻情報を送信する（符号（１）参照）。図１１の例では、サーバ＃０、＃２、及び、＃３が時刻情報を送信している。
【００７８】
集約サーバ２は、計算サーバ３から受信した時刻情報を集計して各計算サーバ３の送受信順序を決定し、決定した送受信順序を通知する（符号（２）参照）。図１１の例では、集約サーバ２は、或る規定時間内にサーバ＃０、＃２、及び、＃３から時刻情報を受信すると、これらの計算サーバ３について、サーバ＃０→＃２→＃３の送信順序を決定し、各計算サーバ３に通知する。その後、通信準備が遅れているサーバ＃１から時刻情報を受信すると、集約サーバ２は、サーバ＃１の送信順序をサーバ＃３の次の送信順序に決定し、サーバ＃１に通知する。
【００７９】
計算サーバ３は、送信順序を受信すると、転送データの送信タイミングにおいて、送信順序に従って転送データの送信を行なう（符号（３）参照）。
【００８０】
以上のように、集約サーバ２が各計算サーバ３の処理の進捗を示す情報を集約し、当該情報に基づいて、各計算サーバ３における逐次的な送信の順序を決定することで、処理が長引いている計算サーバ３への送信を後回しにするといった逐次的な通信を実現できる。
【００８１】
変換サーバ４は、各計算サーバ３に実行させるアプリケーションのソースコードを、計算サーバ３が上述した時刻情報を送信する処理、送信順序を受信する処理、及び、送信順序に従って通信する処理、を行なうように変換する。例えば、変換サーバ４は、ソースコードに対して、これらの処理を実行するためのコードを挿入する。
【００８２】
図１２は、変換サーバ４によるソースコード４１１の変換手順の一例を示す図である。
【００８３】
変換サーバ４は、図１２に例示するように、ソースコード４１１に対して、処理時間を取得できるように修正を行なう（処理Ｐ１）。
【００８４】
そして、変換サーバ４は、修正されたソースコード４１２をコンパイルし、計算サーバ３のプロセッサ１０ａで事前実行し（処理Ｐ２）、計算サーバ３（及び集約サーバ２）による処理結果４１３を取得する。処理結果４１３には、ソースコード４１２に記述された各処理の実行時間、及び、時刻情報送受信時間が含まれてよい。
【００８５】
各処理の実行時間は、例えば、ソースコード４１２中の特定の処理単位ごとの、計算サーバ３における実行時間である。特定の処理単位としては、例えば、関数単位、ループ単位、或いは、基本ブロック（例えば分岐命令セット）単位等が挙げられる。
【００８６】
時刻情報送受信時間は、例えば、集約サーバ２における時刻情報の集約にかかる時間である。一例として、時刻情報送受信時間には、計算サーバ３が時刻情報を送信してから集約サーバ２が受信するまでの時間や、集約サーバ２での時刻情報の計算の実行時間（例えば、集計及び転送順序の決定の実行時間）が含まれてよい。なお、時刻情報送受信時間には、さらに、集約サーバ２が転送順序を送信してから計算サーバ３が受信するまでの時間が含まれてもよい。
【００８７】
次いで、変換サーバ４は、処理結果４１３に基づいて、コードの挿入位置を決定し（処理Ｐ３）、挿入位置情報４１５を取得する。なお、変換サーバ４は、コードの挿入位置の決定に、計算サーバ３（又は集約サーバ２）のＨＷ（Hardware）及びＯＳ情報４１４を用いてもよい。
【００８８】
そして、変換サーバ４は、挿入位置情報４１５に基づいて、ソースコード４１１を変換し（処理Ｐ４）、計算サーバ３に適用されるソースコード４１６を取得する。
【００８９】
なお、図１２に例示するソースコード４１１、４１２及び４１６、処理結果４１３、ＨＷ及びＯＳ情報４１４、並びに、挿入位置情報４１５の少なくとも１つは、例えば変換サーバ４のメモリ１０ｂ又は記憶部１０ｃが有する記憶領域に格納されてよい。
【００９０】
ここで、処理Ｐ４は、例えば、挿入位置情報４１５が示すソースコード４１１内の特定の行の各々に対して、時刻情報の送信処理、送信順序の受信処理、及び、送信順序に従う通信処理を実行するコードをそれぞれ挿入又は書き換えることにより行なわれてよい。
【００９１】
図１３は、ソースコード４１１からソースコード４１６への変換例を示す図である。
【００９２】
変換サーバ４は、図１３に示すように、例えば、元のソースコード４１１の処理Ｂと処理Ｃとの間に、時刻情報を集約サーバ２に送信する処理のコード「time_data_transfer();」を挿入してよい。
【００９３】
また、変換サーバ４は、例えば、元のソースコード４１１の処理Ｃとブロードキャストを行なうコード「broad_cast();」との間に、送信順序を受信する処理のコード「order=receive_transfer_order();」を挿入してよい。
【００９４】
さらに、変換サーバ４は、例えば、元のソースコード４１１のブロードキャストを行なうコード「broad_cast();」を、送信順序に基づきブロードキャストを行なうコード「modified_broad_cast(order);」に書き換えてよい。図１３の例では、受信した送信順序が変数「order」に格納されており、ブロードキャストを行なうコード「broad_cast();」は、変数「order」を、送信順序を定める引数として利用するように「modified_broad_cast(order);」に書き換えられている。
【００９５】
上述した処理を実行するため、図８に示すように、変換サーバ４は、例示的に、情報取得部４１、挿入位置決定部４２、及び、コード変換部４３をそなえてよい。
【００９６】
情報取得部４１は、ソースコード４１１の変換に用いる種々の情報を取得する。例えば、情報取得部４１は、図１２に示すソースコード４１１及び４１２、処理結果４１３、並びに、ＨＷ及びＯＳ情報４１４の取得を行なってよい。このとき、情報取得部４１は、ソースコード４１２及び処理結果４１３を取得するために、図１２に示す処理Ｐ１及びＰ２を行なってよい。
【００９７】
挿入位置決定部４２は、ソースコード４１１に対するコードの挿入位置を決定する。例えば、挿入位置決定部４２は、処理結果４１３に基づいて、図１２に示す処理Ｐ３を実行することで、挿入位置情報４１５を取得してよい。
【００９８】
ここで、挿入位置決定部４２により決定される、コード（例えば時刻情報の送信コード）の挿入位置について説明する。
【００９９】
計算サーバ３は、挿入位置決定部４２により決定された位置に挿入された時刻情報の送信コードに従って、集約サーバ２に対して時刻情報を送信する。
【０１００】
例えば、時刻情報の送信タイミングが早すぎると（挿入位置が前過ぎると）、計算サーバ３は精度の低い情報を送信することになる。また、時刻情報の送信タイミングが遅すぎると（挿入位置が後ろ過ぎると）、計算サーバ３では集約サーバ２からの転送順序の受信待ちが発生してしまう。
【０１０１】
そこで、挿入位置決定部４２は、以下の（Ａ）又は（Ｂ）の手法により、コードの適切な挿入位置を決定することができる。
【０１０２】
（Ａ）挿入位置決定部４２は、ソースコード４１１の一定区間（例えば、特定の処理単位）ごとに時刻情報の送信コードを挿入するように、挿入位置を決定してよい。
【０１０３】
上記（Ａ）の手法の場合、各計算サーバ３の時刻情報送信部３２は、特定の処理を実行する都度、時刻情報を集約サーバ２に送信してよい。
【０１０４】
上記（Ａ）の手法によれば、コードの挿入のために、事前実行が不要（例えば、図１２の処理Ｐ１〜Ｐ３が不要）となる。また、異なる計算システム間で同一のコードを用いることができる。
【０１０５】
（Ｂ）挿入位置決定部４２は、集約サーバ２の送受信時間及び計算時間を事前に取得し、情報の集約にかかる時間を計算（送受信時間＋計算時間＝時刻情報送受信時間）するとともに、アプリケーションの各処理にかかる処理時間を取得してよい。これらの情報は、図１２に示す処理結果４１３に相当する。
【０１０６】
次いで、挿入位置決定部４２は、これらの情報を用いて、ソースコード４１１において、ブロードキャストの開始位置から、処理単位ごとに前の処理に遡り処理の累積の実行時間を取得してよい。そして、挿入位置決定部４２は、累積の実行時間が、時刻情報送受信時間（マージンを加えてもよい）を超えたときの処理の直前の箇所を、挿入位置に決定してよい。
【０１０７】
上記（Ｂ）の手法の場合、各計算サーバ３の時刻情報送信部３２は、逐次的な送信が開始される前の特定の処理であって、集約サーバ２における時刻情報の集約に要する時間に基づき定まる特定の処理の実行前に、時刻情報を集約サーバ２に送信してよい。
【０１０８】
上記（Ｂ）の手法によれば、ブロードキャストの開始前の適切な個所に、例えば１回のコード挿入を行なうだけで済む。従って、計算サーバ３からの時刻情報の送信によるオーバヘッドの増加やネットワーク５の負荷増加、通信による計算サーバ３や集約サーバ２のプロセッサ１０ａの処理時間の増加等を抑制できる。このように、オーバヘッドを小さくできることで、アプリケーションの性能低下を抑制するのに効果的である。
【０１０９】
コード変換部４３は、複数の計算サーバ３の各々に実行させる処理を規定するソースコード４１１における所定の位置に対して、時刻情報を集約サーバ２に送信するコードを付加する付加部の一例である。
【０１１０】
例えば、コード変換部４３は、挿入位置決定部４２により得られた挿入位置情報４１５に基づいて、ソースコード４１１を変換して、ソースコード４１６を取得してよい。一例として、コード変換部４３は、挿入位置情報４１５に基づいて、図１２に示す処理Ｐ４の実行により、図１３に示すような変換を行なうことで、ソースコード４１６を取得してよい。
【０１１１】
なお、コード変換部４３により得られたソースコード４１６は、コンパイルされ、各計算サーバ３にアプリケーションとして配布されることで、複数の計算サーバ３においてアプリケーションの処理が実行可能となる。例えば、コード変換部４３自身がコンパイラとしての機能を有してもよい。
【０１１２】
〔１−３〕動作例
次に、図１４〜図１８を参照して、上述の如く構成されたクラスタシステム１の動作例を説明する。
【０１１３】
〔１−３−１〕変換サーバの動作例
まず、図１４及び図１５を参照して、変換サーバ４によるソースコード４１１の変換処理の第１及び第２の動作例を説明する。
【０１１４】
（第１の動作例）
第１の動作例では、図１４に示すように、変換サーバ４のコード変換部４３は、ソースコードの最初の行を読み込み（ステップＡ１）、読み込んだ行が最終行か否かを判定する（ステップＡ２）。最終行の場合（ステップＡ２でＹｅｓ）、処理が終了する。
【０１１５】
最終行ではない場合（ステップＡ２でＮｏ）、コード変換部４３は、読み込んだ行がブロードキャストの開始位置か否かを判定する（ステップＡ３）。
【０１１６】
ブロードキャストの開始位置の場合（ステップＡ３でＹｅｓ）、コード変換部４３は、ブロードキャストの開始よりも前の位置に送信順序の受信コードを挿入する（ステップＡ４）。また、コード変換部４３は、ブロードキャストのコードを送信順序に従うコードに書き換え（ステップＡ５）、処理がステップＡ８に移行する。
【０１１７】
一方、読み込んだ行がブロードキャストの開始位置ではない場合（ステップＡ３でＮｏ）、コード変換部４３は、読み込んだ行が或る処理単位の開始位置か否かを判定する（ステップＡ６）。
【０１１８】
或る処理単位の開始位置ではない場合（ステップＡ６でＮｏ）、処理がステップＡ８に移行する。一方、或る処理単位の開始位置の場合（ステップＡ６でＹｅｓ）、コード変換部４３は、当該開始位置の直前の行に時刻情報の送信コードを挿入し（ステップＡ７）、ソースコード４１１の次の行を読み込み（ステップＡ８）、処理がステップＡ２に移行する。
【０１１９】
（第２の動作例）
第２の動作例では、図１５に示すように、変換サーバ４の情報取得部４１は、各計算サーバ３の各処理の実行時間、及び、時刻情報送受信時間を取得する（ステップＡ１１）。ステップＡ１１の処理は、例えば、図１２の処理Ｐ１及びＰ２のように、処理時間を取得できるように修正したソースコード４１２をコンパイルし、計算サーバ３のプロセッサ１０ａで事前実行することにより実行されてよい。
【０１２０】
次いで、変換サーバ４の挿入位置決定部４２は、変数ＴｉｍｅＡに“０”を設定する（ステップＡ１２）。
【０１２１】
コード変換部４３は、ソースコードの最初の行を読み込み（ステップＡ１３）、読み込んだ行が最終行か否かを判定する（ステップＡ１４）。最終行の場合（ステップＡ１４でＹｅｓ）、処理が終了する。
【０１２２】
最終行ではない場合（ステップＡ１４でＮｏ）、コード変換部４３は、読み込んだ行がブロードキャストの開始位置か否かを判定する（ステップＡ１５）。
【０１２３】
ブロードキャストの開始位置ではない場合（ステップＡ１５でＮｏ）、処理がステップＡ２５に移行する。
【０１２４】
一方、読み込んだ行がブロードキャストの開始位置の場合（ステップＡ１５でＹｅｓ）、挿入位置決定部４２は、１つ前の処理の実行時間を取得する（ステップＡ１６）。そして、挿入位置決定部４２は、ＴｉｍｅＡに当該１つ前の処理の実行時間を加算し（ステップＡ１７）、ＴｉｍｅＡが時刻情報送受信時間よりも大きいか否かを判定する（ステップＡ１８）。
【０１２５】
ＴｉｍｅＡが時刻情報送受信時間よりも大きくない場合（ステップＡ１８でＮｏ）、挿入位置決定部４２は、当該処理よりも前の位置、例えば１つ前の処理に移動し（ステップＡ１９）、処理がステップＡ１６に移行する。なお、ステップＡ１９を経由したステップＡ１６では、挿入位置決定部４２は、ステップＡ１９での移動先の処理の、１つ前の処理の実行時間を取得する。
【０１２６】
一方、ＴｉｍｅＡが時刻情報送受信時間よりも大きい場合（ステップＡ１８でＹｅｓ）、コード変換部４３は、当該処理よりも前、例えば当該処理の直前の位置に、時刻情報の送信コードを挿入する（ステップＡ２０）。
【０１２７】
次いで、コード変換部４３は、ソースコード４１１の次の行以降のブロードキャストの開始位置に移動し（ステップＡ２１）、ブロードキャストの開始よりも前の位置に送信順序の受信コードを挿入する（ステップＡ２２）。また、コード変換部４３は、ブロードキャストのコードを送信順序に従うコードに書き換える（ステップＡ２３）。
【０１２８】
そして、コード変換部４３は、ブロードキャストの終了位置に移動し（ステップＡ２４）、ソースコード４１１の次の行を読み込み（ステップＡ２５）、処理がステップＡ１４に移行する。
【０１２９】
〔１−３−２〕計算サーバの動作例
次に、図１６を参照して、計算サーバ３による動作例を説明する。なお、クラスタシステム１における各計算サーバ３には、変換サーバ４の上記第１又は第２の動作例において得られたソースコード４１６をコンパイルしたアプリケーションがインストールされているものとする。
【０１３０】
図１６に例示するように、計算サーバ３の計算部３１は、アプリケーションの処理を実行する（ステップＢ１）。ステップＢ１でのアプリケーションの処理は、時刻情報の送信タイミングが到来せず（ステップＢ２、ステップＢ２でＮｏ）、送信順序を受信しない（ステップＢ３、ステップＢ３でＮｏ）間、例えばソースコード４１６に記述された順に実行される。
【０１３１】
なお、アプリケーションの処理が時刻情報の送信タイミングに到達する前に、計算サーバ３の送信順序受信部３３が送信順序を受信する場合がある（ステップＢ３でＹｅｓ）。このような場合としては、計算サーバ３の処理の遅延等により、他の計算サーバ３よりも時刻情報の送信が遅れており、集約サーバ２から「時刻情報の無いサーバ」として送信順序が通知される場合が挙げられる。例えば、上述した送信順序決定部２２の説明における（ｂ）の手法により送信順序が決定される場合である。この場合、計算サーバ３は、時刻情報の送信をスキップでき、処理がステップＢ７に移行してよい。
【０１３２】
時刻情報の送信タイミングになると（ステップＢ２でＹｅｓ）、計算サーバ３の時刻情報送信部３２は、集約サーバ２に時刻情報を送信する（ステップＢ４）。
【０１３３】
時刻情報を送信すると、計算部３１は、アプリケーションの処理を実行する（ステップＢ５）。ステップＢ５でのアプリケーションの処理は、送信順序を受信しない（ステップＢ６、ステップＢ６でＮｏ）間、例えばソースコード４１６に記述された順に実行される。
【０１３４】
送信順序受信部３３が送信順序を受信すると（ステップＢ６でＹｅｓ）、計算部３１は、データ転送タイミングが到来するまでの間（ステップＢ７、ステップＢ７でＮｏ）、アプリケーションの処理を実行する（ステップＢ８）。
【０１３５】
データ転送タイミングが到来すると（ステップＢ７でＹｅｓ）、計算部３１は、送信順序受信部３３が受信した送信順序に従い、自身の計算サーバ３の次の送信順序の計算サーバ３に転送対象のデータを転送し（ステップＢ９）、処理がステップＢ１に移行する。
【０１３６】
なお、図１６に例示する処理は、ステップＢ１、Ｂ５、Ｂ８においてアプリケーションの処理が完了すると、終了する。或いは、図１６に例示する処理は、管理端末等からの指示に応じて終了してもよい。
【０１３７】
〔１−３−３〕集約サーバの動作例
次に、図１７及び図１８を参照して、集約サーバ２による時刻情報の受信処理、並びに、送信順序の決定及び通知処理に係る、第１及び第２の動作例を説明する。
【０１３８】
（第１の動作例）
第１の動作例では、図１７に示すように、集約サーバ２の時刻情報受信部２１は、時刻情報の受信を開始し（ステップＣ１）、タイマをリセットする（ステップＣ２）。
【０１３９】
時刻情報受信部２１は、転送元の計算サーバ３からの時刻情報の受信を待ち受け（ステップＣ３、ステップＣ３でＮｏ）、時刻情報を受信すると（ステップＣ３でＹｅｓ）、タイマによる計時で規定時間の経過を待つ（ステップＣ４、ステップＣ４でＮｏ）。なお、受信した時刻情報は、時刻情報管理テーブル２１１に設定され、管理されてよい。
【０１４０】
規定時間が経過すると（ステップＣ４でＹｅｓ）、集約サーバ２の送信順序決定部２２は、得られた時刻情報の中で、送信時刻の早い計算サーバ３から順に送信順序を決定する（ステップＣ５）。
【０１４１】
通知部２３は、時刻情報の送信元の各計算サーバ３に対して、送信順序決定部２２が決定した送信順序を通知する（ステップＣ６）。
【０１４２】
時刻情報受信部２１は、計算を行なう全計算サーバ３から時刻情報を受信したか否かを判定し（ステップＣ７）、全計算サーバ３から時刻情報を受信していない場合（ステップＣ７でＮｏ）、タイマをリセットし（ステップＣ８）、処理がステップＣ４に移行する。
【０１４３】
一方、全計算サーバ３から時刻情報を受信した場合（ステップＣ７でＹｅｓ）、処理がステップＣ１に移行し、次のブロードキャストの通信準備のために計算サーバ３から送信されてくる時刻情報の受信を開始する。
【０１４４】
（第２の動作例）
第２の動作例において、図１８に示すステップＣ１〜Ｃ４の処理は、第１の動作例と同様である。
【０１４５】
第２の動作例では、図１８に示すように、規定時間が経過すると（ステップＣ４でＹｅｓ）、送信順序決定部２２は、転送元の計算サーバ３、時刻情報の有る計算サーバ３、時刻情報の無い計算サーバ３の順に送信順序を決定する（ステップＣ１１）。
【０１４６】
なお、時刻情報の有る計算サーバ３が複数存在する場合、送信順序決定部２２は、送信時刻の早い計算サーバ３を優先して、早い送信順序を割り当ててよい。また、時刻情報の無い計算サーバ３が複数存在する場合、送信順序決定部２２は、例えば、サーバ番号の小さい計算サーバ３を優先して、早い送信順序を割り当ててよい。
【０１４７】
全計算サーバ３の送信順序を決定すると、通知部２３は、各計算サーバ３に対して、送信順序決定部２２が決定した送信順序を通知する（ステップＣ１２）。そして、処理がステップＣ１に移行し、次のブロードキャストの通信準備のために計算サーバ３から送信されてくる時刻情報の受信を開始する。
【０１４８】
〔２〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【０１４９】
図８に示す集約サーバ２、計算サーバ３、及び、変換サーバ４がそなえるそれぞれの機能ブロックは、サーバ２〜４内で或いはサーバ２〜４間で、種々の組み合わせで併合されてもよく、分割されてもよい。
【０１５０】
例えば、複数の計算サーバ３のうちの一部の計算サーバ３が、集約サーバ２又は／及び変換サーバ４としての機能を有してもよい。
【０１５１】
また、各サーバ２〜４の機能は、マルチプロセッサやマルチコアのプロセッサ１０ａによって実現されてもよい。
【０１５２】
〔３〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１５３】
（付記１）
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置と、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約する集約部と、
前記集約部が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する決定部と、をそなえる
ことを特徴とする、処理システム。
【０１５４】
（付記２）
前記決定部が決定した前記送信順序を前記複数の処理装置の各々に通知する通知部をさらにそなえ、
前記複数の処理装置の各々は、前記通知部から通知された前記送信順序に従って、前記逐次的な送信を行なう、
ことを特徴とする、付記１記載の処理システム。
【０１５５】
（付記３）
前記決定部は、規定時間ごとに、当該規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置に対する前記送信順序を決定する、
ことを特徴とする、付記１又は付記２記載の処理システム。
【０１５６】
（付記４）
前記決定部は、規定時間内に受信していない前記処理の進捗を示す情報の送信元の処理装置の前記送信順序を、前記規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置よりも後となるように決定する、
ことを特徴とする、付記１又は付記２記載の処理システム。
【０１５７】
（付記５）
前記処理の進捗を示す情報は、時刻を示す情報であり、
前記決定部は、先の時刻を示す情報を送信した処理装置ほど、前記逐次的な送信において先の順序となるように前記送信順序を決定する、
ことを特徴とする、付記１〜４のいずれか１項記載の処理システム。
【０１５８】
（付記６）
前記複数の処理装置の各々は、特定の処理を実行する都度、前記時刻を示す情報を前記集約部に送信する、
ことを特徴とする、付記５記載の処理システム。
【０１５９】
（付記７）
前記複数の処理装置の各々は、前記逐次的な送信が開始される前の特定の処理であって、前記集約部における前記情報の集約に要する時間に基づき定まる前記特定の処理の実行前に、前記時刻を示す情報を前記集約部に送信する、
ことを特徴とする、付記５記載の処理システム。
【０１６０】
（付記８）
前記複数の処理装置の各々に実行させる処理を規定するソースコードにおける所定の位置に対して、前記時刻を示す情報を前記集約部に送信するコードを付加する付加部、をさらにそなえ、
前記複数の処理装置の各々は、前記コードが付加された前記ソースコードに基づき、前記処理を行なう、
ことを特徴とする、付記５〜７のいずれか１項記載の処理システム。
【０１６１】
（付記９）
演算結果を得るための処理が各々に分散して割り当てられた複数のコンピュータのうちのいずれかのコンピュータに、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記処理装置の処理の進捗を示す情報を集約装置に送信し、
前記集約装置により前記複数の処理装置の各々の処理の進捗を示す情報に基づき決定された前記逐次的な送信における送信順序を、前記集約装置から受信し、
前記集約装置から受信した前記送信順序に従って、前記逐次的な送信を行なう、
処理を実行させることを特徴とする、処理プログラム。
【０１６２】
（付記１０）
前記処理の進捗を示す情報は、時刻を示す情報であり、
前記送信は、特定の処理を実行する都度、前記時刻を示す情報を前記集約装置に送信する、
ことを特徴とする、付記９記載の処理プログラム。
【０１６３】
（付記１１）
前記処理の進捗を示す情報は、時刻を示す情報であり、
前記送信は、前記逐次的な送信が開始される前の特定の処理であって、前記集約装置における前記情報の集約に要する時間に基づき定まる前記特定の処理の実行前に、前記時刻を示す情報を前記集約装置に送信する、
ことを特徴とする、付記９記載の処理プログラム。
【０１６４】
（付記１２）
コンピュータに、
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置による前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約し、
集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する、
処理を実行させることを特徴とする、集約プログラム。
【０１６５】
（付記１３）
前記コンピュータに、
規定時間ごとに、当該規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置に対する前記送信順序を決定し、
決定した前記送信順序を前記複数の処理装置の各々に通知する、
処理を実行させることを特徴とする、付記１２記載の集約プログラム。
【０１６６】
（付記１４）
前記コンピュータに、
規定時間内に受信していない前記処理の進捗を示す情報の送信元の処理装置の前記送信順序を、前記規定時間内に受信した前記処理の進捗を示す情報の送信元の処理装置よりも後となるように決定し、
決定した前記送信順序を前記複数の処理装置の各々に通知する、
処理を実行させることを特徴とする、付記１２記載の集約プログラム。
【０１６７】
（付記１５）
前記処理の進捗を示す情報は、時刻を示す情報であり、
前記決定は、先の時刻を示す情報を送信した処理装置ほど、前記逐次的な送信において先の順序となるように前記送信順序を決定する、
ことを特徴とする、付記１２〜１４のいずれか１項記載の集約プログラム。
【０１６８】
（付記１６）
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置のうちのいずれかの処理装置であって、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記処理装置の処理の進捗を示す情報を集約装置に送信する送信部と、
前記集約装置により前記複数の処理装置の各々の処理の進捗を示す情報に基づき決定された前記逐次的な送信における送信順序を、前記集約装置から受信する受信部と、
前記集約装置から受信した前記送信順序に従って、前記逐次的な送信を行なう処理部と、をそなえる
ことを特徴とする、処理装置。
【０１６９】
（付記１７）
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置による前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約する集約部と、
前記集約部が集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する決定部と、をそなえる
ことを特徴とする、集約装置。
【０１７０】
（付記１８）
演算結果を得るための処理が各々に分散して割り当てられた複数の処理装置と、集約装置と、をそなえる処理システムにおける処理方法であって、
前記集約装置が、
前記演算結果を得るための処理において、或る処理装置が実行した処理の処理結果を他の各処理装置に送信するための逐次的な送信であって、前記処理結果を前記他の各処理装置を順次経由する経路で送信する前記逐次的な送信を行なう場合に、前記複数の処理装置の各々の処理の進捗を示す情報を前記複数の処理装置の各々から集約し、
集約した前記情報に基づいて、前記逐次的な送信における送信順序を決定する、
ことを特徴とする、処理方法。
【符号の説明】
【０１７１】
１    クラスタシステム
２    集約サーバ
２１    時刻情報受信部
２１１    時刻情報管理テーブル
２２    送信順序決定部
２３    通知部
３    計算サーバ
３１    計算部
３２    時刻情報送信部
３３    送信順序受信部
４    変換サーバ
４１    情報取得部
４１１、４１２、４１６    ソースコード
４１３    処理結果
４１４    ＨＷ及びＯＳ情報
４１５    挿入位置情報
４２    挿入位置決定部
４３    コード変換部
５    ネットワーク
【図１】
2018128923.tif 000003
【図２】
2018128923.tif 000004
【図３】
2018128923.tif 000005
【図４】
2018128923.tif 000006
【図５】
2018128923.tif 000007
【図６】
2018128923.tif 000008
【図７】
2018128923.tif 000009
【図８】
2018128923.tif 000010
【図９】
2018128923.tif 000011
【図１０】
2018128923.tif 000012
【図１１】
2018128923.tif 000013
【図１２】
2018128923.tif 000014
【図１３】
2018128923.tif 000015
【図１４】
2018128923.tif 000016
【図１５】
2018128923.tif 000017
【図１６】
2018128923.tif 000018
【図１７】
2018128923.tif 000019
【図１８】
2018128923.tif 000020