(57)【要約】【課題】並列計算機システムのノード装置内における演算処理装置の複数のジョブ、タスク、プロセス、スレッド等の処理単位に対してリダクション演算の演算結果を通知する際の通知コストを削減する。【解決手段】同期装置７１２内のレジスタ７２１−０〜レジスタ７２１−（ｐ−１）は、演算処理装置７１１によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する。リダクション演算部７２２は、複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、リダクション演算の演算結果を生成する。通知制御部７２３は、演算結果が生成されたとき、リダクション演算の完了を上記複数の処理単位に一括して通知する。【選択図】図７
2020017043.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置と同期装置とを備えるノード装置であって、
前記同期装置は、
前記演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する複数のレジスタと、
前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、前記リダクション演算の演算結果を生成するリダクション演算部と、
前記演算結果が生成されたとき、前記リダクション演算の完了を前記複数の処理単位に一括して通知する通知制御部と、
を含むことを特徴とするノード装置。
【請求項２】
前記演算処理装置と前記同期装置とを備えるノード装置は、前記複数の処理単位によって共有される共有領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記共有領域のアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記共有領域のアドレスを用いて、前記演算結果を前記共有領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする請求項１記載のノード装置。
【請求項３】
前記演算処理装置と前記同期装置とを備えるノード装置は、前記複数の処理単位それぞれによって使用される複数の領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記複数の領域それぞれのアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記複数の領域それぞれのアドレスを用いて、前記演算結果を前記複数の領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする請求項１記載のノード装置。
【請求項４】
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記通知制御部は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定することを特徴とする請求項１乃至３のいずれか１項に記載のノード装置。
【請求項５】
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記通知制御部は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記演算結果を前記複数のレジスタそれぞれに格納するとともに、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定することによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする請求項１記載のノード装置。
【請求項６】
複数のノード装置を有する並列計算機システムであって、
前記複数のノード装置各々は演算処理装置と同期装置とを備え、
前記同期装置は、
前記演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する複数のレジスタと、
前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、前記リダクション演算の演算結果を生成するリダクション演算部と、
前記演算結果が生成されたとき、前記リダクション演算の完了を前記複数の処理単位に一括して通知する通知制御部と、
を含むことを特徴とする並列計算機システム。
【請求項７】
複数のノード装置を有する並列計算機システムの制御方法であって、
前記複数のノード装置各々が有する演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを、前記複数のノード装置各々が有する同期装置内の複数のレジスタに格納し、
前記同期装置によって、前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行うことで、前記リダクション演算の演算結果を生成し、
前記演算結果が生成されたとき、前記同期装置によって、前記リダクション演算の完了を前記複数の処理単位に一括して通知する、
ことを特徴とする並列計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード装置、並列計算機システム、及び並列計算機システムの制御方法に関する。
【背景技術】
【０００２】
図１は、並列計算機システムの例を示している。図１の並列計算機システムは、並列に動作するノード装置１０１−１〜ノード装置１０１−９を含む。隣接する２台のノード装置は、伝送路１０２によって接続されている。このような並列計算機システムでは、各ノード装置が生成するデータを用いてリダクション演算が実行されることがある。
【０００３】
図２は、４台のノード装置に対するリダクション演算の例を示している。図２の並列計算機システムは、ノード装置Ｎ０〜ノード装置Ｎ３を含み、リダクション演算を実行することによって、４台のノード装置それぞれが有するベクトルの総和ＳＵＭを求める。例えば、ノード装置Ｎ０、ノード装置Ｎ１、ノード装置Ｎ２、及びノード装置Ｎ３それぞれが有するベクトルの要素が１、７、１３、及び１９である場合、それらの要素の総和は４０になる。
【０００４】
リダクション演算に関して、全てのプロセス又はスレッドがバリアに到達するまで、バリアに到達済みのプロセス又はスレッドの進行を停止させるバリア同期を行いつつ、リダクション演算を行うリダクション演算装置が知られている（例えば、特許文献１及び特許文献２を参照）。分散共有メモリを用いた同報通信方法も知られている（例えば、特許文献３を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１２２８４８号公報
【特許文献２】特開２０１２−１２８８０８号公報
【特許文献３】特開２００８−１５６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
並列計算機システムの各ノード装置内において複数のジョブ、タスク、プロセス、スレッド等の処理単位が動作している場合、各処理単位に対してリダクション演算の演算結果を通知することは、冗長な処理であり、パケット流量、レイテンシ等の通知コストが増加する原因となる。
【０００７】
１つの側面において、本発明は、並列計算機システムのノード装置内における演算処理装置の複数のジョブ、タスク、プロセス、スレッド等の処理単位に対してリダクション演算の演算結果を通知する際の通知コストを削減することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、ノード装置は、演算処理装置及び同期装置を含み、同期装置は、複数のレジスタ、リダクション演算部、及び通知制御部を含む。
【０００９】
複数のレジスタは、演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する。リダクション演算部は、複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、リダクション演算の演算結果を生成する。通知制御部は、演算結果が生成されたとき、リダクション演算の完了を上記複数の処理単位に一括して通知する。
【発明の効果】
【００１０】
実施形態によれば、並列計算機システムのノード装置内における演算処理装置の複数のジョブ、タスク、プロセス、スレッド等の処理単位に対してリダクション演算の演算結果を通知する際の通知コストを削減することができる。
【図面の簡単な説明】
【００１１】
【図１】並列計算機システムを示す図である。
【図２】４台のノード装置に対するリダクション演算を示す図である。
【図３】プロセスを示す図である。
【図４】１６個のプロセスに対するリダクション演算を示す図である。
【図５】リダクション演算の処理フローを示す図である。
【図６】プロセス０に関する処理フローを示す図である。
【図７】ノード装置の構成図である。
【図８】並列計算機システムの制御方法のフローチャートである。
【図９】並列計算機システムの構成図である。
【図１０】ＣＰＵ及び通信装置を含むノード装置の構成図である。
【図１１】同期装置の第１の構成図である。
【図１２】共有領域による通知方法におけるレジスタの情報を示す図である。
【図１３】共有領域による通知方法における書き込み要求を示す図である。
【図１４】リダクション演算の完了を一括して通知する処理フローを示す図である。
【図１５】共有領域による通知方法におけるプロセス０に関する処理フローを示す図である。
【図１６】ロック制御回路の構成図である。
【図１７】マルチキャストによる通知方法におけるレジスタの情報を示す図である。
【図１８】マルチキャストによる通知方法における書き込み要求を示す図である。
【図１９】マルチキャストによる通知方法におけるプロセス０に関する処理フローを示す図である。
【図２０】同期装置の第２の構成図である。
【図２１】レジスタによる通知方法におけるレジスタの情報を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、実施形態を詳細に説明する。
【００１３】
図３は、ノード装置Ｎ０〜ノード装置Ｎ３の各々において生成されるプロセスの例を示している。この例では、各ノード装置Ｎｉ（ｉ＝０〜３）内においてプロセス０〜プロセス３の４個のプロセスが生成され、合計１６個のプロセスが並列処理を行う。
【００１４】
ここで、プロセスはノード装置が処理を実行する処理単位の一例であり、プロセス以外のジョブ、タスク、スレッド、マイクロスレッド等で有っても良い。
【００１５】
図４は、ノード装置Ｎ０〜ノード装置Ｎ３の１６個のプロセスに対するリダクション演算の例を示している。図４の並列計算機システムは、ノード装置Ｎ０〜ノード装置Ｎ３を含み、１６個のプロセスに対するａｌｌｒｅｄｕｃｅを実行することで、１６個のプロセスそれぞれが生成するデータの総和ＳＵＭを求める。この例では、１６個のプロセスが有するデータの総和は７８になる。
【００１６】
図５は、図４のリダクション演算を２入力２出力のリダクション演算器を用いて実行する場合の処理フローの例を示している。ノード装置Ｎｉ内の各丸印は、データを記憶するレジスタを表し、丸印内の数字又は文字は、各レジスタの識別情報を表す。リダクション演算は、プロセス間で同期を取りながら実行される。
【００１７】
ノード装置Ｎ０内のレジスタ０、レジスタ１、レジスタ２、及びレジスタ３は、入出力インタフェース（ＩＦ）として用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１０、レジスタ１１、レジスタ１８、レジスタ１ｃ、レジスタ１ｅ、レジスタ２０、レジスタ２４、及びレジスタ２５は、中継ＩＦとして用いられ、待機中のデータを記憶する。
【００１８】
ノード装置Ｎ１内のレジスタ４、レジスタ５、レジスタ６、及びレジスタ７は、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１２、レジスタ１３、レジスタ１９、レジスタ２１、レジスタ２６、及びレジスタ２７は、中継ＩＦとして用いられ、待機中のデータを記憶する。
【００１９】
ノード装置Ｎ２内のレジスタ８、レジスタ９、レジスタａ、及びレジスタｂは、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１４、レジスタ１５、レジスタ１ａ、レジスタ１ｄ、レジスタ１ｆ、レジスタ２２、レジスタ２８、及びレジスタ２９は、中継ＩＦとして用いられ、待機中のデータを記憶する。
【００２０】
ノード装置Ｎ３内のレジスタｃ、レジスタｄ、レジスタｅ、及びレジスタｆは、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１６、レジスタ１７、レジスタ１ｂ、レジスタ２３、レジスタ２ａ、及びレジスタ２ｂは、中継ＩＦとして用いられ、待機中のデータを記憶する。
【００２１】
ノード装置Ｎ０内のレジスタ１０は、レジスタ０及びレジスタ１のデータの和を記憶し、レジスタ１１は、レジスタ２及びレジスタ３のデータの和を記憶し、レジスタ１８は、レジスタ１０及びレジスタ１１のデータの和を記憶する。
【００２２】
ノード装置Ｎ１内のレジスタ１２は、レジスタ４及びレジスタ５のデータの和を記憶し、レジスタ１３は、レジスタ６及びレジスタ７のデータの和を記憶し、レジスタ１９は、レジスタ１２及びレジスタ１３のデータの和を記憶する。
【００２３】
ノード装置Ｎ２内のレジスタ１４は、レジスタ８及びレジスタ９のデータの和を記憶し、レジスタ１５は、レジスタａ及びレジスタｂのデータの和を記憶し、レジスタ１ａは、レジスタ１４及びレジスタ１５のデータの和を記憶する。
【００２４】
ノード装置Ｎ３内のレジスタ１６は、レジスタｃ及びレジスタｄのデータの和を記憶し、レジスタ１７は、レジスタｅ及びレジスタｆのデータの和を記憶し、レジスタ１ｂは、レジスタ１６及びレジスタ１７のデータの和を記憶する。
【００２５】
ノード装置Ｎ０内のレジスタ１ｃは、レジスタ１８及びノード装置Ｎ１内のレジスタ１９のデータの和を記憶する。ノード装置Ｎ２内のレジスタ１ｄは、レジスタ１ａ及びノード装置Ｎ３内のレジスタ１ｂのデータの和を記憶する。
【００２６】
ノード装置Ｎ０内のレジスタ１ｅは、レジスタ１ｃ及びノード装置Ｎ２内のレジスタ１ｄのデータの和を記憶する。ノード装置Ｎ２内のレジスタ１ｆは、レジスタ１ｄ及びノード装置Ｎ０内のレジスタ１ｃのデータの和を記憶する。レジスタ１ｅ及びレジスタ１ｆのデータは、１６個のプロセスが有するデータの総和に相当する。
【００２７】
レジスタ１ｅのデータは、ノード装置Ｎ０内のレジスタ２０及びレジスタ２４を経由して、レジスタ０に対応するプロセス０及びレジスタ１に対応するプロセス１に通知される。また、レジスタ１ｅのデータは、ノード装置Ｎ０内のレジスタ２０及びレジスタ２５を経由して、レジスタ２に対応するプロセス２及びレジスタ３に対応するプロセス３に通知される。
【００２８】
レジスタ１ｅのデータは、ノード装置Ｎ１内のレジスタ２１及びレジスタ２６を経由して、レジスタ４に対応するプロセス０及びレジスタ５に対応するプロセス１に通知される。また、レジスタ１ｅのデータは、ノード装置Ｎ１内のレジスタ２１及びレジスタ２７を経由して、レジスタ６に対応するプロセス２及びレジスタ７に対応するプロセス３に通知される。
【００２９】
一方、レジスタ１ｆのデータは、ノード装置Ｎ２内のレジスタ２２及びレジスタ２８を経由して、レジスタ８に対応するプロセス０及びレジスタ９に対応するプロセス１に通知される。また、レジスタ１ｆのデータは、ノード装置Ｎ２内のレジスタ２２及びレジスタ２９を経由して、レジスタａに対応するプロセス２及びレジスタｂに対応するプロセス３に通知される。
【００３０】
レジスタ１ｆのデータは、ノード装置Ｎ３内のレジスタ２３及びレジスタ２ａを経由して、レジスタｃに対応するプロセス０及びレジスタｄに対応するプロセス１に通知される。また、レジスタ１ｆのデータは、ノード装置Ｎ３内のレジスタ２３及びレジスタ２ｂを経由して、レジスタｅに対応するプロセス２及びレジスタｆに対応するプロセス３に通知される。
【００３１】
こうして、１６個のプロセスが有するデータの総和が、リダクション演算の演算結果として、それらのプロセスに通知される。
【００３２】
図６は、図５のノード装置Ｎ０内におけるプロセス０に関する処理フローの例を示している。プロセス０は、リダクション演算の開始時にレジスタ０をロックし、入力データをレジスタ０に格納する。そして、レジスタ１ｅに格納された演算結果が、レジスタ２０及びレジスタ２４を経由してプロセス０に通知されると、レジスタ０が解放される。他のプロセスに関する処理フローについても、図６の処理フローと同様である。
【００３３】
例えば、図４のリダクション演算に特許文献１の技術を適用した場合、各ノード装置内の複数のプロセスそれぞれに対して、独立に同期ポイントが設定される。そして、リダクション演算の演算結果は、各ノード装置内の複数のプロセスに対して、他のノード装置への通知と同様な方法で通知される。通知方法としては、ツリー構造のブロードキャスト又はバタフライ演算による通知が考えられる。
【００３４】
しかしながら、ノード装置内において、ツリー構造のブロードキャスト又はバタフライ演算により複数のプロセスに同じ演算結果を通知することは、冗長な処理であり、パケット流量、レイテンシ等の通知コストが増加する原因となる。このため、ノード装置内における演算結果の通知処理を効率化して、通知コストを削減することが望まれる。また、プロセス間の同期が既に成立している場合、複数のプロセスに対して演算結果を個別に通知することによって、同期ずれが発生する可能性もある。
【００３５】
図７は、実施形態の並列計算機システムに含まれる各ノード装置の構成例を示している。図７のノード装置７０１は、演算処理装置７１１及び同期装置７１２を含み、同期装置７１２は、レジスタ７２１−０〜レジスタ７２１−（ｐ−１）（ｐは２以上の整数）、リダクション演算部７２２、及び通知制御部７２３を含む。レジスタ７２１−０〜レジスタ７２１−（ｐ−１）は、演算処理装置７１１によって生成されるｐ個のプロセスそれぞれのデータを記憶する。
【００３６】
図８は、図７のノード装置７０１を含む並列計算機システムの制御方法の例を示すフローチャートである。まず、演算処理装置７１１は、ｐ個のプロセスそれぞれのデータを、レジスタ７２１−０〜レジスタ７２１−（ｐ−１）に格納する（ステップ８０１）。
【００３７】
次に、リダクション演算部７２２は、レジスタ７２１−０〜レジスタ７２１−（ｐ−１）それぞれが記憶するデータと他のノード装置内で生成されるプロセスのデータとに対するリダクション演算を行って、演算結果を生成する（ステップ８０２）。
【００３８】
そして、通知制御部７２３は、演算結果が生成されたとき、リダクション演算の完了をノード装置７０１内のｐ個のプロセスに一括して通知する（ステップ８０３）。
【００３９】
図７のノード装置７０１によれば、ノード装置７０１内の複数のプロセスに対してリダクション演算の演算結果を通知する際の通知コストを削減することができる。
【００４０】
図９は、図７のノード装置７０１を含む並列計算機システムの構成例を示している。図９の並列計算機システムは、ノード装置９０１−１〜ノード装置９０１−Ｌ（Ｌは２以上の整数）を含む。各ノード装置９０１−ｉ（ｉ＝１〜Ｌ）は、例えば、情報処理装置（コンピュータ）であり、ノード装置７０１に対応する。ノード装置９０１−１〜ノード装置９０１−Ｌは、通信ネットワーク９０２によって接続されている。
【００４１】
図１０は、図９のノード装置９０１−ｉの構成例を示している。図１０のノード装置９０１−ｉは、ＣＰＵ（Central Processing Unit）１００１、ＭＡＣ（Memory Access Controller）１００２、メモリ１００３、及び通信装置１００４を含み、通信装置１００４は同期装置１０１１を含む。ＣＰＵ１００１は、図７の演算処理装置７１１に対応し、プロセッサと呼ばれることもある。同期装置１０１１は、図７の同期装置７１２に対応する。
【００４２】
ＣＰＵ１００１は、メモリ１００３が記憶する並列処理プログラムを実行することで、複数のプロセスを生成し、生成したプロセスを動作させる。通信装置１００４は、ＮＩＣ（Network Interface Card）等の通信インタフェース回路であり、通信ネットワーク９０２を介して他のノード装置と通信する。
【００４３】
同期装置１０１１は、ノード装置９０１−１〜ノード装置９０１−Ｌ内で動作するプロセスの間でバリア同期を取りながらリダクション演算を行い、演算結果を各プロセスに通知する。ＭＡＣ１００２は、ＣＰＵ１００１及び同期装置１０１１によるメモリ１００３へのアクセスを制御する。
【００４４】
図１１は、図１０の同期装置１０１１の第１の構成例を示している。図１１の同期装置１０１１は、レジスタ１１０１−１〜レジスタ１１０１−Ｋ（Ｋは２以上の整数）、受信部１１０２、要求受付部１１０３、及びマルチプレクサ（multiplexer，ＭＵＸ）１１０４を含む。さらに、同期装置１０１１は、制御部１１０５、リダクション演算部１１０６、デマルチプレクサ（demultiplexer，ＤＥＭＵＸ）１１０７、送信部１１０８、及び通知部１１０９を含む。
【００４５】
レジスタ１１０１−１〜レジスタ１１０１−Ｋは、リダクション演算に用いられるリダクション資源である。レジスタ１１０１−１〜レジスタ１１０１−Ｋのうちｐ個のレジスタは、図７のレジスタ７２１−０〜レジスタ７２１−（ｐ−１）に対応し、入出力ＩＦとして用いられる。残りのレジスタは、中継ＩＦとして用いられる。
【００４６】
リダクション演算部１１０６及び通知部１１０９は、図７のリダクション演算部７２２及び通知制御部７２３にそれぞれ対応する。
【００４７】
受信部１１０２は、他のノード装置からパケットを受信し、受信したパケットに含まれるリダクション演算の中間データをＭＵＸ１１０４へ出力する。要求受付部１１０３は、ノード装置９０１−ｉ内のプロセスによって生成される演算開始要求及び入力データを、ＣＰＵ１００１から受け取り、ＭＵＸ１１０４へ出力する。
【００４８】
ＭＵＸ１１０４は、要求受付部１１０３が出力する演算開始要求を制御部１１０５へ出力し、要求受付部１１０３が出力する入力データ及び受信部１１０２が出力する中間データを、制御部１１０５及びリダクション演算部１１０６へ出力する。
【００４９】
制御部１１０５は、ＭＵＸ１１０４が出力する入力データ及び中間データを、レジスタ１１０１−１〜レジスタ１１０１−Ｋのいずれかに格納する。リダクション演算の開始時において、入出力ＩＦとして用いられるｐ個のレジスタには、ｐ個のプロセスそれぞれが生成する入力データが格納される。また、リダクション演算の中間ステージにおいて、中継ＩＦとして用いられるレジスタには、待機中の中間データが格納される。
【００５０】
また、制御部１１０５は、リダクション演算の開始時において、各プロセスからの演算開始要求に応じて、そのプロセスの入出力ＩＦとして用いられるレジスタをロックし、リダクション演算が完了したとき、ロックを解除することで、そのレジスタを解放する。解放されたレジスタは、次のリダクション演算に使用される。
【００５１】
リダクション演算部１１０６は、リダクション演算の各ステージにおいて、複数の入力データ又は複数の中間データに対するリダクション演算を行って、演算結果を生成する。そして、リダクション演算部１１０６は、生成した演算結果を、中間データ又は最終データとしてＤＥＭＵＸ１１０７へ出力する。
【００５２】
リダクション演算は、入力データの統計値を求める演算であってもよく、入力データに対する論理演算であってもよい。統計値としては、総和、最大値、最小値等が用いられ、論理演算としては、論理積、論理和、排他的論理和等が用いられる。例えば、リダクション演算部１１０６としては、２入力２出力のリダクション演算器を用いることができる。
【００５３】
ＤＥＭＵＸ１１０７は、リダクション演算部１１０６が出力する演算結果のデータを、送信部１１０８及び通知部１１０９へ出力する。送信部１１０８は、演算結果のデータを含むパケットを他のノード装置へ送信する。
【００５４】
通知部１１０９は、演算結果のデータが最終データである場合、その演算結果のデータをノード装置９０１−ｉ内の各プロセスに通知する。例えば、通知方法としては、以下の２つの方法のいずれかを用いることができる。
（１）共有領域による通知方法
この通知方法では、メモリ１００３内に、ｐ個のプロセスによって共有される共有領域が設けられる。通知部１１０９は、ＤＭＡ（Direct Memory Access）により演算結果のデータを共有領域に書き込むことによって、リダクション演算の完了をｐ個のプロセスに一括して通知し、各プロセスは、メモリ１００３内の共有領域から演算結果のデータを読み出す。
（２）マルチキャストによる通知方法
この通知方法では、メモリ１００３内に、ｐ個のプロセスそれぞれによって使用されるｐ個の領域が設けられる。通知部１１０９は、ＤＭＡにより演算結果のデータをそれらの領域に同時に書き込むことによって、リダクション演算の完了をｐ個のプロセスに一括して通知し、各プロセスは、メモリ１００３内の対応する領域から演算結果のデータを読み出す。
【００５５】
共有領域による通知方法によれば、演算結果を通知するための領域を１つ設けるだけで、ｐ個のプロセスに演算結果を通知することができる。一方、マルチキャストによる通知方法によれば、プロセス毎に書き込み先の領域を指定して演算結果を通知することができる。
【００５６】
図１２は、共有領域による通知方法においてレジスタ１１０１−ｋ（ｋ＝１〜Ｋ）が記憶する情報の例を示している。この例では、２入力２出力のリダクション演算器を用いてリダクション演算が実行される。
【００５７】
Ｘは、リダクション資源番号（reduction resource num）であり、レジスタ１１０１−ｋの識別情報として用いられる。入出力ＩＦ  ｆｌａｇは、レジスタ１１０１−ｋが入出力ＩＦ又は中継ＩＦのいずれであるかを示す１ビットのフラグである。
【００５８】
宛先Ａ及び宛先Ｂは、リダクション演算器の２つの出力それぞれについて、リダクション演算における次のステージのレジスタを示すｎビットの宛先情報である。ビット数ｎとしては、並列計算機システム内のノード装置の識別情報及びノード装置内のレジスタの識別情報の組み合わせを表現可能なビット数が用いられる。
【００５９】
受信Ａ  ｍａｓｋ及び受信Ｂ  ｍａｓｋは、リダクション演算器の２つの入力それぞれについて、前のステージの演算結果を受け取るか否かを示す１ビットのフラグである。送信Ａ  ｍａｓｋ及び送信Ｂ  ｍａｓｋは、リダクション演算器の２つの出力それぞれについて、次のステージへデータを転送するか否かを示す１ビットのフラグである。
【００６０】
ＤＭＡ  ａｄｄｒｅｓｓは、メモリ１００３内の共有領域のアドレスを示すｍビットの情報である。ビット数ｍとしては、メモリ１００３内のアドレス空間を表現可能なビット数が用いられる。
【００６１】
ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐは、入出力ＩＦとして用いられるｐ個のレジスタのうち、リダクション演算が完了したときに解放される、解放対象のレジスタを示すｐビットの情報である。論理“１”のビット値は、解放対象のレジスタであることを表し、論理“０”のビット値は、解放対象のレジスタではないことを表す。ｐ個のレジスタのすべてが解放対象である場合、ｐ個のビット値のすべてが論理“１”に設定される。一方、ｐ個のレジスタの一部が解放対象である場合、解放対象に対応する一部のビット値が論理“１”に設定される。
【００６２】
ｒｅａｄｙは、レジスタ１１０１−ｋがロック状態又は解放状態のいずれかであるかを示す１ビットのフラグである。解放状態は、リダクション演算が完了してレジスタ１１０１−ｋが解放され、演算開始要求を受け付け可能な状態を表す。一方、ロック状態は、リダクション演算の実行中でレジスタが解放されておらず、演算開始要求を受け付け不可能な状態を表す。論理“１”のビット値は解放状態を表し、論理“０”のビット値はロック状態を表す。
【００６３】
制御部１１０５は、レジスタ１１０１−ｋに対応するプロセスから演算開始要求を受け付けたとき、ｒｅａｄｙを論理“０”に設定することで、レジスタ１１０１−ｋをロックする。そして、リダクション演算が完了したとき、ｒｅａｄｙを論理“１”に設定することで、ロックを解除する。
【００６４】
Ｄａｔａ  Ｂｕｆｆｅｒは、リダクション演算の入力データ又は中間データを表す情報（ｐａｙｌｏａｄ）である。レジスタ１１０１−ｋが入出力ＩＦとして用いられる場合、Ｄａｔａ  Ｂｕｆｆｅｒには入力データが格納され、レジスタ１１０１−ｋが中継ＩＦとして用いられる場合、Ｄａｔａ  Ｂｕｆｆｅｒには中間データが格納される。
【００６５】
ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ及びｒｅａｄｙは、レジスタ１１０１−ｋが入出力ＩＦとして用いられる場合に設けられる。例えば、解放状態において、制御部１１０５がＤａｔａ  ｂｕｆｆｅｒに入力データを格納し、ｒｅａｄｙを論理“０”に設定すると、リダクション演算が開始される。あるいは、制御部１１０５がＤａｔａ  ｂｕｆｆｅｒに入力データを格納すると、自律的にｒｅａｄｙが論理“０”に変化し、リダクション演算が開始される。
【００６６】
図１３は、共有領域による通知方法において、通知部１１０９がＭＡＣ１００２へ出力する書き込み要求の例を示している。この例では、ベクトルに対するリダクション演算が実行され、演算結果を表すベクトルが生成される。
【００６７】
ｒｅｑ  ｔｙｐｅ［３：０］は、リダクション演算の種類を表し、ａｄｄｒｅｓｓ［５９：０］は、図１２のＤＭＡ  ａｄｄｒｅｓｓを表す。ｐａｙｌｏａｄ０［６３：０］〜ｐａｙｌｏａｄ３［６３：０］は、演算結果のベクトルの４個の要素を表す。
【００６８】
ＭＡＣ１００２は、通知部１１０９から書き込み要求を受け取ると、ｐａｙｌｏａｄ０［６３：０］〜ｐａｙｌｏａｄ３［６３：０］のデータを、メモリ１００３内のａｄｄｒｅｓｓ［５９：０］に書き込む。これにより、通知部１１０９は、演算結果のベクトルを共有領域に書き込むことができる。
【００６９】
図１４は、図９の並列計算機システムが図４のリダクション演算を実行する場合の処理フローの例を示している。この例では、Ｌ＝４であり、ノード装置Ｎ０〜ノード装置Ｎ３は、図９のノード装置９０１−１〜ノード装置９０１−Ｌにそれぞれ対応する。ノード装置Ｎｉ内の各丸印は、レジスタ１１０１−ｋを表し、丸印内の数字又は文字は、レジスタ１１０１−ｋの識別情報を表す。
【００７０】
ノード装置Ｎ０内のレジスタ０、レジスタ１、レジスタ２、及びレジスタ３は、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１０、レジスタ１１、レジスタ１８、レジスタ１ｃ、及びレジスタ１ｅは、中継ＩＦとして用いられ、待機中のデータを記憶する。レジスタ０は、ノード装置Ｎ０内において演算結果を通知するために参照される、代表レジスタとして用いられる。
【００７１】
ノード装置Ｎ１内のレジスタ４、レジスタ５、レジスタ６、及びレジスタ７は、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１２、レジスタ１３、及びレジスタ１９は、中継ＩＦとして用いられ、待機中のデータを記憶する。レジスタ４は、ノード装置Ｎ１内の代表レジスタとして用いられる。
【００７２】
ノード装置Ｎ２内のレジスタ８、レジスタ９、レジスタａ、及びレジスタｂは、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１４、レジスタ１５、レジスタ１ａ、レジスタ１ｄ、及びレジスタ１ｆは、中継ＩＦとして用いられ、待機中のデータを記憶する。レジスタ８は、ノード装置Ｎ２内の代表レジスタとして用いられる。
【００７３】
ノード装置Ｎ３内のレジスタｃ、レジスタｄ、レジスタｅ、及びレジスタｆは、入出力ＩＦとして用いられ、リダクション演算の開始時に、プロセス０、プロセス１、プロセス２、及びプロセス３それぞれが生成する入力データを記憶する。一方、レジスタ１６、レジスタ１７、及びレジスタ１ｂは、中継ＩＦとして用いられ、待機中のデータを記憶する。レジスタｃは、ノード装置Ｎ３内の代表レジスタとして用いられる。
【００７４】
ノード装置Ｎ０内のレジスタ１０は、レジスタ０及びレジスタ１のデータの和を記憶し、レジスタ１１は、レジスタ２及びレジスタ３のデータの和を記憶し、レジスタ１８は、レジスタ１０及びレジスタ１１のデータの和を記憶する。
【００７５】
ノード装置Ｎ１内のレジスタ１２は、レジスタ４及びレジスタ５のデータの和を記憶し、レジスタ１３は、レジスタ６及びレジスタ７のデータの和を記憶し、レジスタ１９は、レジスタ１２及びレジスタ１３のデータの和を記憶する。
【００７６】
ノード装置Ｎ２内のレジスタ１４は、レジスタ８及びレジスタ９のデータの和を記憶し、レジスタ１５は、レジスタａ及びレジスタｂのデータの和を記憶し、レジスタ１ａは、レジスタ１４及びレジスタ１５のデータの和を記憶する。
【００７７】
ノード装置Ｎ３内のレジスタ１６は、レジスタｃ及びレジスタｄのデータの和を記憶し、レジスタ１７は、レジスタｅ及びレジスタｆのデータの和を記憶し、レジスタ１ｂは、レジスタ１６及びレジスタ１７のデータの和を記憶する。
【００７８】
ノード装置Ｎ０内のレジスタ１ｃは、レジスタ１８及びノード装置Ｎ１内のレジスタ１９のデータの和を記憶する。ノード装置Ｎ２内のレジスタ１ｄは、レジスタ１ａ及びノード装置Ｎ３内のレジスタ１ｂのデータの和を記憶する。
【００７９】
ノード装置Ｎ０内のレジスタ１ｅは、レジスタ１ｃ及びノード装置Ｎ２内のレジスタ１ｄのデータの和を記憶する。ノード装置Ｎ２内のレジスタ１ｆは、レジスタ１ｄ及びノード装置Ｎ０内のレジスタ１ｃのデータの和を記憶する。レジスタ１ｅ及びレジスタ１ｆのデータは、１６個のプロセスが有するデータの総和に相当する。
【００８０】
共有領域による通知方法を用いた場合、レジスタ１ｅのデータは、リダクション演算の最終データであるため、代表レジスタであるレジスタ０が記憶するＤＭＡ  ａｄｄｒｅｓｓを用いて、メモリ１００３内の共有領域に書き込まれる。これにより、レジスタ０〜レジスタ３に対応する、ノード装置Ｎ０内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【００８１】
レジスタ１ｅのデータは、ノード装置Ｎ１にも送信され、代表レジスタであるレジスタ４が記憶するＤＭＡ  ａｄｄｒｅｓｓを用いて、メモリ１００３内の共有領域に書き込まれる。これにより、レジスタ４〜レジスタ７に対応する、ノード装置Ｎ１内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【００８２】
レジスタ１ｆのデータも、リダクション演算の最終データであるため、代表レジスタであるレジスタ８が記憶するＤＭＡ  ａｄｄｒｅｓｓを用いて、メモリ１００３内の共有領域に書き込まれる。これにより、レジスタ８〜レジスタｂに対応する、ノード装置Ｎ２内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【００８３】
レジスタ１ｆのデータは、ノード装置Ｎ３にも送信され、代表レジスタであるレジスタｃが記憶するＤＭＡ  ａｄｄｒｅｓｓを用いて、メモリ１００３内の共有領域に書き込まれる。これにより、レジスタｃ〜レジスタｆに対応する、ノード装置Ｎ３内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【００８４】
図１５は、図１４のノード装置Ｎ０内において共有領域による通知方法を用いた場合のプロセス０に関する処理フローの例を示している。プロセス０は、リダクション演算の開始時にレジスタ０をロックし、入力データをレジスタ０に格納する。そして、レジスタ１ｅに格納された演算結果が、メモリ１００３内の共有領域１５０１に書き込まれると、レジスタ０〜レジスタ３が解放される。
【００８５】
このような並列計算機システムによれば、リダクション演算の演算結果が生成されたとき、演算結果を共有領域に書き込むことで、リダクション演算の完了がノード装置９０１−ｉ内の複数のプロセスに一括して通知される。これにより、冗長な通知処理がなくなり、通信装置１００４のレイテンシが減少するため、通知コストが削減される。また、複数のプロセスに対して演算結果が同時に通知されるため、通知処理に伴う同期ずれが発生しにくくなる。
【００８６】
リダクション演算では、プロセス間でステージ毎にバリア同期を取りながら処理が行われる。したがって、各プロセスにリダクション演算の完了を通知することで、そのプロセスにバリア同期の完了も同時に通知することができる。
【００８７】
制御部１１０５内には、入出力ＩＦとして用いられるレジスタ１１０１−ｋ毎に、ｒｅａｄｙフラグを生成するためのロック制御回路が設けられる。
【００８８】
図１６は、このようなロック制御回路の構成例を示している。図１６のロック制御回路１６０１は、フリップフロップ（Flip-Flop，ＦＦ）回路１６１１、否定回路１６１２、論理積回路１６１３、論理積回路１６１４−０〜論理積回路１６１４−（ｐ−１）、及び論理和回路１６１５を含む。
【００８９】
入力信号ＣＬＫは、クロック信号である。入力信号ｒｄｃｔ＿ｒｅｑは、演算開始要求の有無を示す信号であり、制御部１１０５が演算開始要求を受け取ったとき、論理“１”となる。入力信号ｄｍａ＿ｒｅｓは、ｐ個のプロセスに対する演算結果の通知が完了したか否かを示す信号であり、演算結果の通知が完了したとき、論理“１”となる。
【００９０】
入力信号ｄｍａ＿ｒｅｓ＿ｎｕｍ［ｐ−１：０］は、代表レジスタの識別情報を表す信号であり、代表レジスタとしては、入出力ＩＦとして用いられるｐ個のレジスタのいずれかが用いられる。入力信号ｄｍａ＿ｒｅｓ＿ｎｕｍ［ｐ−１：０］は、ｐ個のレジスタそれぞれに対応するｐ個のビット値を表し、信号ｄｍａ＿ｒｅｓ＿ｎｕｍ［ｊ］（ｊ＝０〜ｐ−１）は、ｊ番目のレジスタに対応するビット値を表す。ｐ個のビット値のうち、代表レジスタに対応するビット値が論理“１”となる。
【００９１】
入力信号ｒｌｓ＿ｒｅｓｏｕｒｃｅ＿ｂｉｔｍａｐ［ｊ］［Ｘ］は、入出力ＩＦとして用いられるｐ個のレジスタのうちｊ番目のレジスタが記憶するｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐのＸ番目のビット値を表す。Ｘ番目のビット値は、ｐ個のレジスタのうちレジスタ１１０１−ｋに対応するビット値である。
【００９２】
例えば、ｐ個のレジスタ各々が記憶するｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐのｐ個のビット値は、すべて論理“１”に設定される。この場合、信号ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ［０］［Ｘ］〜信号ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ［ｐ−１］［Ｘ］として、論理“１”の信号が入力される。
【００９３】
出力信号ｒｅａｄｙは、レジスタ１１０１−ｋのｒｅａｄｙフラグとして格納される信号である。信号ｒｌｓは、ロック解除の有無を示す信号であり、レジスタ１１０１−ｋのロックを解除するとき、論理“１”となる。
【００９４】
論理積回路１６１４−ｊは、信号ｄｍａ＿ｒｅｓ＿ｎｕｍ［ｊ］と信号ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ［ｊ］［Ｘ］との論理積を出力する。したがって、ｊ番目のレジスタが代表レジスタであり、かつ、ｊ番目のレジスタがＸ番目のレジスタを解放対象として指定している場合に、論理積回路１６１４−ｊの出力が論理“１”となる。
【００９５】
論理和回路１６１５は、論理積回路１６１４−０〜論理積回路１６１４−（ｐ−１）の出力の論理和を出力する。論理積回路１６１３は、信号ｄｍａ＿ｒｅｓと論理和回路１６１５の出力との論理積を、信号ｒｌｓとして出力する。
【００９６】
ＦＦ回路１６１１は、信号ＣＬＫに同期して動作し、信号ｒｄｃｔ＿ｒｅｑが論理“１”になると、Ｑ端子から論理“１”の信号を出力する。そして、ＦＦ回路１６１１は、信号ｒｌｓが論理“１”になると、Ｑ端子から論理“０”の信号を出力する。
【００９７】
否定回路１６１２は、ＦＦ回路１６１１の出力を反転した信号を、信号ｒｅａｄｙとして出力する。したがって、信号ｒｄｃｔ＿ｒｅｑが論理“１”になると、信号ｒｅａｄｙは論理“０”となり、信号ｒｌｓが論理“１”になると、信号ｒｅａｄｙは論理“１”となる。
【００９８】
図１６のロック制御回路によれば、入出力ＩＦとして用いられるｐ個のレジスタのうち代表レジスタが記憶するＤＭＡ  ａｄｄｒｅｓｓを用いて、ｐ個のプロセスに演算結果が通知された場合、ｐ個のレジスタすべてが一斉に解放される。したがって、簡単な回路構成で複数のレジスタを同時に解放することができる。
【００９９】
次に、マルチキャストによる通知方法について説明する。図１７は、マルチキャストによる通知方法においてレジスタ１１０１−ｋが記憶する情報の例を示している。入出力ＩＦ  ｆｌａｇ、宛先Ａ、宛先Ｂ、受信Ａ  ｍａｓｋ、受信Ｂ  ｍａｓｋ、送信Ａ  ｍａｓｋ、送信Ｂ  ｍａｓｋ、ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ、ｒｅａｄｙ、及びＤａｔａ  Ｂｕｆｆｅｒについては、図１２に示した情報と同様である。また、信号ｒｅａｄｙを生成するロック制御回路の構成は、図１６に示した構成と同様である。
【０１００】
ＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ（ｐ−１）は、ｐ個のプロセスによって使用されるメモリ１００３内のｐ個の領域それぞれのアドレスを示すｍビットの情報である。ビット数ｍとしては、メモリ１００３内のアドレス空間を表現可能なビット数が用いられる。
【０１０１】
図１８は、マルチキャストによる通知方法において、通知部１１０９がＭＡＣ１００２へ出力する書き込み要求の例を示している。ｒｅｑ  ｔｙｐｅ［３：０］とｐａｙｌｏａｄ０［６３：０］〜ｐａｙｌｏａｄ３［６３：０］については、図１３に示した情報と同様である。
【０１０２】
この例では、ｐ＝４であり、ａｄｄｒｅｓｓ０［５９：０］〜ａｄｄｒｅｓｓ３［５９：０］は、それぞれ、図１７のＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ（ｐ−１）を表す。ｖａｌｉｄｊ（ｊ＝０〜３）は、ａｄｄｒｅｓｓｊ［５９：０］が有効であるか否かを表す。この場合、ｖａｌｉｄｊとして、図１７のｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐのｊ番目のビット値を用いることができる。
【０１０３】
ＭＡＣ１００２は、通知部１１０９から書き込み要求を受け取ると、ｐａｙｌｏａｄ０［６３：０］〜ｐａｙｌｏａｄ３［６３：０］のデータを、メモリ１００３内のａｄｄｒｅｓｓ０［５９：０］〜ａｄｄｒｅｓｓ３［５９：０］にそれぞれ書き込む。これにより、通知部１１０９は、演算結果のベクトルを、４個のプロセスそれぞれによって使用される４個の領域に同時に書き込むことができる。
【０１０４】
次に、図１４の処理フローにおいてマルチキャストによる通知方法を用いた場合の動作を説明する。この場合、レジスタ１ｅのデータは、ノード装置Ｎ０内のレジスタ０が記憶するＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ３を用いて、メモリ１００３内の４個の領域それぞれに書き込まれる。これにより、レジスタ０〜レジスタ３に対応する、ノード装置Ｎ０内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１０５】
レジスタ１ｅのデータは、ノード装置Ｎ１にも送信され、ノード装置Ｎ１内のレジスタ４が記憶するＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ３を用いて、メモリ１００３内の４個の領域それぞれに書き込まれる。これにより、レジスタ４〜レジスタ７に対応する、ノード装置Ｎ１内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１０６】
レジスタ１ｆのデータは、ノード装置Ｎ２内のレジスタ８が記憶するＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ３を用いて、メモリ１００３内の４個の領域それぞれに書き込まれる。これにより、レジスタ８〜レジスタｂに対応する、ノード装置Ｎ２内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１０７】
レジスタ１ｆのデータは、ノード装置Ｎ３にも送信され、ノード装置Ｎ３内のレジスタｃが記憶するＤＭＡ  ａｄｄｒｅｓｓ０〜ＤＭＡ  ａｄｄｒｅｓｓ３を用いて、メモリ１００３内の４個の領域それぞれに書き込まれる。これにより、レジスタｃ〜レジスタｆに対応する、ノード装置Ｎ３内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１０８】
図１９は、図１４のノード装置Ｎ０内においてマルチキャストによる通知方法を用いた場合のプロセス０に関する処理フローの例を示している。領域１９０１−ｊ（ｊ＝０〜３）は、ｊ番目のプロセスによって使用されるメモリ１００３内の領域である。プロセス０は、リダクション演算の開始時にレジスタ０をロックし、入力データをレジスタ０に格納する。そして、レジスタ１ｅに格納された演算結果が、メモリ１００３内の領域１９０１−０〜領域１９０１−３に書き込まれると、レジスタ０〜レジスタ３が解放される。
【０１０９】
ところで、リダクション演算の演算結果をメモリ１００３に書き込む代わりに、入出力ＩＦとして用いられるｐ個のレジスタに書き込むことで、ｐ個のプロセスに演算結果を通知することも可能である。この場合、各プロセッサは、対応するレジスタから演算結果を読み出すことで、演算結果を取得する。
【０１１０】
図２０は、このようなレジスタによる通知方法を用いた同期装置１０１１の第２の構成例を示している。図２０の同期装置１０１１は、図１１の同期装置１０１１において通知部１１０９を省略した構成を有する。この場合、制御部１１０５及びＤＥＭＵＸ１１０７が、図７の通知制御部７２３として動作する。
【０１１１】
ＤＥＭＵＸ１１０７は、演算結果のデータが最終データである場合、その演算結果のデータを、レジスタ１１０１−１〜レジスタ１１０１−Ｋのうち、入出力ＩＦとして用いられるｐ個のレジスタへ出力し、各レジスタは、演算結果のデータを記憶する。このとき、制御部１１０５は、それらのｐ個のレジスタのｒｅａｄｙを論理“１”に設定することで、リダクション演算の完了をノード装置９０１−ｉ内のｐ個のプロセスに一括して通知する。
【０１１２】
図２１は、レジスタによる通知方法においてレジスタ１１０１−ｋが記憶する情報の例を示している。入出力ＩＦ  ｆｌａｇ、宛先Ａ、宛先Ｂ、受信Ａ  ｍａｓｋ、受信Ｂ  ｍａｓｋ、送信Ａ  ｍａｓｋ、送信Ｂ  ｍａｓｋ、ｒｌｓ  ｒｅｓｏｕｒｃｅ  ｂｉｔｍａｐ、及びｒｅａｄｙについては、図１２に示した情報と同様である。また、ｒｅａｄｙフラグを生成するロック制御回路の構成は、図１６に示した構成と同様である。
【０１１３】
Ｄａｔａ  Ｂｕｆｆｅｒは、リダクション演算の入力データ、中間データ、又は最終データを表す情報である。レジスタ１１０１−ｋが入出力ＩＦとして用いられる場合、リダクション演算の開始時に、入力データがＤａｔａ  Ｂｕｆｆｅｒに格納され、リダクション演算が完了すると、最終データがＤａｔａ  Ｂｕｆｆｅｒに格納される。一方、レジスタ１１０１−ｋが中継ＩＦとして用いられる場合、Ｄａｔａ  Ｂｕｆｆｅｒには中間データが格納される。
【０１１４】
ノード装置９０１−ｉ内の各プロセスは、ポーリングによって、対応するレジスタのｒｅａｄｙの値を監視し、ｒｅａｄｙが論理“１”に変化すると、リダクション演算の完了を検出する。そして、各プロセスは、レジスタが記憶するＤａｔａ  Ｂｕｆｆｅｒを読み出すことによって、演算結果のデータを取得する。
【０１１５】
次に、図１４の処理フローにおいてレジスタによる通知方法を用いた場合の動作を説明する。この場合、レジスタ１ｅのデータは、ノード装置Ｎ０内のレジスタ０〜レジスタ３それぞれに書き込まれ、それらのレジスタのｒｅａｄｙが論理“１”に設定される。これにより、レジスタ０〜レジスタ３に対応する、ノード装置Ｎ０内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１１６】
レジスタ１ｅのデータは、ノード装置Ｎ１にも送信され、ノード装置Ｎ１内のレジスタ４〜レジスタ７それぞれに書き込まれ、それらのレジスタのｒｅａｄｙが論理“１”に設定される。これにより、レジスタ４〜レジスタ７に対応する、ノード装置Ｎ１内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１１７】
レジスタ１ｆのデータは、ノード装置Ｎ２内のレジスタ８〜レジスタｂそれぞれに書き込まれ、それらのレジスタのｒｅａｄｙが論理“１”に設定される。これにより、レジスタ８〜レジスタｂに対応する、ノード装置Ｎ２内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１１８】
レジスタ１ｆのデータは、ノード装置Ｎ３にも送信され、ノード装置Ｎ３内のレジスタｃ〜レジスタｆそれぞれに書き込まれ、それらのレジスタのｒｅａｄｙが論理“１”に設定される。これにより、レジスタｃ〜レジスタｆに対応する、ノード装置Ｎ３内のプロセス０〜プロセス３に、演算結果が一括して通知される。
【０１１９】
このようなレジスタによる通知方法によれば、リダクション資源であるレジスタ１１０１−ｋを通知先として利用することで、メモリ１００３内のアドレスを指定する情報が不要になり、レジスタ１１０１−ｋの情報量が削減される。また、同じノード装置内のｐ個のレジスタのｒｅａｄｙ及びＤａｔａ  Ｂｕｆｆｅｒが同時に書き換えられるため、通知処理に伴う同期ずれは、各プロセスによるポーリングに起因するものだけになる。
【０１２０】
図１及び図９の並列計算機システムの構成は一例に過ぎず、並列計算機システムに含まれるノード装置の台数及びノード装置間の接続形態は、並列計算機システムの用途又は条件に応じて変化する。
【０１２１】
図２及び図４のリダクション演算は一例に過ぎず、リダクション演算は、演算の種類及び入力データに応じて変化する。図３のプロセスは一例に過ぎず、ノード装置内のプロセスの個数は、並列計算機システムの用途又は条件に応じて変化する。図５、図６、図１４、図１５、及び図１９の処理フローは一例に過ぎず、リダクション演算の処理フローは、並列計算機システムの構成又は条件と各ノード装置内で生成されるプロセスの個数とに応じて変化する。
【０１２２】
図７及び図１０のノード装置の構成は一例に過ぎず、並列計算機システムの用途又は条件に応じて一部の構成要素を省略又は変更してもよい。図１１及び図２０の同期装置１０１１の構成は一例に過ぎず、並列計算機システムの用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
【０１２３】
図１６のロック制御回路１６０１の構成は一例に過ぎず、並列計算機システムの構成又は条件に応じて一部の構成要素を省略又は変更してもよい。図１１及び図２０のレジスタ１１０１−１〜レジスタ１１０１−Ｋの各々に対してロック制御回路１６０１を設けておき、それらのレジスタの中から、入出力ＩＦとして用いられるレジスタを選択することも可能である。
【０１２４】
図８のフローチャートは一例に過ぎず、並列計算機システムの構成又は条件に応じて一部の処理を省略又は変更してもよい。
【０１２５】
図１２、図１７、及び図２１のレジスタの情報は一例に過ぎず、並列計算機システムの構成又は条件に応じて一部の情報を省略又は変更してもよい。図１３及び図１８の書き込み要求は一例に過ぎず、並列計算機システムの構成又は条件に応じて一部の情報を省略又は変更してもよい。
【０１２６】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１２７】
図３乃至図２１を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
演算処理装置と同期装置とを備えるノード装置であって、
前記同期装置は、
前記演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する複数のレジスタと、
前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、前記リダクション演算の演算結果を生成するリダクション演算部と、
前記演算結果が生成されたとき、前記リダクション演算の完了を前記複数の処理単位に一括して通知する通知制御部と、
を含むことを特徴とするノード装置。
（付記２）
前記演算処理装置と前記同期装置とを備えるノード装置は、前記複数の処理単位によって共有される共有領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記共有領域のアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記共有領域のアドレスを用いて、前記演算結果を前記共有領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１記載のノード装置。
（付記３）
前記演算処理装置と前記同期装置とを備えるノード装置は、前記複数の処理単位それぞれによって使用される複数の領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記複数の領域それぞれのアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記複数の領域それぞれのアドレスを用いて、前記演算結果を前記複数の領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１記載のノード装置。
（付記４）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記同期装置は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定する制御部をさらに含むことを特徴とする付記１乃至３のいずれか１項に記載のノード装置。
（付記５）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記通知制御部は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記演算結果を前記複数のレジスタそれぞれに格納するとともに、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定することによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１記載のノード装置。
（付記６）
複数のノード装置を有する並列計算機システムであって、
前記複数のノード装置各々は演算処理装置と同期装置とを備え、
前記同期装置は、
前記演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを記憶する複数のレジスタと、
前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行って、前記リダクション演算の演算結果を生成するリダクション演算部と、
前記演算結果が生成されたとき、前記リダクション演算の完了を前記複数の処理単位に一括して通知する通知制御部と、
を含むことを特徴とする並列計算機システム。
（付記７）
前記複数のノード装置各々は、前記複数の処理単位によって共有される共有領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記共有領域のアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記共有領域のアドレスを用いて、前記演算結果を前記共有領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記６記載の並列計算機システム。
（付記８）
前記複数のノード装置各々は、前記複数の処理単位それぞれによって使用される複数の領域を含むメモリをさらに備え、
前記複数のレジスタのうちいずれかのレジスタは、前記複数の領域それぞれのアドレスをさらに記憶し、
前記通知制御部は、前記いずれかのレジスタが記憶する前記複数の領域それぞれのアドレスを用いて、前記演算結果を前記複数の領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記６記載の並列計算機システム。
（付記９）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記同期装置は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定する制御部をさらに含むことを特徴とする付記６乃至８のいずれか１項に記載の並列計算機システム。
（付記１０）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグをさらに記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記通知制御部は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記演算結果を前記複数のレジスタそれぞれに格納するとともに、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定することによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記６記載の並列計算機システム。
（付記１１）
複数のノード装置を有する並列計算機システムの制御方法であって、
前記複数のノード装置各々が有する演算処理装置によって生成されるとともに実行処理の単位となる複数の処理単位それぞれのデータを、前記複数のノード装置各々が有する同期装置内の複数のレジスタに格納し、
前記同期装置によって、前記複数の処理単位それぞれのデータと他のノード装置内で生成される処理単位のデータとに対するリダクション演算を行うことで、前記リダクション演算の演算結果を生成し、
前記演算結果が生成されたとき、前記同期装置によって、前記リダクション演算の完了を前記複数の処理単位に一括して通知する、
ことを特徴とする並列計算機システムの制御方法。
（付記１２）
前記複数のノード装置各々は、前記複数の処理単位によって共有される共有領域を含むメモリをさらに有し、
前記同期装置は、前記複数のレジスタのうちいずれかのレジスタが記憶する、前記共有領域のアドレスを用いて、前記演算結果を前記共有領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１１記載の並列計算機システムの制御方法。
（付記１３）
前記複数のノード装置各々は、前記複数の処理単位それぞれによって使用される複数の領域を含むメモリをさらに有し、
前記同期装置は、前記複数のレジスタのうちいずれかのレジスタが記憶する、前記複数の領域それぞれのアドレスを用いて、前記演算結果を前記複数の領域に書き込むことによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１１記載の並列計算機システムの制御方法。
（付記１４）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグを記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記リダクション演算が開始されたとき、前記同期装置によって、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、
前記演算結果が生成されたとき、前記同期装置によって、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定する、
ことを特徴とする付記１１乃至１３のいずれか１項に記載の並列計算機システムの制御方法。
（付記１５）
前記複数のレジスタ各々は、ロック状態又は解放状態のいずれかを示すフラグを記憶し、
前記ロック状態は、前記リダクション演算の実行中でレジスタが解放されていない状態を表し、前記解放状態は、前記リダクション演算が完了してレジスタが解放された状態を表し、
前記同期装置は、前記リダクション演算が開始されたとき、前記複数のレジスタそれぞれが記憶するフラグを前記ロック状態に設定し、前記演算結果が生成されたとき、前記演算結果を前記複数のレジスタそれぞれに格納するとともに、前記複数のレジスタそれぞれが記憶するフラグを前記解放状態に設定することによって、前記リダクション演算の完了を前記複数の処理単位に通知することを特徴とする付記１１記載の並列計算機システムの制御方法。
【符号の説明】
【０１２８】
１０１−１〜１０１−９  ノード装置
１０２  伝送路
７０１  ノード装置
７１１  演算処理装置
７１２  同期装置
７２１−０〜７２１−（ｐ−１）、１１０１−１〜１１０１−Ｋ  レジスタ
７２２  リダクション演算部
７２３  通知制御部
９０１−１〜９０１−Ｌ  ノード装置
９０２  通信ネットワーク
１００１  ＣＰＵ
１００２  ＭＡＣ
１００３  メモリ
１００４  通信装置
１０１１  同期装置
１１０２  受信部
１１０３  要求受付部
１１０４  ＭＵＸ
１１０５  制御部
１１０６  リダクション演算部
１１０７  ＤＥＭＵＸ
１１０８  送信部
１１０９  通知部
１５０１  共有領域
１６０１  ロック制御回路
１６１１  フリップフロップ回路
１６１２  否定回路
１６１３、１６１４−０〜１６１４−（ｐ−１）  論理積回路
１６１５  論理和回路
１９０１−０〜１９０１−３  領域
【図１】
2020017043.tif 000003
【図２】
2020017043.tif 000004
【図３】
2020017043.tif 000005
【図４】
2020017043.tif 000006
【図５】
2020017043.tif 000007
【図６】
2020017043.tif 000008
【図７】
2020017043.tif 000009
【図８】
2020017043.tif 000010
【図９】
2020017043.tif 000011
【図１０】
2020017043.tif 000012
【図１１】
2020017043.tif 000013
【図１２】
2020017043.tif 000014
【図１３】
2020017043.tif 000015
【図１４】
2020017043.tif 000016
【図１５】
2020017043.tif 000017
【図１６】
2020017043.tif 000018
【図１７】
2020017043.tif 000019
【図１８】
2020017043.tif 000020
【図１９】
2020017043.tif 000021
【図２０】
2020017043.tif 000022
【図２１】
2020017043.tif 000023