実施例1に係るノード間同期装置は、計算機ノード内のプロセッサ間で待ち合わせ処理を行うことを概要とする。そして、実施例1に係るノード間同期装置は、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報(マスク)の生成を要求するマスク生成リクエストを受け付ける。さらに、実施例1に係るノード間同期装置は、同期の待ち合わせ参加する各プロセスから受け付けられた各マスク生成リクエストを用いてプロセス配置情報(マスク)を自動生成する。このようなことから、低コストでプロセスの配置情報(マスク)を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報(マスク)をジョブ内で動的に変更できる。
[ノード間同期装置の構成(実施例1)]
図1は、実施例1に係るシステムの構成を示す図である。図2は、実施例1に係るノード間同期装置の構成を示す図である。
図1に示すように、実施例1に係るノード間同期装置300は、ノード間ネットワーク200を介して、各計算機ノード100(ノード(0)〜(2))と通信可能な状態で接続される。
図2に示すように、ノード間同期装置300は、受信部310と、送信部320と、通信コンテキストテーブル330と、マスク情報テーブル340と、制御部350とを有する。受信部310は、ノード間ネットワーク200を介して、各計算機ノード100から送信されるマスク生成リクエストや同期リクエストを受信する。送信部320は、制御部350から受けたマスク生成レスポンスや同期レスポンスを各計算機ノード100に送信する。
通信コンテキストテーブル330は、計算機ノード100との通信に必要な情報を記憶するテーブルである。具体的には、図3に示すように、indexに対応付けて、計算機ノードに一意なノードID、および計算機ノード内のプロセスに一意なノード内通信IDを予め記憶する。図3は、実施例1に係る通信コンテキストテーブルの構成例を示す図である。
マスク情報テーブル340は、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報(マスク)等を記憶する。具体的には、図4に示すように、通信コンテキストテーブル330内の各indexと同一の情報ごとに、マスク、待ち合わせ状態およびカウンタを記憶する。初期状態時は、マスク情報テーブル340内の情報は全て「0」である。図4は、実施例1に係るマスク情報テーブルの構成例を示す図である。
ここで、マスク情報テーブル340内の各情報について説明する。マスクは、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報であり、プロセス配置情報の生成を要求するマスク生成リクエストの受付に応じて更新される(「0」であれば待ち合わせに不参加、「1」であれば参加することを示す)。待ち合わせ状態は、同期の待ち合わせを要求する同期リクエストの受付状況を示す情報であり、同期リクエストの受付に応じて更新される(「0」であれば待ち合わせに未受付、「1」であれば受付済であることを示す)。カウンタは、同期の待ち合わせ参加する全てのプロセスからマスク生成リクエストが受け付けられているか否かの判定に用いる情報であり、マスク生成リクエストを受け付けるごとに1ずつ加算される。
制御部350は、所定の制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。
具体的に説明すると、制御部350は、同期の待ち合わせ参加するプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる通信IDに対応したindexを特定する。そして、制御部350は、マスク生成リクエストに含まれる通信IDから特定したindexに基づいて、マスク情報テーブル340内のマスクの対応箇所およびカウンタを更新する。
以下に、図5を用いて、例えば、計算機ノード100の内、ノード(0)内のプロセスとノード(1)内のプロセスで待ち合わせを行う場合の制御部350の動作について説明する。図5は、実施例1に係るマスク情報テーブル内の情報の遷移を示す図である。制御部350は、同期の待ち合わせ参加するノード(0)のプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。さらに、制御部350は、マスク情報テーブル340内のカウンタに「1」を加算する(図5の(2)参照)。
続いて、制御部350は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、制御部350は、ノード(0)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、制御部350は、残りのマスク生成リクエストの受付を待機する。
ノード(0)からのマスク生成リクエスト受付後、ノード(2)からのマスク生成リクエストを受け付けると、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、マスク情報テーブル340内のマスクおよびカウンタを更新する。すなわち、ノード(2)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内のマスクの対応箇所(左から二つ目)を「0」から「1」に更新する。さらに、制御部350は、マスク情報テーブル340内のカウンタに「1」を加算する(図5の(3)参照)。
続いて、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。すなわち、ノード(2)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「2」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。
そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード(0)およびノード(2)に送信する。具体的には、制御部350は、ノード(0)およびノード(2)の各プロセスから受け付けたマスク生成リクエストに含まれる通信IDに対応したindexに基づいて、通信コンテキストテーブル330から、ノード(0)およびノード(2)の各プロセスと通信するためのノードIDおよびノード内通信IDを取得する。
マスク生成レスポンスの送信後、制御部350は、ノード(0)およびノード(2)からの同期リクエストの受付を待機する。そして、制御部350は、ノード(2)のプロセスから同期リクエストを受け付けると、同期リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内の待ち合わせ状態の対応箇所(左から二つ目)を「0」から「1」に更新する(図5の(4)参照)。
待ち合わせ状態の更新後、制御部350は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する。具体的には、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0100」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する。そして、制御部350は、残りの同期リクエストの受付を待機する。
ノード(2)からの同期リクエスト受付後、ノード(0)からの同期リクエストを受け付けると、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、マスク情報テーブル340内の待ち合わせ状態を更新する。すなわち、ノード(0)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。
待ち合わせ状態の更新後、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する。具体的には、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0101」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0101」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード(0)およびノード(2)に送信する。
同期レスポンス送信後、制御部350は、マスク情報テーブル340内の待ち合わせ状態を初期化(全ての値を「0」に)して、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、制御部350は、引き続き、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了する(この時、マスク情報テーブル340内の情報を全て初期化する)。
[ノード間同期装置の処理(実施例1)]
図6は、実施例1に係るノード間同期装置の処理の流れを示す図である。なお、以下では、計算機ノード100の内、ノード(0)内のプロセスとノード(2)内のプロセスで待ち合わせを行う場合を例に挙げて説明する。
同図に示すように、ノード間同期装置300の制御部350は、同期の待ち合わせ参加するノード(0)のプロセスからマスク生成リクエストを受け付けると(ステップS1肯定)、マスク情報テーブル340内のマスクおよびカウンタを更新する(ステップS2)。すなわち、マスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新し、マスク情報テーブル340内のカウンタに「1」を加算する。
続いて、制御部350は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。具体的には、制御部350は、ノード(0)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、制御部350は、ステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ノード(0)からのマスク生成リクエスト受付後、ノード(2)からのマスク生成リクエストを受け付けると(ステップS1肯定)、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、マスク情報テーブル340内のマスクおよびカウンタを更新する(ステップS2)。すなわち、ノード(2)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内のマスクの対応箇所(左から二つ目)を「0」から「1」に更新し、マスク情報テーブル340内のカウンタに「1」を加算する。
続いて、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。すなわち、ノード(2)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「2」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する(ステップS3肯定)。
そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード(0)およびノード(2)に送信する(ステップS4)。すなわち、制御部350は、ノード(0)およびノード(2)の各プロセスから受け付けたマスク生成リクエストに含まれる通信IDに対応したindexに基づいて、通信コンテキストテーブル330から、ノード(0)およびノード(2)の各プロセスと通信するためのノードIDおよびノード内通信IDを取得する。
マスク生成レスポンスの送信後、制御部350は、ノード(0)およびノード(2)からの同期リクエストの受付を待機する(ステップS5)。そして、制御部350は、ノード(2)のプロセスから同期リクエストを受け付けると(ステップS5肯定)、同期リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内の待ち合わせ状態の対応箇所(左から二つ目)を「0」から「1」に更新する(ステップS6)。
待ち合わせ状態の更新後、制御部350は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する(ステップS7)。すなわち、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0100」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS7否定)。そして、制御部350は、ステップS5に戻り、残りの同期リクエストの受付を待機する。
ノード(2)からの同期リクエスト受付後、ノード(0)からの同期リクエストを受け付けると、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、マスク情報テーブル340内の待ち合わせ状態を更新する(ステップS6)。すなわち、ノード(0)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。
待ち合わせ状態の更新後、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する(ステップS7)。すなわち、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0101」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0101」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS7肯定)。そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード(0)およびノード(2)に送信する(ステップS8)。
同期レスポンス送信後、制御部350は、マスク情報テーブル340内の待ち合わせ状態を初期化(全ての値を「0」に)して(ステップS9)、ジョブの終了を待機する(ステップS10)。そして、ジョブが終了していない場合には(ステップS10否定)、制御部350は、引き続き、同期リクエストの処理(ステップS5〜ステップS9)を継続する。一方、ジョブが終了した場合には(ステップS10肯定)、処理を終了する(この時、マスク情報テーブル340内の情報を全て初期化する)。
[実施例1による効果]
上述してきたように、実施例1によれば、同期の待ち合わせ参加する各プロセスから、各プロセスの配置状況を示したマスクの生成を要求するマスク生成リクエストを受け付けて自動生成する。このようなことから、ノード間で情報をやり取りするための送受信のコスト負担を大幅に削減しつつマスクを自動生成することができる。さらに、同期の待ち合わせ参加する各プロセスからのリクエストに応じてマスクの生成を行うので、待ち合わせを行うプロセスの配置状況を示すマスクをジョブ内で動的に変更できる。
また、サンプルの最小値、最大値、総和などのグローバル演算を同期して行う演算処理装置に対して、上述してきた実施例1に係るノード間同期装置を適用することもできる。
図9は、実施例3に係るノード間同期装置の構成を示す図である。実施例3に係るノード間同期装置300は、以下に説明する点が上記の実施例とは異なる。
すなわち、ノード間同期装置300は、ポート1に対応したポート内同期ブロック300−1と、ポート2に対応したポート内同期ブロック300−2と、ポート間同期ブロック300−3とを有し、ポート1とポート2との間の待ち合わせを実現する。
ポート内同期ブロック300−1は、受信部310−1と、送信部320−1と、通信コンテキストテーブル330−1と、マスク情報テーブル340−1と、ポート内同期制御部350−1とを有し、上記の実施例1で説明したノード間同期装置300と同様の機能を有する。なお、ポート間の待ち合わせを目的とするため、後述するポート間同期ブロック内でマスク生成リクエストの受付数をカウントする。したがって、マスク情報テーブル340−1には、カウンタを用意しない。
ポート内同期ブロック300−2は、受信部310−2と、送信部320−2と、通信コンテキストテーブル330−2と、マスク情報テーブル340−2と、ポート内同期制御部350−2とを有し、上記の実施例1で説明したノード間同期装置300と同様の機能を有する。なお、上記したポート内同期ブロック300−1と同様の理由から、マスク情報テーブル340−2には、カウンタを用意しない。
ポート間同期ブロック300−3は、マスク情報テーブル340−3およびポート間同期制御部350−3を有する。マスク情報テーブル340−3は、各ポート(ポート1およびポート2)に対応するマスク、待ち合わせ状態およびカウンタを有する。ポート間同期制御部350−3は、マスク情報テーブル340−3を用いて、ポート間の待ち合わせ処理を実行する。
以下に、図10および図11を用いて、例えば、ポート1に接続された計算機ノード100内の2プロセスと、ポート2に接続された計算機ノード100内の1プロセスとの間で待ち合わせを行う場合を説明する。図10および図11は、実施例3に係るマスク情報テーブル内の情報の遷移を示す図である。
図10に示される値は、左から順にポート1に対応するポート内同期ブロック300−1のマスク情報テーブル340−1内の値、ポート内同期ブロック300−2のマスク情報テーブル340−2内の値、ポート間同期ブロック300−3のマスク情報テーブル340−3内の値となっている。
初期状態では、ポート1、ポート2およびポート間のマスク、待ち合わせ状態およびカウンタの各値は0となる(図10の(1)参照)。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると、上述した実施例1と同様の手順で、マスク情報テーブル340−1内のマスクを更新する(図10の(2)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
マスク生成リクエストの転送後、ポート内同期制御部350−1は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する。また、ポート内同期制御部350−1は、マスク生成レスポンスが受け付けられる前に、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う。
ポート内同期制御部350−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、同期レスポンスの受付を待機する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新する(図10の(2)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「1」となる(同図(2)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部350−3は、残りのマスク生成リクエストの受付を待機する。
ポート内同期ブロック300−2のポート内同期制御部350−2は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」、「プロセス数=3」を含んだマスク生成リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内のマスクを更新する(図10の(3)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−2からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2からのマスク生成リクエストを受信した場合、マスク情報テーブル340−3内のマスクにおいて、ポート2に対応する箇所(左)を「0」から「1」に更新する(図10の(3)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「2」となる(同図(3)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「2」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部350−3は、残りのマスク生成リクエストの受付を待機する。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると、上述したのと同様の手順で、マスク情報テーブル340−1内のマスクを更新する(図10の(4)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新するが、既に「1」に更新されている状態なのでそのままとする(図10の(4)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「3」となる(同図(4)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「3」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「3」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。同様にして、ポート内同期ブロック300−2は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。
ポート内同期ブロック300−2のポート内同期制御部350−2は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」を含んだ同期リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内の待ち合わせ状態を更新する(図11の(5)参照)。
そして、ポート内同期制御部350−2は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート2の範囲で判定する。具体的には、ポート内同期制御部350−2は、上述した実施例1と同様の手順で、マスク情報テーブル340−2内のマスク「0100」と待ち合わせ状態「0100」とを比較する(図11の(5)参照)。比較した結果、マスク「0100」と待ち合わせ状態「0100」とが互いに一致するので、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、ポート内同期制御部350−2は、ポート間同期ブロック300−3に同期リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−2から同期リクエストを受信すると、マスク情報テーブル340−3内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート2に対応する箇所(左)を「0」から「1」に更新する(図11の(5)参照)。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「10」とを比較する(図11の(5)参照)。比較した結果、マスク「11」と待ち合わせ状態「10」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1(ポート1側)から残りの同期リクエストの受付を待機する。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」を含んだ同期リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内の待ち合わせ状態を更新する(図11の(6)参照)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する。具体的には、ポート内同期制御部350−1は、上述した実施例1と同様の手順で、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1000」とを比較する(図11の(6)参照)。比較した結果、マスク「1001」と待ち合わせ状態「1000」とが互いに一致しないので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送せずに、残りの同期リクエストの受付を待機する。
そして、ポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」を含んだ同期リクエストを受信すると、上述したのと同様の手順で、マスク情報テーブル340−1内の待ち合わせ状態を更新する(図11の(7)参照)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する。具体的には、ポート内同期制御部350−1は、上述したのと同様の手順で、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1001」とを比較する(図11の(7)参照)。比較した結果、マスク「1001」と待ち合わせ状態「1001」とが互いに一致するので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1から同期リクエストを受信すると、マスク情報テーブル340−3内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート1に対応する箇所(右)を「0」から「1」に更新する(図11の(7)参照)。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「11」とを比較する(図11の(7)参照)。比較した結果、マスク「11」と待ち合わせ状態「11」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する。
同期レスポンス送信後、ポート間同期制御部350−3は、マスク情報テーブル340−3内の待ち合わせ状態を初期化(全ての値を「0」)して(図11の(8)参照)、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を待機する。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知が受け付けられていない場合には、同期リクエストのポート間の待ち合わせ処理を継続する。ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を受け付けると、処理を終了し、マスク情報テーブル340−3内のマスクを初期化する。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3から同期レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
そして、ポート内同期ブロック300−1は、マスク情報テーブル340−1の待ち合わせ状態を初期化(全ての値を「0」)し(図11の(8)参照)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック300−1は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し(この時、マスク情報テーブル340−1内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
ポート内同期ブロック300−1と同様に、ポート内同期ブロック300−2は、ポート間同期ブロック300−3から同期レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
そして、ポート内同期ブロック300−2は、マスク情報テーブル340−2の待ち合わせ状態を初期化(全ての値を「0」)し(図11の(8)参照)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック300−2は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し(この時、マスク情報テーブル340−2内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
[ノード間同期装置の処理(実施例3)]
図12および図13は、実施例3に係るポート内同期制御部の処理の流れを示す図である。図14は、実施例3に係るポート間同期制御部の処理の流れを示す図である。なお、以下では、ポート1およびポート2の2ポート間待ち合わせを行う場合を例に挙げて説明する。
[ポート内同期制御部による処理]
図12に示すように、例えば、ポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると(ステップS1肯定)、マスク情報テーブル340−1内のマスクを更新する(ステップS2)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する(ステップS3)。
マスク生成リクエストの転送後、ポート内同期制御部350−1は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する(ステップS4)。また、ポート内同期制御部350−1は、マスク生成レスポンスが受け付けられていない状態で(ステップS4否定)、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う(ステップS1〜ステップS3)。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると(ステップS4肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する(ステップS5)。
そして、図13に示すように、マスク生成レスポンスの転送後、ポート内同期制御部350−1は、同期リクエストの受信を待機し(ステップS6)、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」を含んだ同期リクエストを受信すると(ステップS6肯定)、マスク情報テーブル340−2内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する(ステップS8)。例えば、ポート内同期制御部350−1は、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1000」とを比較する。比較した結果、マスク「1001」と待ち合わせ状態「1000」とが互いに一致しないので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS8否定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送せずに、上述したステップS6に戻り、残りの同期リクエストの受付を待機する。
そして、ポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」を含んだ同期リクエストを受信すると(ステップS6肯定)、上述したのと同様の手順で、マスク情報テーブル340−1内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、上述したのと同様の手順で、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する(ステップS8)。ポート内同期制御部350−1は、例えば、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1001」とを比較する。比較した結果、マスク「1001」と待ち合わせ状態「1001」とが互いに一致するので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS8肯定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する(ステップS9)。
同期リクエスト転送後、ポート内同期ブロック300−1は、同期レスポンスの受信を待機し(ステップS10)、ポート間同期ブロック300−3から同期レスポンスを受信すると(ステップS10肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する(ステップS11)。
そして、ポート内同期ブロック300−1は、マスク情報テーブル340−1の待ち合わせ状態を初期化(全ての値を「0」)し(ステップS12)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する(ステップS13)。そして、ジョブが終了していない場合には(ステップS13否定)、ポート内同期ブロック300−1は、上述したステップS6に戻って、同期リクエストの処理(ステップS6〜ステップS12)を継続する。一方、ジョブが終了した場合には(ステップS13肯定)、処理を終了し(この時、マスク情報テーブル340−1内の情報を全て初期化する)、ジョブの終了をポート間同期ブロック300−3に送信する。
ポート内同期制御部350−1と同様に、ポート内同期制御部350−2は、図12に示すように、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」、「プロセス数=3」を含んだマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−2内のマスクを更新する(ステップS2)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する(ステップS3)。
マスク生成リクエストの転送後、ポート内同期制御部350−2は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する(ステップS4)。また、ポート内同期制御部350−2は、マスク生成レスポンスが受け付けられていない状態で(ステップS4否定)、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う(ステップS1〜ステップS3)。
ポート内同期ブロック300−2は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると(ステップS4肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する(ステップS5)。
そして、図13に示すように、マスク生成レスポンスの転送後、ポート内同期制御部350−2は、同期リクエストの受信を待機し(ステップS6)、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」を含んだ同期リクエストを受信すると(ステップS6肯定)、マスク情報テーブル340−2内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−2は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート2の範囲で判定する(ステップS8)。例えば、ポート内同期制御部350−2は、マスク情報テーブル340−2内のマスク「0100」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0100」と待ち合わせ状態「0100」とが互いに一致するので、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS8肯定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する(ステップS9)。
一方、ポート内同期制御部350−2は、マスクと待ち合わせ状態とが互いに一致しない場合には、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS8否定)。そして、ポート間同期ブロック300−3に同期リクエストを転送せずに、上述したステップS6に戻り、残りの同期リクエストの受付を待機する。
同期リクエスト転送後、ポート内同期ブロック300−2は、同期レスポンスの受信を待機し(ステップS10)、ポート間同期ブロック300−3から同期レスポンスを受信すると(ステップS10肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する(ステップS11)。
そして、ポート内同期ブロック300−2は、マスク情報テーブル340−2の待ち合わせ状態を初期化(全ての値を「0」)し(ステップS12)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する(ステップS13)。そして、ジョブが終了していない場合には(ステップS13否定)、ポート内同期ブロック300−2は、上述したステップS6に戻って、同期リクエストの処理(ステップS6〜ステップS12)を継続する。一方、ジョブが終了した場合には(ステップS13肯定)、処理を終了し(この時、マスク情報テーブル340−2内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
[ポート間同期制御部の処理]
図14に示すように、ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると(ステップS1)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新する。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「1」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、ポート間同期制御部350−3は、上述したステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−2からマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−2からのマスク生成リクエストを受信した場合、マスク情報テーブル340−3内のマスクにおいて、ポート2に対応する箇所(左)を「0」から「1」に更新する。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「2」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「2」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、ポート間同期制御部350−3は、上述したステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−1からマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新するが、既に「1」に更新されている状態なのでそのままとする。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「3」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「3」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「3」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する(ステップS3肯定)。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する(ステップS4)。
マスク生成レスポンスの送信後、ポート間同期制御部350−3は、同期リクエストの受信を待機し(ステップS5)、ポート内同期ブロック300−2から同期リクエストを受信すると(ステップS5肯定)、マスク情報テーブル340−3内の待ち合わせ状態を更新する(ステップS6)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−2からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート2に対応する箇所(左)を「0」から「1」に更新する。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する(ステップS7)。例えば、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「10」とを比較する。比較した結果、マスク「11」と待ち合わせ状態「10」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する(ステップS7否定)。そして、ポート間同期制御部350−3は、上述したステップS5に戻って、ポート内同期ブロック300−1(ポート1側)から残りの同期リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−1から同期リクエストを受信すると(ステップS5肯定)、マスク情報テーブル340−3内の待ち合わせ状態を更新する(ステップS6)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート1に対応する箇所(右)を「0」から「1」に更新する。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する(ステップS7)。例えば、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「11」とを比較する。比較した結果、マスク「11」と待ち合わせ状態「11」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する(ステップS7肯定)。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する(ステップS8)。
同期レスポンス送信後、ポート間同期制御部350−3は、マスク情報テーブル340−3内の待ち合わせ状態を初期化(全ての値を「0」)して(ステップS9)、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を待機する(ステップS10)。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知が受け付けられていない場合には(ステップS10否定)、上述したステップS5に戻って、同期リクエストのポート間の待ち合わせ処理(ステップS5〜ステップS9)を継続する。ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を受け付けると(ステップS10肯定)、処理を終了し、マスク情報テーブル340−3内のマスクを初期化する。
上述してきたように、実施例3によれば、ポート間の待ち合わせについても、上記の実施例1の内容を同様に適用できる。
なお、上述してきた実施例3では、2ポート間の待ち合わせを行う場合について説明したが、同様の考え方により、ポート間同期制御部350−3の階層を追加することで、ポート数を拡張した場合にも同様に処理できる。