(57)【要約】【課題】コスト負担を要することなくプロセスの配置情報を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報（マスク）をジョブ内で動的に変更することを課題とする。【解決手段】ノード間同期装置３００は、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する計算機ノード１００内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報（マスク）の生成を要求するマスク生成リクエストを受け付ける。そして、ノード間同期装置３００は、同期の待ち合わせ参加する各プロセスから受け付けられた各マスク生成リクエストを用いてプロセス配置情報（マスク）を自動生成する。【選択図】        図１
2010108406.tif 000002
【特許請求の範囲】
【請求項１】
各計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成部を有するノード間同期装置。
【請求項２】
前記マスク生成リクエストは、同期の待ち合わせに参加するプロセス数を含み、
前記情報生成部は、前記マスク生成リクエストに含まれる前記プロセス数に基づいて、同期の待ち合わせに参加する全てのプロセスからマスク生成リクエストを受け付けたか否かを判定する請求項１に記載のノード間同期装置。
【請求項３】
同期の待ち合わせに参加する別個独立のプロセスの集合が複数存在する場合には、各集合を一意に特定するための集合識別子を前記マスク生成リクエストおよび前記同期リクエストにそれぞれ含める請求項１に記載のノード間同期装置。
【請求項４】
所定の演算処理を実行する演算処理ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成部を有するノード間同期装置。
【請求項５】
各計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成ステップを含んだノード間同期方法。
【請求項６】
各計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成手順をコンピュータに実行させるノード間同期プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ノード間同期装置、ノード間同期方法およびノード間同期プログラムに関する。
【背景技術】
【０００２】
従来、複数の計算機を用いて実行される並列プログラムのプロセス間同期を高速化するため、ハードウェアで待ち合わせ処理を行う方式が広く使われてきた（例えば、特許文献１参照）。ハードウェアで待ち合わせ処理を行う方式では、待ち合わせに参加する各プロセスの配置情報を事前に設定しておく必要がある。以下に、図１６を参照しつつ、ハードウェアで待ち合わせ処理を行う従来方式の一例として、ノード内のプロセッサ間で待ち合わせ処理を行う装置について説明する。図１６は、従来技術を説明するための図である。
【０００３】
同図に示すように、ノード内プロセッサ間で待ち合わせを行う装置は、Ａ〜Ｄの４つのプロセッサ５０、マスク情報保持部６０、待ち合わせ状態保持部７０、およびプロセッサ間同期制御部８０で構成される。マスク情報保持部６０は、４つのプロセッサに対応した４ビットのレジスタであり、待ち合わせに参加するプロセッサ５０を特定するための情報を保持する。待ち合わせ状態保持部７０は、４つのプロセッサに対応した４ビットのレジスタであり、同期リクエストを行ったプロセッサ５０を特定するための情報を保持する。プロセッサ間同期制御部８０はプロセッサ５０からの同期リクエストを受けて、待ち合わせ状態保持部７０内の情報を更新する。また、プロセッサ間同期制御部８０は、待ち合わせ状態保持部７０とマスク情報保持部６０と比較することで待ち合わせの完了を検出し、プロセッサ５０に完了を通知する。
【０００４】
続いて、プロセッサＡ上のプロセスとプロセッサＣ上のプロセスが待ち合わせを行う場合の動作を説明する。
【０００５】
（１）マスクの設定、待ち合わせ状態の初期化
プロセッサＡ上のプロセスとプロセッサＣ上のプロセスが待ち合わせに参加することに対応して、マスク情報保持部６０内の情報を「０１０１」に設定し、待ち合わせ状態保持部７０の情報を「００００」に設定する。
【０００６】
（２）プロセッサＡが同期リクエストを発行
プロセッサＡからプロセッサ間同期制御部８０に同期リクエストを発行する。プロセッサ間同期制御部８０は、待ち合わせ状態保持部７０のプロセッサＡに対応するビットに１をセットすることで更新する（「００００」→「０００１」）。そして、プロセッサ間同期制御部８０は、更新後の待ち合わせ状態保持部７０の情報「０００１」とマスク情報保持部６０の情報「０１０１」を比較し、待ち合わせが終わっていないと判定する。
【０００７】
（３）プロセッサ#2が同期リクエストを発行
プロセッサＣからプロセッサ間同期制御部８０に同期リクエストを発行する。プロセッサ間同期制御部８０は、待ち合わせ状態保持部７０のプロセッサＣに対応するビットに1をセットすることで更新する（「０００１」→「０１０１」）。プロセッサ間同期制御部８０は、更新後の待ち合わせ状態保持部７０の情報「０１０１」とマスク情報保持部６０の情報「０１０１」を比較し、待ち合わせが完了したと判定する。
【０００８】
（４）プロセッサに完了を通知
プロセッサ間同期制御部８０から、マスク情報保持部６０に従って、待ち合わせに参加するプロセッサＡとプロセッサＣに待ち合わせの完了を通知する。
【０００９】
上述したように、待ち合わせに参加するプロセスの待ち合わせが完了したか否かの判定は、マスク情報保持部６０の情報と待ち合わせ状態保持部７０の情報との比較によって行われる。このため、待ち合わせの判定を正しく行うには、同期リクエストが発行される前に、待ち合わせに参加するプロセスが、ノード内のどのプロセッサに配置されているかを示すプロセスの配置情報（マスク）をマスク情報保持部６０にあらかじめ設定しておくことが必要である。
【００１０】
【特許文献１】特開２００５−３１６６７９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところで、近年では、並列プログラムを実行するシステムが、数百から数千のノードを備えた大規模なものとなっている。このため、例えば、待ち合わせに参加するプロセスの配置情報を、並列プログラムを実行するノードの一つでプロセス配置情報（マスク）を生成する場合には、ノード間で情報をやり取りするための送受信のコスト負担が非常に大きくなるという問題点がある。
【００１２】
また、ＭＰＩ（Message Passing Interface）等の並列プログラムでは、ジョブ内プロセスの任意の部分集合で待ち合わせを行うことや、待ち合わせを行うプロセスの集合をジョブ内で動的に変更することが許されている。しかしながら、ハードウェアで待ち合わせ処理を行う上記の従来方式では、同期リクエストが発行される前にプロセスの配置情報をマスク情報保持部６０にあらかじめ設定しておく必要があるので、このような待ち合わせへの対応が実質的に困難である。
【００１３】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、低コストでプロセスの配置情報を自動生成するとともに、待ち合わせを行うプロセスの配置情報をジョブ内で動的に変更することが可能なノード間同期装置、ノード間同期方法およびノード間同期プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、開示の装置は、各計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成部を有する。
【発明の効果】
【００１５】
開示の装置によれば、低コストでプロセスの配置情報を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報をジョブ内で動的に変更できる。
【発明を実施するための最良の形態】
【００１６】
以下に、ノード間同期装置、ノード間同期方法およびノード間同期プログラムの一実施形態を説明する。
【実施例１】
【００１７】
実施例１に係るノード間同期装置は、計算機ノード内のプロセッサ間で待ち合わせ処理を行うことを概要とする。そして、実施例１に係るノード間同期装置は、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報（マスク）の生成を要求するマスク生成リクエストを受け付ける。さらに、実施例１に係るノード間同期装置は、同期の待ち合わせ参加する各プロセスから受け付けられた各マスク生成リクエストを用いてプロセス配置情報（マスク）を自動生成する。このようなことから、低コストでプロセスの配置情報（マスク）を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報（マスク）をジョブ内で動的に変更できる。
【００１８】
［ノード間同期装置の構成（実施例１）］
図１は、実施例１に係るシステムの構成を示す図である。図２は、実施例１に係るノード間同期装置の構成を示す図である。
【００１９】
図１に示すように、実施例１に係るノード間同期装置３００は、ノード間ネットワーク２００を介して、各計算機ノード１００（ノード（０）〜（２））と通信可能な状態で接続される。
【００２０】
図２に示すように、ノード間同期装置３００は、受信部３１０と、送信部３２０と、通信コンテキストテーブル３３０と、マスク情報テーブル３４０と、制御部３５０とを有する。受信部３１０は、ノード間ネットワーク２００を介して、各計算機ノード１００から送信されるマスク生成リクエストや同期リクエストを受信する。送信部３２０は、制御部３５０から受けたマスク生成レスポンスや同期レスポンスを各計算機ノード１００に送信する。
【００２１】
通信コンテキストテーブル３３０は、計算機ノード１００との通信に必要な情報を記憶するテーブルである。具体的には、図３に示すように、ｉｎｄｅｘに対応付けて、計算機ノードに一意なノードＩＤ、および計算機ノード内のプロセスに一意なノード内通信ＩＤを予め記憶する。図３は、実施例１に係る通信コンテキストテーブルの構成例を示す図である。
【００２２】
マスク情報テーブル３４０は、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報（マスク）等を記憶する。具体的には、図４に示すように、通信コンテキストテーブル３３０内の各ｉｎｄｅｘと同一の情報ごとに、マスク、待ち合わせ状態およびカウンタを記憶する。初期状態時は、マスク情報テーブル３４０内の情報は全て「０」である。図４は、実施例１に係るマスク情報テーブルの構成例を示す図である。
【００２３】
ここで、マスク情報テーブル３４０内の各情報について説明する。マスクは、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報であり、プロセス配置情報の生成を要求するマスク生成リクエストの受付に応じて更新される（「０」であれば待ち合わせに不参加、「１」であれば参加することを示す）。待ち合わせ状態は、同期の待ち合わせを要求する同期リクエストの受付状況を示す情報であり、同期リクエストの受付に応じて更新される（「０」であれば待ち合わせに未受付、「１」であれば受付済であることを示す）。カウンタは、同期の待ち合わせ参加する全てのプロセスからマスク生成リクエストが受け付けられているか否かの判定に用いる情報であり、マスク生成リクエストを受け付けるごとに１ずつ加算される。
【００２４】
制御部３５０は、所定の制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。
【００２５】
具体的に説明すると、制御部３５０は、同期の待ち合わせ参加するプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる通信ＩＤに対応したｉｎｄｅｘを特定する。そして、制御部３５０は、マスク生成リクエストに含まれる通信ＩＤから特定したｉｎｄｅｘに基づいて、マスク情報テーブル３４０内のマスクの対応箇所およびカウンタを更新する。
【００２６】
以下に、図５を用いて、例えば、計算機ノード１００の内、ノード（０）内のプロセスとノード（１）内のプロセスで待ち合わせを行う場合の制御部３５０の動作について説明する。図５は、実施例１に係るマスク情報テーブル内の情報の遷移を示す図である。制御部３５０は、同期の待ち合わせ参加するノード（０）のプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる「通信ＩＤ＝００」に対応した「ｉｎｄｅｘ００」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（右端）を「０」から「１」に更新する。さらに、制御部３５０は、マスク情報テーブル３４０内のカウンタに「１」を加算する（図５の（２）参照）。
【００２７】
続いて、制御部３５０は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、制御部３５０は、ノード（０）から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「２」を取得し、マスク情報テーブル３４０内のカウンタ値「１」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「２」と、マスク情報テーブル３４０内のカウンタ値「１」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、制御部３５０は、残りのマスク生成リクエストの受付を待機する。
【００２８】
ノード（０）からのマスク生成リクエスト受付後、ノード（２）からのマスク生成リクエストを受け付けると、制御部３５０は、ノード（０）からのマスク生成リクエスト受付時と同様に、マスク情報テーブル３４０内のマスクおよびカウンタを更新する。すなわち、ノード（２）のプロセスから受け付けたマスク生成リクエストに含まれる「通信ＩＤ＝０２」に対応した「ｉｎｄｅｘ０２」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（左から二つ目）を「０」から「１」に更新する。さらに、制御部３５０は、マスク情報テーブル３４０内のカウンタに「１」を加算する（図５の（３）参照）。
【００２９】
続いて、制御部３５０は、ノード（０）からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。すなわち、ノード（２）から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「２」を取得し、マスク情報テーブル３４０内のカウンタ値「２」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「２」と、マスク情報テーブル３４０内のカウンタ値「２」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。
【００３０】
そして、制御部３５０は、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード（０）およびノード（２）に送信する。具体的には、制御部３５０は、ノード（０）およびノード（２）の各プロセスから受け付けたマスク生成リクエストに含まれる通信ＩＤに対応したｉｎｄｅｘに基づいて、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）の各プロセスと通信するためのノードＩＤおよびノード内通信ＩＤを取得する。
【００３１】
マスク生成レスポンスの送信後、制御部３５０は、ノード（０）およびノード（２）からの同期リクエストの受付を待機する。そして、制御部３５０は、ノード（２）のプロセスから同期リクエストを受け付けると、同期リクエストに含まれる「通信ＩＤ＝０２」に対応した「ｉｎｄｅｘ０２」に基づいて、マスク情報テーブル３４０内の待ち合わせ状態の対応箇所（左から二つ目）を「０」から「１」に更新する（図５の（４）参照）。
【００３２】
待ち合わせ状態の更新後、制御部３５０は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かを判定する。具体的には、制御部３５０は、マスク情報テーブル３４０内のマスク「０１０１」と待ち合わせ状態「０１００」とを比較する。比較した結果、マスク「０１０１」と待ち合わせ状態「０１００」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない（プロセス間の待ち合わせが完了していない）ものと判定する。そして、制御部３５０は、残りの同期リクエストの受付を待機する。
【００３３】
ノード（２）からの同期リクエスト受付後、ノード（０）からの同期リクエストを受け付けると、制御部３５０は、ノード（２）からの同期リクエスト受付時と同様に、マスク情報テーブル３４０内の待ち合わせ状態を更新する。すなわち、ノード（０）のプロセスから受け付けたマスク生成リクエストに含まれる「通信ＩＤ＝００」に対応した「ｉｎｄｅｘ００」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（右端）を「０」から「１」に更新する。
【００３４】
待ち合わせ状態の更新後、制御部３５０は、ノード（２）からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かを判定する。具体的には、制御部３５０は、マスク情報テーブル３４０内のマスク「０１０１」と待ち合わせ状態「０１０１」とを比較する。比較した結果、マスク「０１０１」と待ち合わせ状態「０１０１」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する。そして、制御部３５０は、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード（０）およびノード（２）に送信する。
【００３５】
同期レスポンス送信後、制御部３５０は、マスク情報テーブル３４０内の待ち合わせ状態を初期化（全ての値を「０」に）して、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、制御部３５０は、引き続き、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了する（この時、マスク情報テーブル３４０内の情報を全て初期化する）。
【００３６】
［ノード間同期装置の処理（実施例１）］
図６は、実施例１に係るノード間同期装置の処理の流れを示す図である。なお、以下では、計算機ノード１００の内、ノード（０）内のプロセスとノード（２）内のプロセスで待ち合わせを行う場合を例に挙げて説明する。
【００３７】
同図に示すように、ノード間同期装置３００の制御部３５０は、同期の待ち合わせ参加するノード（０）のプロセスからマスク生成リクエストを受け付けると（ステップＳ１肯定）、マスク情報テーブル３４０内のマスクおよびカウンタを更新する（ステップＳ２）。すなわち、マスク生成リクエストに含まれる「通信ＩＤ＝００」に対応した「ｉｎｄｅｘ００」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（右端）を「０」から「１」に更新し、マスク情報テーブル３４０内のカウンタに「１」を加算する。
【００３８】
続いて、制御部３５０は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する（ステップＳ３）。具体的には、制御部３５０は、ノード（０）から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「２」を取得し、マスク情報テーブル３４０内のカウンタ値「１」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「２」と、マスク情報テーブル３４０内のカウンタ値「１」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する（ステップＳ３否定）。そして、制御部３５０は、ステップＳ１に戻って、残りのマスク生成リクエストの受付を待機する。
【００３９】
ノード（０）からのマスク生成リクエスト受付後、ノード（２）からのマスク生成リクエストを受け付けると（ステップＳ１肯定）、制御部３５０は、ノード（０）からのマスク生成リクエスト受付時と同様に、マスク情報テーブル３４０内のマスクおよびカウンタを更新する（ステップＳ２）。すなわち、ノード（２）のプロセスから受け付けたマスク生成リクエストに含まれる「通信ＩＤ＝０２」に対応した「ｉｎｄｅｘ０２」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（左から二つ目）を「０」から「１」に更新し、マスク情報テーブル３４０内のカウンタに「１」を加算する。
【００４０】
続いて、制御部３５０は、ノード（０）からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する（ステップＳ３）。すなわち、ノード（２）から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「２」を取得し、マスク情報テーブル３４０内のカウンタ値「２」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「２」と、マスク情報テーブル３４０内のカウンタ値「２」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する（ステップＳ３肯定）。
【００４１】
そして、制御部３５０は、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード（０）およびノード（２）に送信する（ステップＳ４）。すなわち、制御部３５０は、ノード（０）およびノード（２）の各プロセスから受け付けたマスク生成リクエストに含まれる通信ＩＤに対応したｉｎｄｅｘに基づいて、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）の各プロセスと通信するためのノードＩＤおよびノード内通信ＩＤを取得する。
【００４２】
マスク生成レスポンスの送信後、制御部３５０は、ノード（０）およびノード（２）からの同期リクエストの受付を待機する（ステップＳ５）。そして、制御部３５０は、ノード（２）のプロセスから同期リクエストを受け付けると（ステップＳ５肯定）、同期リクエストに含まれる「通信ＩＤ＝０２」に対応した「ｉｎｄｅｘ０２」に基づいて、マスク情報テーブル３４０内の待ち合わせ状態の対応箇所（左から二つ目）を「０」から「１」に更新する（ステップＳ６）。
【００４３】
待ち合わせ状態の更新後、制御部３５０は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かを判定する（ステップＳ７）。すなわち、制御部３５０は、マスク情報テーブル３４０内のマスク「０１０１」と待ち合わせ状態「０１００」とを比較する。比較した結果、マスク「０１０１」と待ち合わせ状態「０１００」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない（プロセス間の待ち合わせが完了していない）ものと判定する（ステップＳ７否定）。そして、制御部３５０は、ステップＳ５に戻り、残りの同期リクエストの受付を待機する。
【００４４】
ノード（２）からの同期リクエスト受付後、ノード（０）からの同期リクエストを受け付けると、制御部３５０は、ノード（２）からの同期リクエスト受付時と同様に、マスク情報テーブル３４０内の待ち合わせ状態を更新する（ステップＳ６）。すなわち、ノード（０）のプロセスから受け付けたマスク生成リクエストに含まれる「通信ＩＤ＝００」に対応した「ｉｎｄｅｘ００」に基づいて、マスク情報テーブル３４０内のマスクの対応箇所（右端）を「０」から「１」に更新する。
【００４５】
待ち合わせ状態の更新後、制御部３５０は、ノード（２）からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かを判定する（ステップＳ７）。すなわち、制御部３５０は、マスク情報テーブル３４０内のマスク「０１０１」と待ち合わせ状態「０１０１」とを比較する。比較した結果、マスク「０１０１」と待ち合わせ状態「０１０１」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する（ステップＳ７肯定）。そして、制御部３５０は、通信コンテキストテーブル３３０から、ノード（０）およびノード（２）と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード（０）およびノード（２）に送信する（ステップＳ８）。
【００４６】
同期レスポンス送信後、制御部３５０は、マスク情報テーブル３４０内の待ち合わせ状態を初期化（全ての値を「０」に）して（ステップＳ９）、ジョブの終了を待機する（ステップＳ１０）。そして、ジョブが終了していない場合には（ステップＳ１０否定）、制御部３５０は、引き続き、同期リクエストの処理（ステップＳ５〜ステップＳ９）を継続する。一方、ジョブが終了した場合には（ステップＳ１０肯定）、処理を終了する（この時、マスク情報テーブル３４０内の情報を全て初期化する）。
【００４７】
［実施例１による効果］
上述してきたように、実施例１によれば、同期の待ち合わせ参加する各プロセスから、各プロセスの配置状況を示したマスクの生成を要求するマスク生成リクエストを受け付けて自動生成する。このようなことから、ノード間で情報をやり取りするための送受信のコスト負担を大幅に削減しつつマスクを自動生成することができる。さらに、同期の待ち合わせ参加する各プロセスからのリクエストに応じてマスクの生成を行うので、待ち合わせを行うプロセスの配置状況を示すマスクをジョブ内で動的に変更できる。
【００４８】
また、サンプルの最小値、最大値、総和などのグローバル演算を同期して行う演算処理装置に対して、上述してきた実施例１に係るノード間同期装置を適用することもできる。
【実施例２】
【００４９】
図７は、実施例２に係るノード間同期装置の構成を示す図である。同図に示すように、実施例２に係るノード間同期装置３００は、マスク情報テーブル３４０ではなく、マスク情報テーブル３４１を有する点が、上記の実施例１とは異なる。
【００５０】
具体的には、図８に示すように、マスク情報テーブル３４１は、並列ジョブを実行するプロセスの集合を一意に特定するプロセス集合識別子（集合ＩＤ）と、マスク情報テーブル３４１内のｉｎｄｅｘとを対応させ、集合ＩＤごとにマスク、待ち合わせ状態およびカウンタを記憶する。なお、図８は、実施例２に係るマスク情報テーブルの構成例を示す図である。
【００５１】
このようなことから、実施例２によれば、複数の並列ジョブによるプロセス間待ち合わせをパラレルに処理できる。
【実施例３】
【００５２】
図９は、実施例３に係るノード間同期装置の構成を示す図である。実施例３に係るノード間同期装置３００は、以下に説明する点が上記の実施例とは異なる。
【００５３】
すなわち、ノード間同期装置３００は、ポート１に対応したポート内同期ブロック３００−１と、ポート２に対応したポート内同期ブロック３００−２と、ポート間同期ブロック３００−３とを有し、ポート１とポート２との間の待ち合わせを実現する。
【００５４】
ポート内同期ブロック３００−１は、受信部３１０−１と、送信部３２０−１と、通信コンテキストテーブル３３０−１と、マスク情報テーブル３４０−１と、ポート内同期制御部３５０−１とを有し、上記の実施例１で説明したノード間同期装置３００と同様の機能を有する。なお、ポート間の待ち合わせを目的とするため、後述するポート間同期ブロック内でマスク生成リクエストの受付数をカウントする。したがって、マスク情報テーブル３４０−１には、カウンタを用意しない。
【００５５】
ポート内同期ブロック３００−２は、受信部３１０−２と、送信部３２０−２と、通信コンテキストテーブル３３０−２と、マスク情報テーブル３４０−２と、ポート内同期制御部３５０−２とを有し、上記の実施例１で説明したノード間同期装置３００と同様の機能を有する。なお、上記したポート内同期ブロック３００−１と同様の理由から、マスク情報テーブル３４０−２には、カウンタを用意しない。
【００５６】
ポート間同期ブロック３００−３は、マスク情報テーブル３４０−３およびポート間同期制御部３５０−３を有する。マスク情報テーブル３４０−３は、各ポート（ポート１およびポート２）に対応するマスク、待ち合わせ状態およびカウンタを有する。ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３を用いて、ポート間の待ち合わせ処理を実行する。
【００５７】
以下に、図１０および図１１を用いて、例えば、ポート１に接続された計算機ノード１００内の２プロセスと、ポート２に接続された計算機ノード１００内の１プロセスとの間で待ち合わせを行う場合を説明する。図１０および図１１は、実施例３に係るマスク情報テーブル内の情報の遷移を示す図である。
【００５８】
図１０に示される値は、左から順にポート１に対応するポート内同期ブロック３００−１のマスク情報テーブル３４０−１内の値、ポート内同期ブロック３００−２のマスク情報テーブル３４０−２内の値、ポート間同期ブロック３００−３のマスク情報テーブル３４０−３内の値となっている。
【００５９】
初期状態では、ポート１、ポート２およびポート間のマスク、待ち合わせ状態およびカウンタの各値は０となる（図１０の（１）参照）。
【００６０】
ポート内同期ブロック３００−１のポート内同期制御部３５０−１は、同期の待ち合わせに参加する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝０」、「プロセス数＝３」を含んだマスク生成リクエストを受け付けると、上述した実施例１と同様の手順で、マスク情報テーブル３４０−１内のマスクを更新する（図１０の（２）参照）。そして、ポート間同期ブロック３００−３にマスク生成リクエストを転送する。
【００６１】
マスク生成リクエストの転送後、ポート内同期制御部３５０−１は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する。また、ポート内同期制御部３５０−１は、マスク生成レスポンスが受け付けられる前に、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う。
【００６２】
ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３からマスク生成レスポンスを受け付けると、同期レスポンスの受付を待機する。
【００６３】
ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からマスク生成リクエストを受信すると、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からのマスク生成リクエストを受け付けた場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート１に対応する箇所（右）を「０」から「１」に更新する（図１０の（２）参照）。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「１」となる（同図（２）参照）。
【００６４】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「１」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「１」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部３５０−３は、残りのマスク生成リクエストの受付を待機する。
【００６５】
ポート内同期ブロック３００−２のポート内同期制御部３５０−２は、同期の待ち合わせに参加する計算機ノード１００内のプロセスから、ポート２を介して、例えば、「通信ＩＤ＝２」、「プロセス数＝３」を含んだマスク生成リクエストを受信すると、上述した実施例１と同様の手順で、マスク情報テーブル３４０−２内のマスクを更新する（図１０の（３）参照）。そして、ポート間同期ブロック３００−３にマスク生成リクエストを転送する。
【００６６】
ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−２からマスク生成リクエストを受信すると、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２からのマスク生成リクエストを受信した場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート２に対応する箇所（左）を「０」から「１」に更新する（図１０の（３）参照）。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「２」となる（同図（３）参照）。
【００６７】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「２」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「２」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部３５０−３は、残りのマスク生成リクエストの受付を待機する。
【００６８】
ポート内同期ブロック３００−１のポート内同期制御部３５０−１は、同期の待ち合わせに参加する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝３」、「プロセス数＝３」を含んだマスク生成リクエストを受け付けると、上述したのと同様の手順で、マスク情報テーブル３４０−１内のマスクを更新する（図１０の（４）参照）。そして、ポート間同期ブロック３００−３にマスク生成リクエストを転送する。
【００６９】
ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からマスク生成リクエストを受信すると、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からのマスク生成リクエストを受け付けた場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート１に対応する箇所（右）を「０」から「１」に更新するが、既に「１」に更新されている状態なのでそのままとする（図１０の（４）参照）。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「３」となる（同図（４）参照）。
【００７０】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「３」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「３」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。そして、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック３００−１およびポート内同期ブロック３００−２にそれぞれ送信する。
【００７１】
ポート内同期ブロック３００−１は、ポート間同期ブロック３００−３からマスク生成レスポンスを受け付けると、上述した実施例１と同様の手順で、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（０）および（３））と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。同様にして、ポート内同期ブロック３００−２は、ポート間同期ブロック３００−３からマスク生成レスポンスを受け付けると、上述した実施例１と同様の手順で、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（２））と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。
【００７２】
ポート内同期ブロック３００−２のポート内同期制御部３５０−２は、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート２を介して、例えば、「通信ＩＤ＝２」を含んだ同期リクエストを受信すると、上述した実施例１と同様の手順で、マスク情報テーブル３４０−２内の待ち合わせ状態を更新する（図１１の（５）参照）。
【００７３】
そして、ポート内同期制御部３５０−２は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート２の範囲で判定する。具体的には、ポート内同期制御部３５０−２は、上述した実施例１と同様の手順で、マスク情報テーブル３４０−２内のマスク「０１００」と待ち合わせ状態「０１００」とを比較する（図１１の（５）参照）。比較した結果、マスク「０１００」と待ち合わせ状態「０１００」とが互いに一致するので、ポート２の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する。そして、ポート内同期制御部３５０−２は、ポート間同期ブロック３００−３に同期リクエストを転送する。
【００７４】
ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−２から同期リクエストを受信すると、マスク情報テーブル３４０−３内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２からの同期リクエストを受信した場合、マスク情報テーブル３４０−３内の待ち合わせ状態において、ポート２に対応する箇所（左）を「０」から「１」に更新する（図１１の（５）参照）。
【００７５】
待ち合わせ状態の更新後、ポート間同期制御部３５０−３は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部３５０−３は、マスク情報テーブル３４０内のマスク「１１」と待ち合わせ状態「１０」とを比較する（図１１の（５）参照）。比較した結果、マスク「１１」と待ち合わせ状態「１０」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する。そして、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１（ポート１側）から残りの同期リクエストの受付を待機する。
【００７６】
ポート内同期ブロック３００−１のポート内同期制御部３５０−１は、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝３」を含んだ同期リクエストを受信すると、上述した実施例１と同様の手順で、マスク情報テーブル３４０−２内の待ち合わせ状態を更新する（図１１の（６）参照）。
【００７７】
待ち合わせ状態の更新後、ポート内同期制御部３５０−１は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート１の範囲で判定する。具体的には、ポート内同期制御部３５０−１は、上述した実施例１と同様の手順で、マスク情報テーブル３４０−１内のマスク「１００１」と待ち合わせ状態「１０００」とを比較する（図１１の（６）参照）。比較した結果、マスク「１００１」と待ち合わせ状態「１０００」とが互いに一致しないので、ポート１の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない（プロセス間の待ち合わせが完了していない）ものと判定する。そして、ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３に同期リクエストを転送せずに、残りの同期リクエストの受付を待機する。
【００７８】
そして、ポート内同期制御部３５０−１は、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝０」を含んだ同期リクエストを受信すると、上述したのと同様の手順で、マスク情報テーブル３４０−１内の待ち合わせ状態を更新する（図１１の（７）参照）。
【００７９】
待ち合わせ状態の更新後、ポート内同期制御部３５０−１は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート１の範囲で判定する。具体的には、ポート内同期制御部３５０−１は、上述したのと同様の手順で、マスク情報テーブル３４０−１内のマスク「１００１」と待ち合わせ状態「１００１」とを比較する（図１１の（７）参照）。比較した結果、マスク「１００１」と待ち合わせ状態「１００１」とが互いに一致するので、ポート１の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する。そして、ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３に同期リクエストを転送する。
【００８０】
ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−１から同期リクエストを受信すると、マスク情報テーブル３４０−３内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からの同期リクエストを受信した場合、マスク情報テーブル３４０−３内の待ち合わせ状態において、ポート１に対応する箇所（右）を「０」から「１」に更新する（図１１の（７）参照）。
【００８１】
待ち合わせ状態の更新後、ポート間同期制御部３５０−３は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部３５０−３は、マスク情報テーブル３４０内のマスク「１１」と待ち合わせ状態「１１」とを比較する（図１１の（７）参照）。比較した結果、マスク「１１」と待ち合わせ状態「１１」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する。そして、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック３００−１およびポート内同期ブロック３００−２にそれぞれ送信する。
【００８２】
同期レスポンス送信後、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内の待ち合わせ状態を初期化（全ての値を「０」）して（図１１の（８）参照）、ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知を待機する。そして、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知が受け付けられていない場合には、同期リクエストのポート間の待ち合わせ処理を継続する。ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知を受け付けると、処理を終了し、マスク情報テーブル３４０−３内のマスクを初期化する。
【００８３】
ポート内同期ブロック３００−１は、ポート間同期ブロック３００−３から同期レスポンスを受け付けると、上述した実施例１と同様の手順で、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（０）および（３））と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
【００８４】
そして、ポート内同期ブロック３００−１は、マスク情報テーブル３４０−１の待ち合わせ状態を初期化（全ての値を「０」）し（図１１の（８）参照）、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック３００−１は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し（この時、マスク情報テーブル３４０−１内の情報を全て初期化する）し、ジョブの終了をポート間同期ブロック３００−３に送信する。
【００８５】
ポート内同期ブロック３００−１と同様に、ポート内同期ブロック３００−２は、ポート間同期ブロック３００−３から同期レスポンスを受け付けると、上述した実施例１と同様の手順で、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（２））と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
【００８６】
そして、ポート内同期ブロック３００−２は、マスク情報テーブル３４０−２の待ち合わせ状態を初期化（全ての値を「０」）し（図１１の（８）参照）、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック３００−２は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し（この時、マスク情報テーブル３４０−２内の情報を全て初期化する）し、ジョブの終了をポート間同期ブロック３００−３に送信する。
【００８７】
［ノード間同期装置の処理（実施例３）］
図１２および図１３は、実施例３に係るポート内同期制御部の処理の流れを示す図である。図１４は、実施例３に係るポート間同期制御部の処理の流れを示す図である。なお、以下では、ポート１およびポート２の２ポート間待ち合わせを行う場合を例に挙げて説明する。
【００８８】
［ポート内同期制御部による処理］
図１２に示すように、例えば、ポート内同期制御部３５０−１は、同期の待ち合わせに参加する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝０」、「プロセス数＝３」を含んだマスク生成リクエストを受け付けると（ステップＳ１肯定）、マスク情報テーブル３４０−１内のマスクを更新する（ステップＳ２）。そして、ポート間同期ブロック３００−３にマスク生成リクエストを転送する（ステップＳ３）。
【００８９】
マスク生成リクエストの転送後、ポート内同期制御部３５０−１は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する（ステップＳ４）。また、ポート内同期制御部３５０−１は、マスク生成レスポンスが受け付けられていない状態で（ステップＳ４否定）、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う（ステップＳ１〜ステップＳ３）。
【００９０】
ポート内同期ブロック３００−１は、ポート間同期ブロック３００−３からマスク生成レスポンスを受け付けると（ステップＳ４肯定）、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（０）および（３））と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する（ステップＳ５）。
【００９１】
そして、図１３に示すように、マスク生成レスポンスの転送後、ポート内同期制御部３５０−１は、同期リクエストの受信を待機し（ステップＳ６）、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝３」を含んだ同期リクエストを受信すると（ステップＳ６肯定）、マスク情報テーブル３４０−２内の待ち合わせ状態を更新する（ステップＳ７）。
【００９２】
待ち合わせ状態の更新後、ポート内同期制御部３５０−１は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート１の範囲で判定する（ステップＳ８）。例えば、ポート内同期制御部３５０−１は、マスク情報テーブル３４０−１内のマスク「１００１」と待ち合わせ状態「１０００」とを比較する。比較した結果、マスク「１００１」と待ち合わせ状態「１０００」とが互いに一致しないので、ポート１の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない（プロセス間の待ち合わせが完了していない）ものと判定する（ステップＳ８否定）。そして、ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３に同期リクエストを転送せずに、上述したステップＳ６に戻り、残りの同期リクエストの受付を待機する。
【００９３】
そして、ポート内同期制御部３５０−１は、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート１を介して、例えば、「通信ＩＤ＝０」を含んだ同期リクエストを受信すると（ステップＳ６肯定）、上述したのと同様の手順で、マスク情報テーブル３４０−１内の待ち合わせ状態を更新する（ステップＳ７）。
【００９４】
待ち合わせ状態の更新後、ポート内同期制御部３５０−１は、上述したのと同様の手順で、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート１の範囲で判定する（ステップＳ８）。ポート内同期制御部３５０−１は、例えば、マスク情報テーブル３４０−１内のマスク「１００１」と待ち合わせ状態「１００１」とを比較する。比較した結果、マスク「１００１」と待ち合わせ状態「１００１」とが互いに一致するので、ポート１の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する（ステップＳ８肯定）。そして、ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３に同期リクエストを転送する（ステップＳ９）。
【００９５】
同期リクエスト転送後、ポート内同期ブロック３００−１は、同期レスポンスの受信を待機し（ステップＳ１０）、ポート間同期ブロック３００−３から同期レスポンスを受信すると（ステップＳ１０肯定）、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（０）および（３））と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する（ステップＳ１１）。
【００９６】
そして、ポート内同期ブロック３００−１は、マスク情報テーブル３４０−１の待ち合わせ状態を初期化（全ての値を「０」）し（ステップＳ１２）、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する（ステップＳ１３）。そして、ジョブが終了していない場合には（ステップＳ１３否定）、ポート内同期ブロック３００−１は、上述したステップＳ６に戻って、同期リクエストの処理（ステップＳ６〜ステップＳ１２）を継続する。一方、ジョブが終了した場合には（ステップＳ１３肯定）、処理を終了し（この時、マスク情報テーブル３４０−１内の情報を全て初期化する）、ジョブの終了をポート間同期ブロック３００−３に送信する。
【００９７】
ポート内同期制御部３５０−１と同様に、ポート内同期制御部３５０−２は、図１２に示すように、同期の待ち合わせに参加する計算機ノード１００内のプロセスから、ポート２を介して、例えば、「通信ＩＤ＝２」、「プロセス数＝３」を含んだマスク生成リクエストを受信すると（ステップＳ１肯定）、マスク情報テーブル３４０−２内のマスクを更新する（ステップＳ２）。そして、ポート間同期ブロック３００−３にマスク生成リクエストを転送する（ステップＳ３）。
【００９８】
マスク生成リクエストの転送後、ポート内同期制御部３５０−２は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する（ステップＳ４）。また、ポート内同期制御部３５０−２は、マスク生成レスポンスが受け付けられていない状態で（ステップＳ４否定）、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う（ステップＳ１〜ステップＳ３）。
【００９９】
ポート内同期ブロック３００−２は、ポート間同期ブロック３００−３からマスク生成レスポンスを受け付けると（ステップＳ４肯定）、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（２））と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する（ステップＳ５）。
【０１００】
そして、図１３に示すように、マスク生成レスポンスの転送後、ポート内同期制御部３５０−２は、同期リクエストの受信を待機し（ステップＳ６）、同期の待ち合わせを要求する計算機ノード１００内のプロセスから、ポート２を介して、例えば、「通信ＩＤ＝２」を含んだ同期リクエストを受信すると（ステップＳ６肯定）、マスク情報テーブル３４０−２内の待ち合わせ状態を更新する（ステップＳ７）。
【０１０１】
待ち合わせ状態の更新後、ポート内同期制御部３５０−２は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか（プロセス間の待ち合わせが完了しているか）否かをポート２の範囲で判定する（ステップＳ８）。例えば、ポート内同期制御部３５０−２は、マスク情報テーブル３４０−２内のマスク「０１００」と待ち合わせ状態「０１００」とを比較する。比較した結果、マスク「０１００」と待ち合わせ状態「０１００」とが互いに一致するので、ポート２の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている（プロセス間の待ち合わせが完了している）ものと判定する（ステップＳ８肯定）。そして、ポート内同期制御部３５０−１は、ポート間同期ブロック３００−３に同期リクエストを転送する（ステップＳ９）。
【０１０２】
一方、ポート内同期制御部３５０−２は、マスクと待ち合わせ状態とが互いに一致しない場合には、ポート２の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない（プロセス間の待ち合わせが完了していない）ものと判定する（ステップＳ８否定）。そして、ポート間同期ブロック３００−３に同期リクエストを転送せずに、上述したステップＳ６に戻り、残りの同期リクエストの受付を待機する。
【０１０３】
同期リクエスト転送後、ポート内同期ブロック３００−２は、同期レスポンスの受信を待機し（ステップＳ１０）、ポート間同期ブロック３００−３から同期レスポンスを受信すると（ステップＳ１０肯定）、通信コンテキストテーブル３３０から、マスク生成リクエストの送信元である計算機ノード１００（例えば、ノード（２））と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する（ステップＳ１１）。
【０１０４】
そして、ポート内同期ブロック３００−２は、マスク情報テーブル３４０−２の待ち合わせ状態を初期化（全ての値を「０」）し（ステップＳ１２）、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する（ステップＳ１３）。そして、ジョブが終了していない場合には（ステップＳ１３否定）、ポート内同期ブロック３００−２は、上述したステップＳ６に戻って、同期リクエストの処理（ステップＳ６〜ステップＳ１２）を継続する。一方、ジョブが終了した場合には（ステップＳ１３肯定）、処理を終了し（この時、マスク情報テーブル３４０−２内の情報を全て初期化する）し、ジョブの終了をポート間同期ブロック３００−３に送信する。
【０１０５】
［ポート間同期制御部の処理］
図１４に示すように、ポート間同期ブロック３００−３のポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からマスク生成リクエストを受信すると（ステップＳ１）、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する（ステップＳ２）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からのマスク生成リクエストを受け付けた場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート１に対応する箇所（右）を「０」から「１」に更新する。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「１」となる。
【０１０６】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する（ステップＳ３）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「１」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「１」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する（ステップＳ３否定）。そして、ポート間同期制御部３５０−３は、上述したステップＳ１に戻って、残りのマスク生成リクエストの受付を待機する。
【０１０７】
ポート間同期制御部３５０−３は、次に、ポート内同期ブロック３００−２からマスク生成リクエストを受信すると（ステップＳ１肯定）、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する（ステップＳ２）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２からのマスク生成リクエストを受信した場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート２に対応する箇所（左）を「０」から「１」に更新する。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「２」となる。
【０１０８】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する（ステップＳ３）。具体的には、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「２」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「２」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する（ステップＳ３否定）。そして、ポート間同期制御部３５０−３は、上述したステップＳ１に戻って、残りのマスク生成リクエストの受付を待機する。
【０１０９】
ポート間同期制御部３５０−３は、次に、ポート内同期ブロック３００−１からマスク生成リクエストを受信すると（ステップＳ１肯定）、マスク情報テーブル３４０−３内のマスクおよびカウンタを更新する（ステップＳ２）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からのマスク生成リクエストを受け付けた場合、マスク情報テーブル３４０−３内のマスクにおいて、ポート１に対応する箇所（右）を「０」から「１」に更新するが、既に「１」に更新されている状態なのでそのままとする。さらに、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のカウンタに「１」を加算する。この時点で、カウンタ値は「３」となる。
【０１１０】
続いて、ポート間同期制御部３５０−３は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する（ステップＳ３）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「３」を取得し、マスク情報テーブル３４０−３内のカウンタ値「３」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「３」と、マスク情報テーブル３４０内のカウンタ値「３」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する（ステップＳ３肯定）。そして、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック３００−１およびポート内同期ブロック３００−２にそれぞれ送信する（ステップＳ４）。
【０１１１】
マスク生成レスポンスの送信後、ポート間同期制御部３５０−３は、同期リクエストの受信を待機し（ステップＳ５）、ポート内同期ブロック３００−２から同期リクエストを受信すると（ステップＳ５肯定）、マスク情報テーブル３４０−３内の待ち合わせ状態を更新する（ステップＳ６）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−２からの同期リクエストを受信した場合、マスク情報テーブル３４０−３内の待ち合わせ状態において、ポート２に対応する箇所（左）を「０」から「１」に更新する。
【０１１２】
待ち合わせ状態の更新後、ポート間同期制御部３５０−３は、ポート間の待ち合わせが完了しているか否かを判定する（ステップＳ７）。例えば、ポート間同期制御部３５０−３は、マスク情報テーブル３４０内のマスク「１１」と待ち合わせ状態「１０」とを比較する。比較した結果、マスク「１１」と待ち合わせ状態「１０」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する（ステップＳ７否定）。そして、ポート間同期制御部３５０−３は、上述したステップＳ５に戻って、ポート内同期ブロック３００−１（ポート１側）から残りの同期リクエストの受付を待機する。
【０１１３】
ポート間同期制御部３５０−３は、次に、ポート内同期ブロック３００−１から同期リクエストを受信すると（ステップＳ５肯定）、マスク情報テーブル３４０−３内の待ち合わせ状態を更新する（ステップＳ６）。例えば、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１からの同期リクエストを受信した場合、マスク情報テーブル３４０−３内の待ち合わせ状態において、ポート１に対応する箇所（右）を「０」から「１」に更新する。
【０１１４】
待ち合わせ状態の更新後、ポート間同期制御部３５０−３は、ポート間の待ち合わせが完了しているか否かを判定する（ステップＳ７）。例えば、ポート間同期制御部３５０−３は、マスク情報テーブル３４０内のマスク「１１」と待ち合わせ状態「１１」とを比較する。比較した結果、マスク「１１」と待ち合わせ状態「１１」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する（ステップＳ７肯定）。そして、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック３００−１およびポート内同期ブロック３００−２にそれぞれ送信する（ステップＳ８）。
【０１１５】
同期レスポンス送信後、ポート間同期制御部３５０−３は、マスク情報テーブル３４０−３内の待ち合わせ状態を初期化（全ての値を「０」）して（ステップＳ９）、ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知を待機する（ステップＳ１０）。そして、ポート間同期制御部３５０−３は、ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知が受け付けられていない場合には（ステップＳ１０否定）、上述したステップＳ５に戻って、同期リクエストのポート間の待ち合わせ処理（ステップＳ５〜ステップＳ９）を継続する。ポート内同期ブロック３００−１およびポート内同期ブロック３００−２からジョブの終了通知を受け付けると（ステップＳ１０肯定）、処理を終了し、マスク情報テーブル３４０−３内のマスクを初期化する。
【０１１６】
上述してきたように、実施例３によれば、ポート間の待ち合わせについても、上記の実施例１の内容を同様に適用できる。
【０１１７】
なお、上述してきた実施例３では、２ポート間の待ち合わせを行う場合について説明したが、同様の考え方により、ポート間同期制御部３５０−３の階層を追加することで、ポート数を拡張した場合にも同様に処理できる。
【実施例４】
【０１１８】
以下に、ノード間同期装置、ノード間同期方法およびノード間同期プログラムの他の実施形態について説明する。
【０１１９】
（１）装置構成等
例えば、図２に示したノード間同期装置３００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ノード間同期装置３００の分散・統合の具体的形態は図示のものに限られず、例えば、通信コンテキストテーブル３３０とマスク情報テーブル３４０とを統合する。このようにして、ノード間同期装置３００の全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、ノード間同期装置３００にて行なわれる各処理機能（図６、図１２〜図１４等参照）は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１２０】
（２）ノード間同期プログラム
また、上記の実施例で説明したノード間同期装置３００の各種の処理（図６、図１２〜図１４等参照）は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、図１５を用いて、上記の実施例と同様の機能を有するノード間同期プログラムを実行するコンピュータの一例を説明する。図１５は、ノード間同期プログラムを実行するコンピュータを示す図である。
【０１２１】
ここで、通信制御部５１０は、他の装置との間でやり取りされる各種情報の関する通信を制御する。ＨＤＤ５２０は、ＣＰＵ５４０による各種処理の実行に必要な情報を記憶する。ＲＡＭ５３０は、各種情報を一時的に記憶する。ＣＰＵ５４０は、各種演算処理を実行する。
【０１２２】
そして、ＨＤＤ５２０には、図１５に示すように、上記の実施例に示したノード間同期装置３００の各処理部と同様の機能を発揮するノード間同期プログラム５２１と、ノード間同期用データ５２２とがあらかじめ記憶されている。なお、このノード間同期プログラム５２１を適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
【０１２３】
そして、ＣＰＵ５４０が、このノード間同期プログラム５２１をＨＤＤ５２０から読み出してＲＡＭ５３０に展開することにより、図１５に示すように、ノード間同期プログラム５２１は、ノード間同期プロセス５３１として機能するようになる。すなわち、ノード間同期プロセス５３１は、ノード間同期用データ５２２等をＨＤＤ５２０から読み出して、ＲＡＭ５３０において自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種処理を実行する。なお、ノード間同期プロセス５３１は、図２に示したノード間同期装置３００の制御部３５０等において実行される処理に対応する。
【０１２４】
なお、上記したノード間同期プログラム５２１については、必ずしも最初からＨＤＤ５２０に記憶させておく必要はない。例えば、コンピュータ５００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ５００に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ５００がこれらから各プログラムを読み出して実行するようにしてもよい。
【０１２５】
（３）ノード間同期方法
上記の実施例で説明したノード間同期装置３００により、以下のようなノード間同期方法が実現される。
【０１２６】
すなわち、各計算機ノード内のプロセスの各々から、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを同期の待ち合わせ参加する各プロセスから受け付け、当該受け付けられた各マスク生成リクエストを用いてプロセス配置情報を自動生成する情報生成ステップ（図６のステップＳ１〜ステップＳ３参照）を含んだノード間同期方法が実現される。
【図面の簡単な説明】
【０１２７】
【図１】実施例１に係るシステムの構成を示す図である。
【図２】実施例１に係るノード間同期装置の構成を示す図である。
【図３】実施例１に係る通信コンテキストテーブルの構成例を示す図である。
【図４】実施例１に係るマスク情報テーブルの構成例を示す図である。
【図５】実施例１に係るマスク情報テーブル内の情報の遷移を示す図である。
【図６】実施例１に係るノード間同期装置の処理の流れを示す図である。
【図７】実施例２に係るノード間同期装置の構成を示す図である。
【図８】実施例２に係るマスク情報テーブルの構成例を示す図である。
【図９】実施例３に係るノード間同期装置の構成を示す図である。
【図１０】実施例３に係るマスク情報テーブル内の情報の遷移を示す図である。
【図１１】実施例３に係るマスク情報テーブル内の情報の遷移を示す図である。
【図１２】実施例３に係るポート内同期制御部の処理の流れを示す図である。
【図１３】実施例３に係るポート内同期制御部の処理の流れを示す図である。
【図１４】実施例３に係るポート間同期制御部の処理の流れを示す図である。
【図１５】ノード間同期プログラムを実行するコンピュータを示す図である。
【図１６】従来技術を説明するための図である。
【符号の説明】
【０１２８】
１００  計算機ノード
２００  ノード間ネットワーク
３００  ノード間同期装置
３００−１，３００−２  ポート内同期ブロック
３００−３  ポート間同期ブロック
３１０−１，３１０−２  受信部
３２０−１，３２０−２  送信部
３３０―１，３３０−２  通信コンテキストテーブル
３４０−１，３４０−２，３４０−３  マスク情報テーブル
３４１  マスク情報テーブル
３５０−１，３５０−２  ポート内同期制御部
３５０−３  ポート間同期制御部
５００  コンピュータ
５１０  通信制御部
５２０  ＨＤＤ
５２１  ノード間同期プログラム
５２２  ノード間同期用データ
５３０  ＲＡＭ
５３１  ノード間同期プロセス
５４０  ＣＰＵ
６００  バス
【図１】
2010108406.tif 000003
【図２】
2010108406.tif 000004
【図３】
2010108406.tif 000005
【図４】
2010108406.tif 000006
【図５】
2010108406.tif 000007
【図６】
2010108406.tif 000008
【図７】
2010108406.tif 000009
【図８】
2010108406.tif 000010
【図９】
2010108406.tif 000011
【図１０】
2010108406.tif 000012
【図１１】
2010108406.tif 000013
【図１２】
2010108406.tif 000014
【図１３】
2010108406.tif 000015
【図１４】
2010108406.tif 000016
【図１５】
2010108406.tif 000017
【図１６】
2010108406.tif 000018