(57)【特許請求の範囲】
【請求項１】
受けるデータの待ち合わせを行ない、前記待ち合わせたデータが揃った場合にデータを送信することにより同期を行う同期装置をそれぞれ備えた複数のノードを有する並列計算機システムにおいて、
前記複数の同期装置の各々は、
前記複数の同期装置のうち、同期を行う２以上の同期装置からのデータをそれぞれ受信し、前記受信した２以上の同期装置からのデータから同期情報とレジスタ選択情報とを抽出する受信部と、
前記複数の同期装置のうち、同期を行う２以上の同期装置へのデータをそれぞれ送信する送信部と、
前記抽出した同期情報を保持する第１の受信状態レジスタと、
前記抽出した同期情報を保持する第２の受信状態レジスタと、
前記受信部が抽出した同期情報を、前記レジスタ選択情報に基づいて前記第１の受信状態レジスタと前記第２の受信状態レジスタに交互に保持するとともに、前記第１の受信状態レジスタ又は前記第２の受信状態レジスタのいずれかに前記２以上の同期装置からのデータから抽出された同期情報が揃った場合に、前記送信部が送信を行う２以上の同期装置がそれぞれ有する第１の受信状態レジスタと第２の受信状態レジスタに交互に保持させるレジスタ選択情報を含んだデータを前記送信部にそれぞれ送信させる制御部とを含む
ことを特徴とする並列計算機システム。
【請求項２】
前記同期装置の各々が有する受信部は、前記複数の同期装置のうち、自ノードを含む同期を行う２以上の同期装置からのデータをそれぞれ受信し、
前記同期装置の各々が有する送信部は、前記複数の同期装置のうち、自ノードを含む同期を行う２以上の同期装置へのデータをそれぞれ送信する
ことを特徴とする請求項１に記載の並列計算機システム。
【請求項３】
前記同期装置の各々は、更に、前記送信部と前記受信部を接続するループ経路を含み、
前記同期装置の各々が有する送信部は、前記自ノードへのデータを送信する場合、前記ループ経路を介してデータを送信する
ことを特徴とする請求項２に記載の並列計算機システム。
【請求項４】
前記同期装置の各々が有する受信部は、更に、前記受信した２以上の同期装置からのデータから演算対象データを抽出し、
前記同期装置の各々は、更に、前記抽出した演算対象データに対して演算を行い、演算結果データを出力するリダクション演算部を含み、
前記同期装置の各々が有する送信部は、更に、前記同期を行う２以上の同期装置へのデータに、前記演算結果データを含めてそれぞれ送信する
ことを特徴とする請求項１〜３のいずれか１項に記載の並列計算機システム。
【請求項５】
前記同期装置の各々が有する制御部は、前記第１の受信状態レジスタ又は前記第２の受信状態レジスタのいずれかに、前記同期を行う全ての同期装置からの同期情報を保持した場合に、前記同期を行う２以上の同期装置へのデータを前記送信部にそれぞれ送信させる
ことを特徴とする請求項１〜４のいずれか１項に記載の並列計算機システム。
【請求項６】
前記並列計算機システムは、前記複数の同期装置のうち同期を行う第１の複数の同期装置の組の各々に含まれる複数の同期装置の間で同期を行い、前記第１の複数の同期装置の組の各々に含まれる複数の同期装置の間で同期を完了した後、前記第１の複数の同期装置の組とは異なる第２の複数の同期装置の組の各々に含まれる複数の同期装置の間で同期を行う
ことを特徴とする請求項１〜５のいずれか１項に記載の並列計算機システム。
【請求項７】
並列計算機システムが有するノードにそれぞれ含まれる、受けるデータの待ち合わせを行ない、前記待ち合わせたデータが揃った場合にデータを送信することにより同期を行う複数の同期装置の各々において、
前記複数の同期装置のうち、同期を行う２以上の同期装置からのデータをそれぞれ受信し、前記受信した２以上の同期装置からのデータから同期情報とレジスタ選択情報とを抽出する受信部と、
前記複数の同期装置のうち、同期を行う２以上の同期装置へのデータをそれぞれ送信する送信部と、
前記抽出した同期情報を保持する第１の受信状態レジスタと、
前記抽出した同期情報を保持する第２の受信状態レジスタと、
前記受信部が抽出した同期情報を、前記レジスタ選択情報に基づいて前記第１の受信状態レジスタと前記第２の受信状態レジスタに交互に保持するとともに、前記第１の受信状態レジスタ又は前記第２の受信状態レジスタのいずれかに前記２以上の同期装置からのデータから抽出された同期情報が揃った場合に、前記送信部が送信を行う２以上の同期装置が各々有する第１の受信状態レジスタと第２の受信状態レジスタに交互に保持させるレジスタ選択情報を含んだデータを前記送信部にそれぞれ送信させる制御部を有する
ことを特徴とする同期装置。
【請求項８】
前記同期装置の各々が有する受信部は、前記複数の同期装置のうち、自ノードを含む同期を行う２以上の同期装置からのデータをそれぞれ受信し、
前記同期装置の各々が有する送信部は、前記複数の同期装置のうち、自ノードを含む同期を行う２以上の同期装置へのデータをそれぞれ送信する
ことを特徴とする請求項７に記載の同期装置。
【請求項９】
前記同期装置の各々は、更に、前記送信部と前記受信部を接続するループ経路を含み、
前記同期装置の各々が有する送信部は、前記複数の同期装置のうち、自ノードへのデータを送信する場合、前記ループ経路を介してデータを送信する
ことを特徴とする請求項８に記載の同期装置。
【請求項１０】
前記同期装置の各々が有する受信部は、更に、前記受信した２以上の同期装置からのデータから演算対象データを抽出し、
前記同期装置の各々は、更に、前記抽出した演算対象データに対して演算を行い、演算結果データを出力するリダクション演算部を含み、
前記同期装置の各々が有する送信部は、更に、前記同期を行う２以上の同期装置へのデータに、前記演算結果データを含めてそれぞれ送信する
ことを特徴とする請求項７〜９のいずれか１項に記載の同期装置。
【請求項１１】
前記同期装置の各々が有する制御部は、前記第１の受信状態レジスタ又は前記第２の受信状態レジスタのいずれかに、前記同期を行う全ての同期装置からの同期情報を全て保持した場合に、前記同期を行う２以上の同期装置へのデータを前記送信部にそれぞれ送信させる
ことを特徴とする請求項７〜１０のいずれか１項に記載の同期装置。
【請求項１２】
受けるデータの待ち合わせを行ない、前記待ち合わせたデータが揃った場合にデータを送信することにより同期を行う同期装置をそれぞれ備えた複数のノードを有する並列計算機システムの制御方法において、
前記複数の同期装置の各々が有する受信部が、前記複数の同期装置のうち、同期を行う２以上の同期装置からのデータをそれぞれ受信するステップと、
前記受信部が、前記受信した２以上の同期装置からのデータから同期情報とレジスタ選択情報とを抽出するステップと、
前記複数の同期装置の各々が有する制御部が、前記受信部が抽出した同期情報を、前記レジスタ選択情報に基づいて前記同期を行う２以上の同期装置からの同期情報を保持する第１の受信状態レジスタと前記同期を行う２以上の同期装置からの同期情報を保持する第２の受信状態レジスタに交互に保持するステップと、
前記制御部が、前記第１の受信状態レジスタ又は前記第２の受信状態レジスタのいずれかに前記２以上の同期装置からのデータから抽出された同期情報が揃った場合に、前記複数の同期装置のうち、前記同期を行う２以上の同期装置がそれぞれ有する第１の受信状態レジスタと第２の受信状態レジスタに交互に保持させるレジスタ選択情報を含んだデータを、前記複数の同期装置の各々が有する送信部にそれぞれ送信させるステップとを有する
ことを特徴とする並列計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機システム、同期装置、並列計算機システムの制御方法に関する。
【背景技術】
【０００２】
並列計算機システムにおいて、複数のノード間で並列処理されている複数のプロセス間の同期をとる方法として、バリア同期が知られている。バリア同期では同期を取るポイント、つまりバリアポイントがプロセスの処理の進行段階（ステージ）に応じて設定され、バリア同期を行なうプロセスはバリアポイントにプロセスの処理が到達した場合、プロセスの処理を一時的に停止することにより他のノードにおけるプロセスの処理の進行を待ち合わせる。バリア同期を行なうプロセスは、バリア同期を行なう、並列処理されている全てのプロセスがバリアポイントに到着した時点で、待ち合わせ状態を終了して停止した処理を再開する。これにより、複数のノード間で並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【０００３】
バリア同期装置においては、バリア同期を実行する際、アルゴリズムによっては、プロセスはバリアポイントに到着した旨の信号又はメッセージ（バリア同期メッセージ）の送信先をステージ毎に変更する必要がある。そこで、バリア同期における送信先変更処理をハードウェアによって実現するバリア同期装置が提案されている。このバリア同期装置によれば、ステージ毎のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の介在をなくし、バリア同期の高速化を実現することができる。更に、このバリア同期装置においては、複数組の信号の同期をとる同期部が設けられる。これにより、複数のノードをネットワークにより接続する場合においてノード間のネットワークの構成が限定されないようにして、高速でバリア同期を実行することができる。
【０００４】
なお、並列計算機を形成するためのルーティングコントローラ内に、バリア同期要求トリーにおける自身の位置に関する情報を記憶するためのレジスタを有し、それらのレジスタに設定された値に応じた制御を行うバリア同期制御部を設け、バリア同期制御部によって、自身の子孫に当たる各ルーティングコントローラに対応する全てのノードにおいてバリア同期の準備ができ、かつ、自ノードにおいてもバリア同期を行う準備が整ったときに、バリア同期要求メッセージが送出されるようにすることが提案されている。
【０００５】
また、プロセッサ間データ通信方法において、受信側のデータ受信領域の物理アドレスを通信開始以前に送信側に通知する機能、受信側でのダブル・バッファリングによりデータ受信領域へのオーバライトを抑止する機能、隣接ノードとの部分同期を連鎖的に行なうことによって、全ノードの自動的な同期をとる機能、データ受信領域に識別子を付与し、該識別子を通信開始以前に送信側に通知し、該識別子を付加してデータを送信し、受信側で2つの識別子を比較し、不一致ならば受信ノードのプロセッサへ割り込みを発生させる機能を備えることが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１２２８４８号公報
【特許文献２】特開平１０−０４９５０７号公報
【特許文献３】特開平０６−１１０８４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
並列計算機システムにおけるバリア同期装置においては、連続して複数のノード間のバリア同期を実行すると、先のバリア同期のプロセスに対するメッセージの待ち合わせ状態を後のバリア同期のプロセスに対するメッセージが送信されてしまうことにより、先のバリア同期のプロセスの待ち合わせ状態が解除されてしまう、換言すれば、プロセス間の同期が破壊してしまう可能性がある。従って、先のバリア同期のメッセージの待ち合わせ状態が破壊されないようにする必要がある。
【０００８】
例えば、先のバリア同期のリクエストから後のバリア同期のリクエストまでの間隔を、十分に長くすることが考えられる。又は、プロセス間のバリア同期が全てのノードについて完了している状態で、次のバリア同期をリクエストすることが考えられる。しかし、これらの場合、プロセス間のバリア同期が全てのノードについて完了している旨のバリア同期成立通知を最も早く受け取ったプロセスが次のバリアポイントに達しても、バリア同期をリクエストできない。このため、バリア同期処理を十分に高速化することができない。
【０００９】
一方、あるノードが他のノードにおけるバリア同期の成立を、バリア同期とは別の方法により確認することが考えられる。しかし、並列計算機システムにおける最も速い確認処理方法はバリア同期であるので、結局、バリア同期の確認のためのバリア同期をリクエストすることになる。換言すれば、成立を待っている第１のバリア同期の完了を知るために、第２のバリア同期をリクエストすることになる。この結果、バリア同期の２重の投入によるオーバーヘッドが発生することになる。
【００１０】
本発明は、バリア同期のメッセージの待ち合わせ状態の破壊を効率良く防止しつつ、高速でバリア同期処理を実行する並列計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
開示の並列計算機システムは、複数のノードを有する並列計算機システムである。複数のノードは、受けるデータの待ち合わせを行ない、待ち合わせたデータが揃った場合にデータを送信することにより同期を行う同期装置をそれぞれ備える。複数の同期装置の各々は、受信部と、送信部と、第１の受信状態レジスタと、第２の受信状態レジスタと、制御部とを含む。受信部は、複数の同期装置のうち、同期を行う２以上の同期装置からのデータをそれぞれ受信し、受信した２以上の同期装置からのデータから同期情報とレジスタ選択情報とを抽出する。送信部は、複数の同期装置のうち、同期を行う２以上の同期装置へのデータをそれぞれ送信する。第１の受信状態レジスタは、抽出した同期情報を保持する。第２の受信状態レジスタは、抽出した同期情報を保持する。制御部は、受信部が抽出した同期情報を、レジスタ選択情報に基づいて第１の受信状態レジスタと第２の受信状態レジスタに交互に保持するとともに、第１の受信状態レジスタ又は第２の受信状態レジスタのいずれかに２以上の同期装置からのデータから抽出された同期情報が揃った場合に、送信部が送信を行う２以上の同期装置がそれぞれ有する第１の受信状態レジスタと第２の受信状態レジスタに交互に保持させるレジスタ選択情報を含んだデータを送信部にそれぞれ送信させる。
【発明の効果】
【００１２】
開示の並列計算機システムによれば、バリア同期の２重の投入によるオーバーヘッドを回避し、バリア同期のメッセージの待ち合わせ状態の破壊を防止しつつ、高速でバリア同期処理を実行することができる。
【図面の簡単な説明】
【００１３】
【図１】並列計算機システムの構成の一例を示す図である。
【図２】バリア同期装置を含むノードの構成の一例を示す図である。
【図３】バリア同期装置の構成の一例を示す図である。
【図４】同期装置（同期部）の構成の一例を示す図である。
【図５】パケットのフォーマットを示す図である。
【図６】同期面選択情報の説明図である。
【図７】バリア同期実行時の処理フローチャートである。
【図８】バリア同期実行時の処理フローチャートである。
【図９】リダクション演算装置を含むノードの構成の一例を示す図である。
【図１０】リダクション演算装置の構成の一例を示す図である。
【図１１】演算装置（演算部）の構成の一例を示す図である。
【図１２】演算器の構成の一例を示す図である。
【図１３】リダクション演算実行時の処理フローチャートである。
【図１４】リダクション演算実行時の処理フローチャートである。
【図１５】バリア同期及びリダクション演算での信号の流れを示す図である。
【図１６】シーケンス番号とパケット数との整合性について示す図である。
【図１７】バリア同期及びリダクション演算での信号の流れを示す図である。
【図１８】バリア同期及びリダクション演算での信号の流れを示す図である。
【図１９】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２０】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２１】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２２】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２３】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２４】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２５】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２６】バリア同期及びリダクション演算での信号の流れを示す図である。
【図２７】バリア同期の概要を示す説明図である。
【図２８】４個のプロセスでのバタフライによるバリア同期の例を示す図である。
【図２９】バタフライによるバリア同期について検討した図である。
【図３０】バタフライによるバリア同期について検討した図である。
【図３１】リダクション演算の概要を示す説明図である。
【発明を実施するための形態】
【００１４】
最初に、バリア同期について簡単に説明する。バリア同期は、図２７に示すように、バリア同期を行なう複数のプロセス＃０〜＃３の各々は、その処理が同期をとるポイントつまりバリアポイントに到着した場合、自身の処理を停止する。即ち、複数のプロセス＃０〜＃３の各々は処理がバリアポイントに到達した場合、他のプロセスがバリアポイントに到着するのを待ち合わせる。複数のプロセス＃０〜＃３は、各々、バリア同期を行なう全てのプロセス＃０〜＃３がバリアポイントに到着した時点で、即ち、バリア同期が成立した時点で、待ち合わせ状態を解除し、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【００１５】
このようなバリア同期を実現するアルゴリズムの一つに、バタフライ演算がある。以下、バタフライ演算を単に「バタフライ」と称する。バタフライにおいては、処理を複数のステージに分割し、ステージ毎に他のプロセスとバリア同期メッセージの通信を行なう。この例においては、バリア同期のアルゴリズムとして、バタフライが用いられる。
【００１６】
図２８（Ａ）は、４個のプロセス＃０〜＃３の間において、バタフライによるバリア同期を行なう例を示す。図２８（Ａ）における個々のプロセスは、図２８（Ｂ）に示すように表される。図２８（Ｂ）において、左上の数字は送信元プロセスを表し、左下の数字は送信元プロセスを表し、中央の数字は自プロセスを表し、右上の数字は送信先プロセス又は宛先プロセスを表し、右下の数字は送信先プロセス又は宛先プロセスを表す。プロセスは、プロセスを識別する識別情報であるプロセス番号で表される。
【００１７】
各々のステージにおけるバリアポイントに到着した旨を表すバリア同期メッセージ（以下、単に「メッセージ」と省略する場合がある）の送信先は、ステージ番号をｋ、自プロセス又は自ノード１のプロセス番号をｉとすると、ｉ  ＸＯＲ  ２＾（ｋ−１）となる。ＸＯＲは、排他的論理和演算を表す。ステージ数は、プロセス数Ｎが２のべき乗のとき、ｌｏｇ（Ｎ）となる。
【００１８】
例えば、図２８（Ａ）において、プロセス＃０に着目すると、以下のようにメッセージの送信先が予め定められる。即ち、ステージ＃１において、バリアポイント到着を示すメッセージの送信先はプロセス＃１である。ステージ＃２において、プロセス＃０からのバリアポイント到着を示すメッセージの受信元はプロセス＃１であり、プロセス＃０からのバリアポイント到着を示すメッセージの送信先はプロセス＃２である。
【００１９】
これらの信号の送信先及び受信元は、設定条件において、バリア同期のアルゴリズム及び実行条件つまりプロセスの構成が定まることにより、一意に定めることができる。この例においては、バリア同期のアルゴリズムはバタフライであり、実行条件は４個のプロセスであるので、前述したように定めることができる。
【００２０】
各プロセスは、ステージ毎に他のプロセスとの間でバリアポイント到着の信号を通信し合う。例えば、最初のステージ＃１において、各プロセスは、バリア同期ポイントに到着する。到着のタイミングは、各プロセスで異なる。この場合、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに信号を送る。並列計算機は、バタフライによりバリア同期を行う。
【００２１】
次のステージ＃２において、各プロセスは、バタフライネットワークの前のステージ＃１の予め設定されたプロセスからの信号を待ち合わせる。各プロセスは、他のプロセスから信号を受信した場合、次のステージ＃３の予め設定されたプロセスに信号を送る。
【００２２】
最後のステージ＃３において、各プロセスは、前ステージ＃２の予め設定されたプロセスからの信号を待ち合わせる。各プロセスが他のプロセスからの信号を受けると、全てのプロセス＃０〜＃３がバリアポイントに到着した後にバリア同期が成立した事を知る。この後、各プロセスは、バリア同期が成立したので、次の処理を開始する。
【００２３】
しかし、並列計算機システムにおけるバタフライによるバリア同期装置において、連続してノード間のバリア同期を実行すると、先のバリア同期のプロセスに対するメッセージの待ち合わせ状態を後のバリア同期のプロセスに対するメッセージにより上書きしてしまう、換言すれば、先のバリア同期の待ち合わせ状態を破壊してしまう可能性がある。
【００２４】
例えば、図２９（Ａ）に示すように、４個のプロセス＃０〜＃３の各々が最初の処理を実行してバリアポイントに到達して、１回目のバリア同期のリクエストを出力する。これに応じて、図２９（Ｂ）に示すように、４個のプロセス＃０〜＃３の間でバリア同期のメッセージが送受信される。これにより、プロセス＃０及びプロセス＃２においては、ノード間での同期が成立してバリア同期完了が通知される。しかし、プロセス＃３のステージ＃２からのメッセージの通信が遅れたとする。換言すれば、プロセス＃３は、ステージ＃２の状態のまま、１回目のバリア同期のメッセージを保持した状態であると考えることができる。この遅れにより、プロセス＃１及びプロセス＃３においては、ノード間での同期が成立しないので、バリア同期完了が通知されない。
【００２５】
次に、図３０（Ａ）に示すように、プロセス＃０及びプロセス＃２は、次の処理を実行してバリアポイントに到達して、２回目のバリア同期のリクエストを出力する。しかし、この時点でも、１回目のバリア同期のリクエストに基づく、プロセス＃３のステージ＃２からのメッセージの通信が遅れているとする。
【００２６】
この結果、図３０（Ｂ）に示すように、プロセス＃２からのバリア同期のメッセージが、ステージ＃１において、自プロセス＃２とプロセス＃３とに送信される。これにより、プロセス＃３において、通信の遅れによりその時点で保持されていた１回目のバリア同期のメッセージが、新たに到達した２回目のバリア同期のメッセージにより破壊されてしまう。換言すれば、プロセス＃３において、１回目のバリア同期のメッセージを受信したという受信状態が、２回目のバリア同期のメッセージを受信したという受信状態に書き換えられてしまう。
【００２７】
開示の並列計算機システム、同期装置、並列計算機システムの制御方法は、バリア同期の２重の投入によるオーバーヘッドを回避し、バリア同期のメッセージの待ち合わせ状態の破壊を防止しつつ、高速でバリア同期処理を実行する。
【００２８】
図１は、バリア同期装置を含むノードを複数有するコンピュータネットワーク、換言すれば、並列計算機システムの構成の一例を示す。
【００２９】
並列計算機システムは、複数のノードつまりコンピュータ１と、これらのノードを接続するネットワーク２とを含む。図１の例においては、４個のノード＃０〜ノード＃３が並列計算機システムに設けられる。複数のノード１は、例えば、相互結合網であるネットワーク２を介して、相互に接続される。ネットワーク２により接続された複数のノード１は、並列演算を実行する。複数のノード１は、各々、並列演算におけるバリア同期のために、バリア同期装置６を含む。換言すれば、並列計算機システムは、複数のバリア同期装置６を含む。バリア同期装置６は高速でバリア同期を行う。
【００３０】
図１の並列計算機システムは、複数のノード１が相互に接続される一例として、ノード＃０が、ノード＃１〜ノード＃３の各々と接続された状態を示す。また、図１においては、個々のノード１が、ＣＰＵ３とバリア同期装置６とを含むことを、模式的に表している。
【００３１】
図２は、バタフライによりバリア同期を行うバリア同期装置を含むノードの構成の一例を示す。
【００３２】
ノード１は、ＣＰＵ３と、メモリ４と、システム制御部５と、バリア同期装置６と、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）インタフェース部７と、ネットワークインタフェース部９とを含む。システム制御部５はノード１を制御する。即ち、システム制御部５は、ＣＰＵ３、メモリ４、バリア同期装置６、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）装置１１を制御する。ＣＰＵ３は、設定処理部３１を含む。システム制御部５は、ＩＯインタフェース部７を介して、ＩＯ装置１１に接続される。ＩＯインタフェース部７は、システム制御部５に設けられるようにしても良い。バリア同期装置６は、ネットワークインタフェース部９を介して、ネットワーク２に接続される。ネットワークインタフェース部９は、バリア同期装置６に設けられるようにしても良い。
【００３３】
設定処理部３１は、システム制御部５及びＩＯインタフェース部７を介して、ＩＯ装置１１との間において、必要なデータの送受信を行う。これにより、ＩＯ装置１１は、バリア同期のアルゴリズムと実行条件とを含む設定条件を、ＣＰＵ３の設定処理部３１に入力する。また、ＩＯ装置１１は、必要に応じて、設定処理部３１から出力されたデータを出力する。
【００３４】
設定処理部３１は、システム制御部５を介して、バリア同期装置６に対してバリアポイント到達のメッセージを送信し、また、バリア同期装置６からバリア同期成立のメッセージを受信する。これにより、設定処理部３１は、ＩＯ装置１１から入力された設定条件に従って、バリア同期装置６における第１のバリア同期メッセージの送信先及び第２のバリア同期メッセージの送信先を、バリア同期装置６に設定する。バリア同期装置６は、設定条件に従って、ネットワーク２及びネットワークインタフェース部９を介して、他ノード１のバリア同期装置６との間で通信を行ない、当該通信に基づいて、バリア同期を行なう。
【００３５】
バリア同期装置６は、バタフライによるバリア同期を実行する。換言すれば、バリア同期装置６は、受けるデータの待ち合わせを行ない、前記待ち合わせたデータが揃った場合にデータを送信することにより同期を行う。具体的には、図１の並列計算機システムにおいて、複数のバリア同期装置６のうち、同期を行う第１の複数のバリア同期装置６の組の各々の間で、同期が実行される。更に、第１の複数の同期装置の組の各々の間で同期を完了した後、第１の複数の同期装置の組とは異なる第２の複数のバリア同期装置６の組の各々の間で、同期が実行される。
【００３６】
設定処理部３１は、システム制御部５を介して、メモリ４との間において、必要なデータの送受信を行う。これにより、設定処理部３１は、メモリ４にデータを書き込み、また、設定処理部３１はメモリ４からデータを読み出す。このデータは、例えば、後述するリダクション演算に用いられるデータである。
【００３７】
図３は、バリア同期装置の構成の一例を示す。図４は、図３のバリア同期装置が含む同期装置（同期部）の構成の一例を示す。
【００３８】
バリア同期装置６は、受信装置６１と、同期装置６２と、送信装置６３と、ループ経路６５とを含む。従って、並列計算機システムは、複数の同期装置６２を含む。同期装置６２は、バリア同期装置６の主要部であるが、バリア同期装置６と区別するために、以下の説明においては、「同期部６２」と言うこととする。
【００３９】
同期部６２は、図３に示すように、２個の同期資源６２０を含む。２個の同期資源６２０は、具体的には後述するように、２個のシグナル受信状態レジスタ６２３である。２個のシグナル受信状態レジスタ６２３は、第１面シグナル受信状態レジスタ６２３１と第２面シグナル受信状態レジスタ６２３２とを含み、複数の同期装置レジスタ部６２２の各々に設けられる。例えば、同期資源＃０は第１面シグナル受信状態レジスタ６２３１であり、同期資源＃１は第２面シグナル受信状態レジスタ６２３２である。
【００４０】
なお、図３は、同期部６２が２個の同期資源６２０を含むことを、模式的に表している。２個の同期資源６２０は、実際には、図４に示すように、複数の同期装置レジスタ部６２２の各々に設けられる２個のレジスタである。
【００４１】
同期部６２は、図４に示すように、制御部６２１と、複数の同期装置レジスタ部６２２とを含む。制御部６２１は、チェック回路６２１１、シーケンス回路６２１２、レジスタアクセス制御回路６２１３を含む。複数の同期装置レジスタ部６２２は、各々、後述するように、複数のレジスタを含むレジスタ群である。なお、以下の説明において、同期装置レジスタ部６２２を「レジスタ部６２２」と言うこととする。
【００４２】
複数のレジスタ部６２２は、例えば、ｎ個の同期メッセージの組＃０〜＃ｎ−１に対応するように、ｎ個設けられる。換言すれば、１個のレジスタ部６２２は、１個のプロセスの１個のステージに対応する。複数のレジスタ部６２２を含むことにより、各々の演算毎に同期メッセージをレジスタ部６２２に保持し、バリア同期を実行することが可能となる。従って、１組の演算がｎ個の第１の同期メッセージで構成される場合、同期部６２は、各々がｎ個の第１の同期メッセージで構成される複数の組について、各々、バリア同期を実行する。この場合、１個のノード１上で複数のプロセスが動作する。
【００４３】
図２の例においては、１個のノード１上で複数のプロセスが動作し、また、１組の演算が実行され、この１組の演算についてバリア同期を実行することができる。また、図２の例においては、１個のノード１上で複数のプロセスが動作する実施態様に代えて、１個のノード１上で１個のプロセスを動作させることができる。この場合、プロセスとノード１とは同様に取り扱っても良い。
【００４４】
図２の例においては、各々のレジスタ部６２２は、図４に示すように、２個のシグナル受信状態レジスタ６２３と、１個の設定情報レジスタ６２４とを含む。１個の設定情報レジスタ６２４は、実際には、複数のレジスタを含むレジスタ群である。なお、以下の説明において、シグナル受信状態レジスタ６２３を「受信状態レジスタ６２３」と言うこととする。
【００４５】
受信状態レジスタ６２３は、２個のレジスタ、換言すれば、第１面シグナル受信状態レジスタ６２３１と第２面シグナル受信状態レジスタ６２３２とを含む。受信状態レジスタ６２３は、同期のために用いられる資源である同期資源６２０である。受信状態レジスタ６２３は２個のレジスタを含むので、１個のプロセスの１個のステージ毎に２面の同期資源６２０が設けられる。２面の同期資源６２０を含むことにより、バリア同期のメッセージの待ち合わせ状態、換言すれば、同期情報の破壊を防止しつつ、高速でバリア同期処理を実行することができる。
【００４６】
第１面シグナル受信状態レジスタ６２３１は、第１の同期資源６２０であり、同期を行う２以上のバリア同期装置６からの同期情報を保持する第１の受信状態レジスタである。同期情報は、プロセス又はノードから同期メッセージを受信したか否かを示す情報であり、また、同期メッセージの待ち合わせ状況を示す情報である。第２面シグナル受信状態レジスタ６２３２は、第２の同期資源６２０であり、同期を行う２以上のバリア同期装置６からの同期メッセージに基づく同期情報を保持する第２の受信状態レジスタである。
【００４７】
制御部６２１は、受信装置６１部が抽出した同期情報を、レジスタ選択情報に基づいて、第１面シグナル受信状態レジスタ６２３１又は第２面シグナル受信状態レジスタ６２３２に、交互に保持させる。制御部６２１は、第１面シグナル受信状態レジスタ６２３１又は第２面シグナル受信状態レジスタ６２３２のいずれかに、同期を行う２以上のバリア同期装置６からの同期メッセージに基づく同期情報を全て保持した場合に、同期を行う２以上のバリア同期装置６へのデータを送信部６３にそれぞれ送信させる。換言すれば、制御部６２１は、第１面シグナル受信状態レジスタ６２３１又は第２面シグナル受信状態レジスタ６２３２のいずれかに２以上の同期装置からのデータから抽出された同期情報が揃った場合に、送信装置６３が送信を行うデータであって、２以上の同期装置がそれぞれ有する第１面シグナル受信状態レジスタ６２３１又は第２面シグナル受信状態レジスタ６２３２に交互に保持させるレジスタ選択情報を含んだデータを、送信装置６３にそれぞれ送信させる。
【００４８】
制御部６２１は、チェック回路６２１１により、各プロセスが受信したパケットの整合性のチェック処理を実行する。チェック回路６２１１は、送信装置６１からの同期面選択情報、同期信号及び宛先情報を取り込んで、これらに基づいて、パケットの整合性のチェック処理を実行する。チェック回路６２１１は、パケットの整合性のチェック結果を、シーケンス回路６２１２に入力する。
【００４９】
例えば、チェック回路６２１１は、同期面選択情報、同期メッセージ及び宛先情報に基づいて、受信したパケットのシーケンス番号とプロセス（換言すれば、プロセスの処理が位置するステージ）のシーケンス番号とを求め、両者の差分値を求め、求めた差分値とそのプロセス（換言すれば、プロセスの処理が位置するステージ）が受信したパケットの数とを比較する。パケットの整合性のチェック処理については後述する。パケットの整合性のチェック処理の結果、シーケンス番号とパケット数とが整合する場合にのみ、実際に、同期面選択情報に基づいて２個の受信状態レジスタ６２３の一方が選択される。
【００５０】
制御部６２１は、シーケンス回路６２１２により、バリア同期のメッセージ、換言すれば、バリア同期のための同期信号の送信指示を送信装置６３へ出力する。これにより、送信装置６３は、バリア同期のメッセージを、例えば他のノード１へ送信する。シーケンス回路６２１２は、レジスタアクセス制御回路６２１３によるレジスタ部６２２の参照結果と、ＣＰＵ３からのバリア発行指示とを取り込んで、両者に基づいて、バリア同期のメッセージの送信指示を送信装置６３へ出力し、バリア同期の成立通知をＣＰＵ３へ送信する。
【００５１】
制御部６２１は、レジスタアクセス制御回路６２１３により、レジスタ部６２２の設定情報レジスタ６２４に設定情報を設定する。設定情報は、ライトデータとしてＣＰＵ３の設定処理部３１から入力される。設定情報を設定するレジスタ部６２２は、ライトアドレスを含むライト制御信号としてＣＰＵ３の設定処理部３１から入力される。
【００５２】
制御部６２１は、レジスタアクセス制御回路６２１３により、レジスタ部６２２を参照して、その参照結果に基づいて、バリア同期のための同期メッセージを送信する。同期信号の送信は、実際には、シーケンス回路６２１２の指示により、送信装置６３が行う。レジスタ部６２２において、２個の受信状態レジスタ６２３は、各々、レジスタ部６２２に対応するプロセス又はノードから同期メッセージを受信したか否かを示す情報を格納する。換言すれば、２個の受信状態レジスタ６２３は、各々、同期メッセージの待ち合わせ状況を示す情報を格納する。設定情報レジスタ６２４は、レジスタ部６２２が同期メッセージを送信する宛先であるプロセス又はノードを示す情報を含む設定情報を格納する。換言すれば、設定情報レジスタ６２４は、同期成立の後に同期メッセージの送信先を示す情報を格納する。
【００５３】
同期情報は、同期メッセージに含まれる同期信号に基づいて定まる同期の状態を示す情報であり、２個の受信状態レジスタ６２３に保持される情報である。同期メッセージに含まれる同期信号は、バリア同期のメッセージに含まれる情報であって、図５を参照して後述するように、例えば、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号である。同期信号は、バリア同期のメッセージに含まれた形態で送受信される。従って、同期信号の送受信を行うことは、同期信号を含むバリア同期のメッセージの送受信を行うことである。バリア同期のメッセージに含まれた同期信号は、バリア同期のメッセージから抽出される。
【００５４】
設定情報レジスタ６２４は、設定情報を格納する。具体的には、設定情報レジスタ６２４は、「宛先ノードアドレス」「宛先ステージ番号」「送信元ノードアドレス」「送信元ステージ番号」「シーケンス番号（換言すれば、面選択番号）」を含む設定情報を格納する。シーケンス番号が、２個の受信状態レジスタ６２３のいずれか一方を選択するためのレジスタ選択情報である。宛先ノードアドレス等については、図５を参照して後述する。設定情報を指定することにより、１個のノードにおける１個のレジスタ部６２２が定まる。
【００５５】
設定情報レジスタ６２４は、同期信号の送信先が自ノード１である場合、自プロセス又は自ノード１の同期部６２のレジスタ部６２２を指定する設定情報を格納する。
【００５６】
バリア同期の実行に先立って、ＩＯ装置１１から設定処理部３１に、設定条件が入力される。この例においては、設定条件において、バリア同期のアルゴリズムはバタフライ演算によるアルゴリズムとされ、実行条件は例えば４個のプロセスとされる。これに加えて、実行条件として、当該演算つまりバリア同期におけるステージ数ｋと、各々のプロセス自身つまり自ノード１のプロセス番号ｉも入力される。ステージ数ｋはステージ番号の最大値を示している。
【００５７】
なお、設定処理部３１への設定条件の入力は、これに限られない。例えば、いずれか１個のノード１が、ネットワーク２を介して、他ノード１に各々の設定条件を入力するようにしても良い。また、ネットワーク２に接続された管理用のコンピュータが、ネットワーク２を介して、全てのノード１に各々の設定条件を入力するようにしても良い。
【００５８】
また、バリア同期の実行に先立って、ＣＰＵ３の設定処理部３１は、制御部６２１を介して、レジスタ部６２２に、設定条件に基づいて、前述の設定情報を設定する。前述したように、設定条件は、バリア同期のアルゴリズムと実行条件とを含む。
【００５９】
この設定の後、設定処理部３１が、制御部６２１にバリア同期開始信号を送信することにより、バリア同期が開始される。プロセスの最後のステージにおいて同期が成立した場合、同期部６２は、バリア同期成立、つまりバリア同期完了を示す信号を設定処理部３１に送る。
【００６０】
受信装置６１は、ネットワーク２及びネットワークインタフェース部９を介して他ノード１と接続される受信部である。受信装置６１は、並列計算機システムにおける複数のバリア同期装置６のうち、同期を行う２以上のバリア同期装置６からのパケットを各々受信し、受信した２以上のバリア同期装置からのパケットから同期情報とレジスタ選択情報とを抽出する。同期を行う２以上のバリア同期装置６には、自ノード１のバリア同期装置６が含まれる。従って、受信装置６１は、複数のバリア同期装置６のうち、自ノード１を含む同期を行う２以上の同期装置からのパケットを各々受信する場合がある。
【００６１】
具体的には、受信装置６１は、他ノード１又は自ノード１からのバリア同期のためのパケット、換言すれば、バリア同期のためのデータを受信する。受信装置６１は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を受信した場合、受信した第１の同期信号を同期部６２に送信する。このため、受信装置６１は、ネットワーク２を介して、他ノード１のバリア同期装置６から、バリア同期のためのパケットを受信する。
【００６２】
また、受信装置６１は、自ノード１のバリア同期装置６の送信装置６３から、バリア同期のためのパケット、換言すれば、バリア同期のためのデータを受信する。この場合、バリア同期のためのパケットは、図３に点線で示すループ経路６５を介して、送受信される。ループ経路６５は、自ノード１内に設けられ、送信装置６３と受信装置６１とを接続する。
【００６３】
パケットを受信した場合、受信装置６１は、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報を生成して、同期部６２に送信する。具体的には、受信装置６１は、受信したパケットに含まれる同期面選択情報、同期信号及び宛先情報を取り出し、同期部６２に送信する。同期面選択情報、同期信号及び宛先情報については、図５を参照して後述する。
【００６４】
なお、送信元のノードが複数存在する場合において、受信装置６１が送信元となるノード１の数に対応した数だけのネットワークインタフェース部９を含む場合、複数の受信装置６１を用いて複数のノードから送信されるパケットを同時に受信することができる。これは送信装置６３においても同様である。
【００６５】
図５は、パケットのフォーマットを示す図である。
【００６６】
プロセス＃０〜プロセス＃３の間において相互に送受信されるパケットは、例えば、図５に示すようなフォーマットを有する。パケットは、例えば、ヘッダＣＲＣ（Ｃｙｃｌｉｃ Ｒｅｄｕｎｄａｎｃｙ Ｃｈｅｃｋ）、ルーティングヘッダ、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号、パケットＣＲＣ（Ｃｙｃｌｉｃ Ｒｅｄｕｎｄａｎｃｙ Ｃｈｅｃｋ）を含む。同期面選択情報は、例えばシーケンス番号の一部である。パケットに含まれる同期信号は、例えば、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号である。宛先情報は、例えば、宛先ノードアドレス、宛先ステージ番号である。
【００６７】
ヘッダＣＲＣは、ルーティングヘッダ用の誤り検出符号である。
【００６８】
ルーティングヘッダは、ルータが、パケットの送信において、次の宛先を決定するための情報である。ルータは、ネットワーク２において、パケットの転送を実行するネットワークインタフェースに含まれる中継装置である。
【００６９】
タイプは、パケットのタイプを示す情報である。換言すれば、タイプは、バリアを示すタイプであって、例えば、パケットがバリア同期のメッセージであることを示す。
【００７０】
宛先ノードアドレスは、パケットの宛先ノード１のネットワーク２上のアドレスを示す。バリア同期装置が、各ステージでバリアパケットを送信する際に、バリア同期装置の設定情報レジスタに予め設定されている宛先ノードアドレスをパケットに埋め込む。
【００７１】
送信元ノードアドレスは、パケットの送信元ノード１のネットワーク２上のアドレスを示す。バリア同期装置が、各ステージでバリアパケットを送信する際に、自ノードアドレスをパケットに埋め込む。パケットを受信したバリア同期装置（の制御部）が、本フィールドの値と、バリア同期装置の設定情報レジスタに予め設定されている送信元ノードアドレスとを比較して、パケットの受信可/不可の判定に使用される。
【００７２】
送信元ステージ番号は、パケット送信元ノード１のバリア同期装置でのステージ番号である。バリア同期装置が、各ステージでバリアパケットを送信する際に、ステージ番号を送信元ステージ番号としてパケットに埋め込む。パケットを受信したバリア同期装置（の制御部）が、本フィールドの値と、バリア同期装置の設定情報レジスタに予め設定されている送信元ステージ番号とを比較して、パケットの受信可/不可の判定に使用される。
【００７３】
送信先ステージ番号は、パケット送信先ノードバリア同期装置でのステージ番号を示す。バリア同期装置が、各ステージでバリア同期メッセージに対応するバリアパケットを送信する際に、バリア同期装置の設定情報レジスタに予め設定されている宛先ステージ番号をパケットに埋め込む。パケットを受信したバリア同期装置（の制御部）が、本フィールドの値を参照して、設定情報レジスタの選択（ステージ選択）に使用される。
【００７４】
シーケンス番号は、バリア同期装置が各ステージでバリア同期メッセージに対応するバリアパケットを送信する際に付加する番号である。シーケンス番号の一部が、図６に示すように、同期面選択情報として使用される。
【００７５】
パケットＣＲＣは、パケット全体の誤り検出符号である。
【００７６】
図６は、同期面選択情報の説明図である。
【００７７】
同期面選択情報は、シーケンス番号に含まれる。換言すれば、シーケンス番号の最下位の１ビットが同期面選択情報として用いられる。具体的には、パケットがバリア同期のメッセージである場合において、シーケンス番号の最下位の１ビットが「０」である場合、同期信号、換言すれば、バリア同期のメッセージは、第１面シグナル受信状態レジスタ６２３１宛ての同期信号である。パケットがバリア同期のメッセージである場合において、シーケンス番号の最下位の１ビットが「１」である場合、同期信号、換言すれば、バリア同期のメッセージは、第２面シグナル受信状態レジスタ６２３２宛ての同期信号である。
【００７８】
図３及び図４に戻って、同期部６２は、受信装置６１からの同期面選択情報、同期信号及び宛先情報に基づいて、バリア同期の処理を行なう。このために、同期部６２は、複数組のバリア同期のメッセージの待ち合わせを行ない、各組で同期成立の後、同期信号としてのバリア同期のメッセージを宛先情報により指定された送信先に送信する。これにより、バリア同期を行なうアルゴリズムにおいて、ステージ毎にバリアポイント到着の信号の送信先を変更する処理を高速に行なうことができる。バリア同期のメッセージの各組に対しては、一意に定まる設定情報が割り当てられる。同期部６２は、同期信号としてのバリア同期のメッセージと設定情報の双方を受信装置６１から受信し、同期が成立した組について、対応するバリア同期のメッセージを送信装置６３に出力する。
【００７９】
例えば、同期部６２は、各々のバリア同期のメッセージの組について、設定条件に従って予め設定されたｎ（ｎは正の整数）個の第１のバリア同期のメッセージについての同期を取る。各組において、ｎ個のバリア同期のメッセージが入力された場合、同期成立となる。同期部６２は、同期成立の後に、第２のバリア同期のメッセージの送信を送信装置６３に指示する。第２のバリア同期のメッセージは、ｍ（ｍは正の整数）個とされ、各々について設定条件に従ってその送信先が予め設定される。
【００８０】
同期が成立した場合、同期部６２は、各組について、予め設定された送信先にバリア同期のメッセージを送信する。送信先は、他ノード１の同期部６２、又は、自ノード１の同期部６２である。バリア同期のメッセージの送信先が他ノード１である場合、送信先ノード１の宛先ノードアドレスを含む設定情報が同期部６２に予め設定されている。この場合、同期部６２は、送信装置６３にパケットの送信指示の信号を送る。同期部６２からのパケット送信指示を受けた送信装置６３は、ネットワーク２を介して、宛先ノードアドレスで指定される他ノード１のバリア同期装置６に、バリア同期のためのパケットを送信する。一方、バリア同期のメッセージの送信先が自ノードである場合、同期部６２には設定情報が予め設定されている。同期部６２は、自プロセス又は自ノード１の同期部６２の指定されたレジスタ部６２２にバリア同期のメッセージを送信する。
【００８１】
なお、同期部６２は、ＣＰＵ３の設定処理部３１からバリア同期開始の信号を受信した場合、指定された送信先に対してバリア同期のメッセージを送る。同期部６２は、バリア同期のメッセージの最後の組で同期が成立した場合、バリア同期完了の信号をＣＰＵ３の設定処理部３１に通知する。
【００８２】
送信装置６３は、ネットワーク２及びネットワークインタフェース部９を介して他ノード１と接続される送信部である。送信装置６３は、並列計算機システムにおける複数のバリア同期装置６のうち、同期を行う２以上のバリア同期装置６へのデータをそれぞれ送信する。同期を行う２以上のバリア同期装置６には、自ノード１のバリア同期装置６が含まれる。従って、送信装置６３は、複数のバリア同期装置６のうち、自ノード１を含む同期を行う２以上の同期装置へのデータをそれぞれ送信する場合がある。
【００８３】
具体的には、送信装置６３は、他ノード１又は自ノード１へのバリア同期のためのパケット、換言すれば、バリア同期のためのデータを送信する。送信装置６３は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１のバリア同期のメッセージを送信した場合、送信した第１のバリア同期のメッセージを同期部６２に送信する。このため、送信装置６３は、ネットワーク２を介して、他ノード１のバリア同期装置６へ、バリア同期のためのパケットを送信する。
【００８４】
また、送信装置６３は、自ノード１のバリア同期装置６の送信装置６３へ、バリア同期のためのパケット、換言すれば、バリア同期のためのデータを送信する。この場合、バリア同期のためのパケットは、前述したように、図３に点線で示すループ経路６５を介して、送受信される。従って、送信装置６３は、自ノード１へのデータを送信する場合、ループ経路６５を介してデータを送信する。
【００８５】
送信装置６３は、同期部６２からの送信の指示を受信した場合、予め設定されたｍ個の送信先に、第２のバリア同期のメッセージを送信する。このため、送信装置６３は、同期部６２からパケット送信指示の信号を受け取り、指定された送信先に基づいて、パケットを生成して、ネットワーク２を介して、他ノード１に送信する。前述したように、送信先となるノード１は、設定情報に基づいて定められる。
【００８６】
図７及び図８は、一体となって、図１〜図３のバリア同期装置を含む並列計算機システムが実行する、バタフライによるバリア同期処理の処理フローを示す。
【００８７】
ＣＰＵ３内に設定された設定処理部３１は、バリア同期を開始する前に、バリア同期のアルゴリズムと設定条件とに基づいて、レジスタ部６２２の役割を決定し、各々のレジスタ部６２２の設定情報レジスタ６２４に、バタフライでの次ステージに対応した設定情報を設定する（ステップＳ１１）。
【００８８】
このために、設定処理部３１は、設定情報を設定すべきレジスタ部６２２を示す情報を、ライトアドレスとして同期部６２に入力する。また、設定処理部３１は、レジスタ部６２２の設定情報レジスタ６２４に設定すべき設定情報を、ライトデータとして同期部６２の制御部６２１に入力する。ライトアドレス及びライトデータは、レジスタ部６２２毎に入力される。これに応じて、制御部６２１は、入力されたライトデータである設定情報を、ライトアドレスにより指定されたレジスタ部６２２の設定情報レジスタ６２４に格納する。ライトデータの格納は、実際には、設定処理部３１からのライトアドレス及びライトデータを受信した制御部６２１により実行される。一方、これとは別に、２個の受信状態レジスタ６２３の初期値は、例えば予め「０」とされる。
【００８９】
設定情報の設定は、例えば以下のように行われる。ノード数が２のべき乗である場合、バタフライにおいては、同期成立の後、自プロセス又は自ノード１の次ステージと、他ノード１での次ステージの２箇所に対して、バリア同期のメッセージが送信される。従って、設定情報レジスタ６２４に指定する宛先情報は、自プロセス又は自ノード１の設定情報、又は、他ノード１の設定情報のいずれかである。
【００９０】
最初のステージにおいては、信号の待ち合わせを行なわないので、受信状態レジスタ６２３は使用しない。一方、最後のステージにおいては、設定情報レジスタ６２４は使用しない。従って、最初のステージと最後のステージにおいて、使用するレジスタは重複しない。そのため、最初のステージと最後のステージにおいて同一のレジスタ部６２２が指定される。例えば、後述する図１５〜図２６に示す例のように、最初のステージと最後のステージにおいて、同一の設定情報レジスタ６２４が指定される。
【００９１】
最初のステージと最後のステージにおいて使用するレジスタが重複しない場合でも、最初と最後のステージにおいて異なるレジスタ部６２２が指定されるようにしても良い。例えば、レジスタ部６２２の数が十分大きい場合、最後のステージにおいて、最初のステージと異なる設定情報レジスタ６２４が指定されるようにしても良い。
【００９２】
なお、ノード数が２のべき乗でない場合、ノード数を２のべき乗にするためにネットワーク２に追加される追加ノードが持つレジスタ部６２２を、他ノード１に持たせるようにしても良い。例えば、３個のノード＃１〜＃３でバリア同期を取りたい場合は、ノード１の持つレジスタ部６２２をノード＃１〜＃３のいずれかに持たせる。この場合、必要となるのは中継ステージに相当するレジスタ部６２２のみであるので、中継ステージに相当するレジスタ部６２２をノード＃１〜＃３のいずれかのノードに持たせる。更に、最初のステージにおいて、レジスタ部６２２の送信先の受信状態レジスタ６２３の値を予め「１」に設定する。最後のステージにおいて、レジスタ部６２２の送信元の設定情報レジスタ６２４から最初のステージのレジスタ部６２２を外す。
【００９３】
ＣＰＵ３は、プロセスがバリアポイントに到達した場合、バリア同期装置６の同期部６２に対しバリア同期開始の信号、換言すれば、同期信号を含むバリア同期のメッセージを送る（ステップＳ１２）。バリア同期開始の信号は、同期信号を含むバリア同期のメッセージ、換言すれば、バリア同期発行指示である。バリア同期開始信号は最初のステージに対応するレジスタ部６２２の番号を含む。これにより、あるノード１において、バリア同期開始信号は、ある１個のレジスタ部６２２を指定する。最初のステージにおいては、他のプロセスからパケットを受信することは無いので、受信装置６１から同期信号及び宛先情報が制御部６２１に送信されることも無い。
【００９４】
同期部６２の制御部６２１は、バリア同期開始信号を受信すると、バリア同期開始信号にて指定された番号に対応するレジスタ部６２２の設定情報レジスタ６２４の値を読む（ステップＳ１３）。この読取のために、制御部６２１は、バリア同期開始信号にて指定された設定情報をリードアドレスとして用いて、当該アドレスのレジスタ部６２２の設定情報レジスタ６２４の値をリードデータとして読み出す。最初のステージに対応するレジスタ部６２２の受信状態レジスタ６２３は使用されず、従って、バリア同期のメッセージの待ち合せも行われない。例えば、あるノード１において、ある１個のレジスタ部６２２の設定情報レジスタ６２４の値は、他ノード１であるノード＃２のある１個のレジスタ部６２２の設定情報レジスタ６２４の値及び自ノード１であるノード＃１のある１個のレジスタ部６２２の設定情報レジスタ６２４の値と同一の値を示す。
【００９５】
制御部６２１は、バリア同期開始信号のシーケンス番号の最下位の１ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「０」又は「１」のいずれであるか調べる（ステップＳ１４）。
【００９６】
同期面選択情報の値が「０」である場合、制御部６２１は、設定情報レジスタ６２４の値の中の他ノード１のレジスタ部６２２を指定する値に基づいて、送信装置６３に対しパケット送信指示の信号を出す（ステップＳ１５）。パケット送信指示は、他ノード１を指示する設定情報レジスタ６２４の値を含む。送信装置６３は、制御部６２１からのパケット送信指示で指定された宛先ノードアドレスを含む設定情報に基づいて、パケットを生成し、パケットをネットワーク２へ送信する。このパケットの送信先は、指定された宛先ノードアドレスである。これにより、パケットは、例えば、他ノード１のある１個のレジスタ部６２２を宛先として、あるノード１から他ノード１へ送信される。
【００９７】
また、送信装置６３は、設定情報レジスタ６２４の値の中の自ノード１のレジスタ部６２２を指定する値に基づいて、ループ経路６５を経由してパケットを送信する。パケットを受信した受信装置６１は、受信したパケットに基づいて、同期面選択情報、同期信号、宛先情報となる設定情報を取り出して、同期部６２の制御部６２１に送る。制御部６２１は指定されたレジスタ部６２２の同期資源＃０の受信状態レジスタ６２３の値を読む（ステップＳ１５）。具体的には、同期面選択情報の値「０」に対応する第１面シグナル受信状態レジスタ６２３１の値が読み出される。
【００９８】
同期面選択情報の値が「１」である場合、制御部６２１は、設定情報レジスタ６２４の値の中の他ノード１のレジスタ部６２２を指定する値に基づいて、送信装置６３に対しパケット送信指示の信号を出す（ステップＳ１６）。送信装置６３は、制御部６２１からのパケット送信指示で指定された宛先ノードアドレスを含む設定情報に基づいて、パケットを生成し、パケットをネットワーク２へ送信する。
【００９９】
また、送信装置６３は、設定情報レジスタ６２４の値の中の自ノード１のレジスタ部６２２を指定する値に基づいて、ループ経路６５を経由してパケットを送信する。パケットを受信した受信装置６１は、受信したパケットに基づいて、同期面選択情報、同期信号、宛先情報となる設定情報を取り出して、同期部６２の制御部６２１に送る。制御部６２１は指定されたレジスタ部６２２の同期資源＃１の受信状態レジスタ６２３の値を読む（ステップＳ１６）。具体的には、同期面選択情報の値「１」に対応する第２面シグナル受信状態レジスタ６２３２の値が読み出される。
【０１００】
続いて、同期部６２が、次ステージの受信状態レジスタ６２３に同期状態を示す「１」が設定されているか否かを調べる（ステップＳ１７）。受信状態レジスタ６２３に「１」が設定されている場合（ステップＳ１７  Ｙｅｓ）、同期成立となる。一方、受信状態レジスタ６２３に「１」が設定されていない場合（ステップＳ１７  Ｎｏ）、同期は成立していない。
【０１０１】
同期が成立していない場合（ステップＳ１７  Ｎｏ）、制御部６２１は、バリア同期開始信号のシーケンス番号の最下位の１ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「０」又は「１」のいずれであるか調べる（ステップＳ１８）。
【０１０２】
同期面選択情報の値が「０」である場合、制御部６２１は、設定情報レジスタ６２４において指定された次ステージのレジスタ部６２２における同期資源＃０である、第１面シグナル受信状態レジスタ６２３１に「１」を書き込む（ステップＳ１９）。同期面選択情報の値が「１」である場合、制御部６２１は、設定情報レジスタ６２４において指定された次ステージのレジスタ部６２２における、同期資源＃１である第２面シグナル受信状態レジスタ６２３２に「１」を書き込む（ステップＳ１１０）。
【０１０３】
ステップＳ１９及びＳ１１０において、制御部６２１は、読み出した設定情報レジスタ６２４の値の中の自ノード１を指定する値をライトアドレスとして用いて、当該アドレスのレジスタ部６２２の受信状態レジスタ６２３に「１」をライトデータとして書き込む。これにより、ノード１において、ある１個のレジスタ部６２２の２個の受信状態レジスタ６２３のいずれか一方の値は、「１」とされる。これにより、待ち合わせすべきバリア同期のメッセージの一方を受信したことが示される。
【０１０４】
この後、同期部６２が、パケットの受信を待ち合わせ、受信装置６１がパケットを受信した場合、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報となる設定情報を取り出し、同期部６２に送信する（ステップＳ１１１）。
【０１０５】
同期部６２の制御部６２１は、受信装置６１からの信号を受信した場合、指定されたレジスタ部６２２の設定情報レジスタ６２４の値を読み取り（ステップＳ１１２）、ステップＳ１４を繰り返す。ステップＳ１１２において、制御部６２１は、指定された設定情報をリードアドレスとして用いて、当該アドレスのレジスタ部６２２の設定情報レジスタ６２４の値を、リードデータとして読み出す。
【０１０６】
一方、ステップＳ１７において受信状態レジスタ６２３に「１」が設定されている場合、換言すれば、同期が成立している場合（ステップＳ１７  Ｙｅｓ）、制御部６２１は、更に、レジスタ部６２２が最後のステージに対応したものか否かを調べる（ステップＳ１１３）。例えば、あるノード１のあるレジスタ部６２２において、ステップＳ１９又はＳ１１０の実行の後は、２個の受信状態レジスタ６２３の一方の値は「１」である。従って、ステップＳ１９又はＳ１１０の実行の後に再度ステップＳ１７を実行した場合、同期が成立する。
【０１０７】
最後のステージに対応するレジスタ部６２２で同期が成立した場合（ステップＳ１１３  Ｙｅｓ）、制御部６２１は、バリア同期成立の信号をＣＰＵ３に送る（ステップＳ１１４）。ＣＰＵ３は、制御部６２１からのバリア同期成立の信号を受け取り、バリア同期成立を知る（ステップＳ１１５）。
【０１０８】
また、ステップＳ１１３においてレジスタ部６２２が最後のステージに対応したものでない場合（ステップＳ１１３  Ｎｏ）、制御部６２１は、ステップＳ１７において読んだ受信状態レジスタ６２３の属するレジスタ部６２２の設定情報レジスタ６２４の値を読み（ステップＳ１１６）、ステップＳ１４を繰り返す。
【０１０９】
次に、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置を含む並列計算機について説明する。
【０１１０】
最初に、図３１を参照して、リダクション演算について簡単に説明する。リダクション演算は、図２８（Ａ）に示すバタフライによるバリア同期を利用して実行される。従って、図３１（Ａ）は、基本的には、図２８（Ａ）と同様の処理の流れを示す。換言すれば、図３１（Ａ）は、４個のプロセス＃０〜＃３の間において、バタフライによるバリア同期を利用してリダクション演算を行なう例を示す。
【０１１１】
図３１（Ａ）における個々のプロセスは、図３１（Ｂ）に示すように表される。図３１（Ｂ）は、基本的には図２８（Ｂ）と同様の記号を表すが、さらに、リダクション演算の演算途中データを含む点のみが図２８（Ｂ）と異なる。図３１（Ｂ）において、中央の自プロセスを表すプロセス番号の下部に、演算途中データが示される。バリアポイント到着時のデータ及びバリア同期成立時のデータも、演算途中データとして表される。
【０１１２】
例えば、最初のステージ＃１において、各プロセスは、バリア同期ポイントに到着する。この後、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに、バリアポイント到着の信号と、演算途中データとを送る。
【０１１３】
次のステージ＃２において、各プロセスは、前のステージ＃１の予め設定されたプロセスからのバリアポイント到着の信号と、演算途中データとを受信する。この後、各プロセスは、受信した演算途中データを用いてリダクション演算を実行し、次のステージ＃３の予め設定されたプロセスに、バリアポイント到着の信号と、リダクション演算により算出した演算途中データとを送る。
【０１１４】
最後のステージ＃３において、各プロセスは、前ステージ＃２の予め設定されたプロセスからのバリアポイント到着の信号と、演算途中データとを待ち合わせる。この後、各プロセスが他のプロセスからのバリアポイント到着の信号と、演算途中データとを受信すると、受信した演算途中データを用いてリダクション演算を実行する。全てのプロセス＃０〜＃３がバリアポイントに到着した後にバリア同期が成立し、リダクション演算が完了する。
【０１１５】
次に、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置について説明する。
【０１１６】
図９は、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置を含むノードの構成の一例を示す。図１０は、図９のリダクション演算装置の構成の一例を示す。図１１は、図１０のリダクション演算装置の演算装置（演算部）の構成の一例を示す図である。図１２は、図１０のリダクション演算部が含む演算器の構成の一例を示す。
【０１１７】
図９のリダクション演算装置８は、図１に示す並列計算機システムを構成するノード１に設けられる。図９の例において、ノード１は、図２に示すノード１のバリア同期装置６を、リダクション演算装置８で置き換えた構成を含む。即ち、図９の例のノード１は、バリア同期装置６以外は、図２に示すノード１と同様の構成を含む。以下、図２〜図４にも示される要素については、図示又は説明を省略する場合がある。
【０１１８】
リダクション演算装置８は、バリア同期を取りつつリダクション演算を行う。リダクション演算装置８は、受信装置８１と、同期装置８２と、送信装置８３と、演算装置８４と、ループ経路８５とを含む。同期装置８２は、制御部８２１と、同期装置レジスタ部８２２とを含む。演算装置８４は、演算回路８４０、入力データレジスタ８４１、出力データレジスタ８４７を含む。演算回路８４０は、セレクタ８４２、セレクタ８４３、記憶部８４４、演算部８４５、デマルチプレクサ（ＤＭＵＸ）８４６を含む。なお、以下の説明において、同期装置８２を「同期部８２」と言い、同期装置レジスタ部８２２を「レジスタ部８２２」と言い、演算装置８４を「演算部８４」と言うこととする。
【０１１９】
リダクション演算装置８は、演算部８４を含む以外は、バリア同期装置６と同様の構成を含む。演算部８４を含むので、リダクション演算装置８は、バリア同期開始の信号に代えてリダクション演算開始の信号を入力され、また、バリア同期成立の信号に代えてリダクション演算完了の信号を出力する。
【０１２０】
また、演算部８４を含むので、リダクション演算装置８は、ネットワーク２との間で、パケットの送受信に加えて、データの送受信も行い、また、ＣＰＵ３の設定処理部３１との間で、制御信号に加えて、データの送受信も行う。
【０１２１】
また、演算部８４を含むので、リダクション演算装置８は、リダクション演算の対象データを外部から入力され、また、リダクション演算の結果を外部に出力する。具体的には、受信装置８１は、受信した２以上の同期装置からのデータから演算対象データを抽出し、演算部８４に入力する。演算部８４は、抽出された演算対象データに対して演算を行い、演算結果データを送信装置８３へ出力する。送信装置８３は、同期を行う２以上の同期装置へのデータに、演算結果データを含めてそれぞれ送信する。
【０１２２】
同期部８２は、図１０に示すように、２個の同期資源８２０を含む。２個の同期資源８２０は、２個のシグナル受信状態レジスタ８２３である。２個のシグナル受信状態レジスタ８２３は、第１面シグナル受信状態レジスタ８２３１と第２面シグナル受信状態レジスタ８２３２とを含み、複数のレジスタ部８２２の各々に設けられる。例えば、同期資源＃０は第１面シグナル受信状態レジスタ８２３１であり、同期資源＃１は第２面シグナル受信状態レジスタ８２３２である。
【０１２３】
なお、図１０は、同期部８２が２個の同期資源８２０を含むことを、模式的に表している。２個の同期資源８２０は、実際には、図１１に示すように、複数のレジスタ部８２２の各々に設けられる２個のレジスタである。また、図１１は、各々のレジスタ部８２２が、第１面シグナル受信状態レジスタ８２３１及び第２面シグナル受信状態レジスタ８２３２を含む受信状態レジスタ８２３と、設定情報レジスタ８２４を含むことを、模式的に表している。換言すれば、レジスタ部８２２は、図４のレジスタ部６２２と同様の構成を有する。
【０１２４】
リダクション演算の第１の対象データは、ＣＰＵ３の設定処理部３１から、ライトデータとして入力データレジスタ８４１に入力され、リードデータとして入力データレジスタ８４１からセレクタ８４２に入力される。リダクション演算の第２の対象データは、ネットワーク２から受信装置８１を介してパケットとして入力され、パケットから取出されて、セレクタ８４２に入力される。
【０１２５】
一方、リダクション演算の結果は、デマルチプレクサ８４６から、ライトデータとして出力データレジスタ８４７に出力され、リードデータとして出力データレジスタ８４７から設定処理部３１に出力される。また、リダクション演算の結果は、デマルチプレクサ８４６から送信装置８３に出力され、送信装置８３からネットワーク２へパケットとして送信される。
【０１２６】
入力データレジスタ８４１及び出力データレジスタ８４７は、複数設けられる。入力データレジスタ８４１は、各々、レジスタ部８２２と対応する。出力データレジスタ８４７も同様である。
【０１２７】
ライトデータを書き込むべき入力データレジスタ８４１は、設定処理部３１からライトアドレスにより指定される。リードデータを読み出すべき入力データレジスタ８４１は、制御部８２１からリードアドレスにより指定される。入力データレジスタ８４１のリードアドレスは、例えば受信装置８１が受信したパケットにおける宛先情報が指示するレジスタ部８２２に対応し、指示されたレジスタ部８２２の設定情報に基づいて生成される。ライトデータを書き込むべき出力データレジスタ８４７は、制御部８２１からライトアドレスにより指定される。出力データレジスタ８４７のライトアドレスは、ライトデータのリダクション演算に用いられるレジスタ部８２２に対応し、指示されたレジスタ部８２２の設定情報に基づいて生成される。リードデータを読み出すべき出力データレジスタ８４７は、設定処理部３１からリードアドレスにより指定される。
【０１２８】
リダクション演算を実行するために、設定処理部３１は、ＩＯ装置１１から入力された設定条件に従って、リダクション演算装置８における第１のバリア同期のメッセージの送信先及び第２のバリア同期のメッセージの送信先を、リダクション演算装置８に設定する。
【０１２９】
また、設定処理部３１は、システム制御部５を介して、リダクション演算の開始時にリダクション演算装置８に対して演算対象のデータを送信し、また、リダクション演算装置８からリダクション演算結果を受信する。リダクション演算装置８は、ネットワーク２を介して、他ノード１のリダクション演算装置との間で通信を行ない、当該通信に基づいて、リダクション演算を行なう。
【０１３０】
更に、リダクション演算を実行するために、リダクション演算装置８が含む同期部８２は、同期成立の後に、第２のバリア同期のメッセージの送信を送信装置８３に指示（「送信指示」として図示）すると共に、予め定められたリダクション演算を演算部８４に指示する。また、送信装置８３は、第２のバリア同期のメッセージ送信の指示を受信した場合、第２のバリア同期のメッセージと共に、演算部８４５におけるリダクション演算の結果を設定処理部３１に送信する。
【０１３１】
また、同期部８２の制御部８２１は、演算種類情報を保持する。演算種類情報は、演算部８４５におけるリダクション演算の制御のために、演算の種類を示す情報である。演算種類情報は、ＣＰＵ３から入力データレジスタを介して制御部８２１に入力される。演算種類情報も、設定条件の一部として、ＩＯ装置１１から入力される。
【０１３２】
ここで、リダクション演算について簡単に説明する。リダクション演算は、前述したように、バリア同期と同一のアルゴリズムを用いて実行することができる。即ち、リダクション演算は、バタフライによるバリア同期を実行するバタフライネットワークにより実行することができる。
【０１３３】
従って、リダクション演算は、図２７及び図２８に示すように、処理を複数のステージに分割し、各プロセスはステージ毎に他のプロセスと信号の通信を行なう。１個のノード上で１個のプロセスが動作する場合、プロセスとノードとは同様に取り扱っても良い。各ステージにおけるプロセスの処理及び送信先は、基本的に、バリア同期と同じである。
【０１３４】
リダクション演算は、図３１（Ａ）に示すように、最初のステージ＃１においては、各プロセスは、演算の対象となるデータを次のステージ＃２のプロセスに送信する。ステージ＃２において各プロセスは、前のステージ＃１のプロセスからのデータを受信した場合、例えば、自身が持っているデータとの加算を行い、演算結果を次のステージ＃３のプロセスに送信する。最後のステージ＃３において各プロセスは、前のステージ＃２のプロセスからデータを受信した場合、例えば、受信したデータと前のステージ＃２での自身の演算結果との加算を行う。この加算の結果が、総和演算の結果となる。
【０１３５】
なお、リダクション演算の他の実現方法として、特定のプロセスにデータを送信し、演算を行わせる方法がある。この方法においては、全てのプロセスが演算結果を持つには、特定のプロセスを実行するノードから他のプロセスを実行する他のノードへのブロードキャストが必要となる。バタフライネットワークによるリダクション演算によれば、ブロードキャストは必要ない。
【０１３６】
図９の例におけるリダクション演算は、以下のように行われる。
【０１３７】
設定処理部３１は、バリア同期装置６と同様にして、同期部８２におけるリダクション演算の各組に対応するレジスタ部８２２に、設定条件に基づいて、設定情報を設定する。この後、設定処理部３１は、入力データ及びリダクション同期開始信号を演算部８４に送信する。これにより、演算部８４によるリダクション演算が開始される。最後のステージに対応したレジスタ部８２２において同期が成立した場合、リダクション演算装置８は、演算結果とリダクション演算完了の信号とを、設定処理部３１に送る。
【０１３８】
受信装置８１はネットワーク２を介してパケットを受信し、受信したパケットに基づいて、同期信号及び宛先情報を同期部８２に送信し、パケットとして受信したデータを演算部８４に送信する。
【０１３９】
演算部８４において、入力データレジスタ８４１は、ＣＰＵ３から送信されたリダクション演算の対象である入力データ（図１０において「入力データ」として図示）を一時格納し、制御部８２１からの指示に応じて、格納したデータを「リードデータ」としてセレクタ８４２を介して、記憶部８４４に入力する。ＣＰＵ３からのデータは、前述したように、リダクション演算の開始時に入力される。
【０１４０】
記憶部８４４は、入力データレジスタ８４１を介して入力されたデータを記憶する。これにより、記憶部８４４は、リダクション演算中のデータを保持する。記憶部８４４の記憶容量は、例えば、（レジスタ部８２２の数）×（データのビット数）とされる。リダクション演算中のデータを保持すべき記憶部８４４のアドレスは、制御部８２１からライトアドレスにより指定される。記憶部８４４のライトアドレスは、当該リダクション演算に用いられるレジスタ部８２２に対応し、当該レジスタ部８２２の設定情報に基づいて生成される。
【０１４１】
記憶部８４４に格納されたリダクション演算中のデータは、制御部８２１からリードアドレスを指定することにより、読み出されて演算部８４５に入力される。記憶部８４４のリードアドレスは、当該リダクション演算に用いられるレジスタ部８２２に対応し、当該レジスタ部８２２の設定情報に基づいて生成される。
【０１４２】
セレクタ８４２は、制御部８２１からの入力部選択の指示に従って、入力データレジスタ８４１からのデータ、又は、受信装置１からのデータを選択して、セレクタ８４３を介して、記憶部８４４又は演算部８４５に入力する。入力部選択の指示は、受信装置８１から同期信号及び宛先情報が入力された場合には、受信装置８１のデータをセレクタ８４２に出力するようにされ、これ以外の場合には、入力データレジスタ８４１のリードデータをセレクタ８４２に出力するようにされる。
【０１４３】
セレクタ８４３は、制御部８２１からの入出力部選択の指示に従って、セレクタ８４２又は演算部８４５からの入力を、記憶部８４４又は演算部８４５に入力する。入出力部選択の指示は、セレクタ８４２からデータが入力された場合には、セレクタ８４２のデータを入力するようにされ、これ以外の場合には、演算部８４５のデータを入力するようにされる。また、入出力部選択の指示は、同期が成立した場合には、入力されたデータを演算部８４５に出力するようにされ、これ以外の場合には、入力されたデータを記憶部８４４に出力するようにされる。
【０１４４】
演算部８４５は、同期が成立した場合、記憶部８４４で待ち合わせているデータと、セレクタ８４２を介して入力するパケットからのデータ又は先の演算結果とについて、所定の演算を行なう。即ち、演算部８４５は、同期部８２の制御部８２１からの指示を受信した場合、記憶部８４４に記憶されたデータを用いて、リダクション演算を行う。具体的には、演算部８４５は、制御部８２１からの演算指示に従って、所定の演算を実行して、その結果を、デマルチプレクサ８４６に入力すると共に、セレクタ８４３に入力する。
【０１４５】
演算部８４５は、図１２に示すように、演算ユニット８４５１〜８４５４と、マルチプレクサ８４５５とを含む。加算部（ＡＤＤ）８４５１、最小値算出部（ＭＩＮ）８４５２、最大値算出部（ＭＡＸ）８４５３、論理和演算部（Ｌｏｇｉｃａｌ）８４５４が、演算ユニットを構成する。演算ユニット８４５１〜８４５４は、各々、予め定められた演算を実行する。
【０１４６】
演算部８４５は、記憶部８４４から入力するデータつまり第１データと、入力データレジスタ８４１から入力するデータ、受信装置８１が受信したパケットからのデータ又は演算部８４５が前ステージで行なった演算結果つまり第２データとの間で、指示された種類の演算を行なう。演算ユニット８４５１〜８４５４は、第１データ及び第２データを入力されて、これらについての演算を行い、演算結果をマルチプレクサ８４５５に出力する。演算種類情報は、制御部８２１からの演算指示により指示される。この演算指示は、演算の種類を示す演算種類情報に基づいて、制御部８２１により生成される。マルチプレクサ８４５５は、演算指示に従って、演算ユニット８４５１〜８４５４での演算結果のいずれかを選択して出力する。
【０１４７】
デマルチプレクサ８４６は、出力部選択を指示する制御部８２１からの制御に従って、演算部８４５からの入力を、出力データレジスタ８４７又は送信装置８３に入力する。出力部選択の指示は、リダクション演算が完了する以前には、演算部８４５からのデータを送信装置８３に出力するようにされ、これ以外の場合には、出力データレジスタ８４７に出力するようにされる。
【０１４８】
出力データレジスタ８４７は、リダクション演算の結果を、ＣＰＵ３に出力する。出力データレジスタ８４７から出力されるリダクション演算結果は、リダクション演算完了時にＣＰＵ３に入力される。
【０１４９】
送信装置８３は、演算回路８４０のデマルチプレクサ８４６から演算結果を受信し、制御部８２１から送信指示を受信した場合、これらに基づいて、生成したパケットをネットワーク２へ送信する。
【０１５０】
同期部８２は、バリア同期装置６の同期部６２と同様にして、ステージ毎に演算の中間結果の送信先を変更する処理を行う。同期部８２の制御部８２１は、バリア同期のメッセージ及び設定情報を受信装置８１から受信した場合、受信した設定情報に対応するレジスタ部８２２にバリア同期のメッセージを送る。
【０１５１】
制御部８２１は、同期が成立した場合、送信装置８３へバリア同期のメッセージの送信指示を出す。バリア同期のメッセージの送信指示は、図１０では「送信指示」と示す。この時、制御部８２１は、自プロセス又は自ノード１の同期部８２内の指定されたレジスタ部８２２にバリア同期のメッセージを送信することに加えて、演算部８４を制御する。即ち、制御部８２１は、演算部８４に入力されているデータと、記憶部８４４で待ち合わせているデータとの間で、リダクション演算を行なわせる。一方、同期が成立していない場合、制御部８２１は、データを記憶部８４４に保持させる。
【０１５２】
自プロセス又は自ノード１の同期部８２の指定されたレジスタ部８２２にバリア同期のメッセージを送信した場合において、同期が成立した場合、制御部８２１は、更に、演算結果と記憶部８４４で待ち合わせているデータとの演算を繰り返すよう演算部８４を制御する。一方、同期が成立しない場合、制御部８２１は、演算結果を記憶部８４４に送信する。
【０１５３】
制御部８２１は、設定処理部３１からリダクション演算開始の信号を受け取ると、指定された組つまりレジスタ部８２２の送信先に、バリア同期のメッセージと設定処理部３１から入力されたデータとを送信する。この後、最後の組で同期が成立した場合、制御部８２１は、演算結果とリダクション演算完了の信号とを、設定処理部３１に送信する。
【０１５４】
図１３は、図９のリダクション演算装置８が実行する、バタフライによるバリア同期を行いつつリダクション演算を行う処理の処理フローを示す。
【０１５５】
このリダクション演算はバリア同期を利用する。従って、図１３の処理フローは、リダクション演算対象のデータの送受信処理（ステップＳ２２）及びリダクション演算処理（ステップＳ２１４）以外は、図７の処理フローとほぼ同一である。従って、ステップＳ２２及びＳ２１４以外については、簡単に説明する。
【０１５６】
ＣＰＵ３の設定処理部３１は、バリア同期を利用したリダクション演算を開始する前に、バリア同期を利用したリダクション演算のアルゴリズムと設定条件とに基づいて、レジスタ部８２２の役割を決定し、各々のレジスタ部８２２の設定情報レジスタ８２４に、バタフライでの次ステージに対応した設定情報を設定する（ステップＳ２１）。
【０１５７】
ＣＰＵ３は、リダクション演算を開始するため、リダクション演算の入力データ、換言すれば、リダクションデータと、演算種類情報とを入力データレジスタへ送信する（ステップＳ２２）。入力データレジスタ８４１は、リダクションデータをセレクタ８４２へ入力し、演算種類情報を制御部８２１へ入力する。
【０１５８】
ＣＰＵ３は、プロセスがバリアポイントに到達した場合、同期部８２に対しリダクション演算開始の信号、換言すれば、同期信号を含むリダクション演算のメッセージを送る（ステップＳ２３）。リダクション演算開始信号は、入力レジスタ番号と、最初のステージに対応した設定情報とを含む。
【０１５９】
同期部８２の制御部８２１は、リダクション演算開始信号を受信すると、リダクション演算開始信号にて指定された番号に対応するレジスタ部８２２の設定情報レジスタ８２４の値を読む（ステップＳ２４）。
【０１６０】
制御部８２１は、リダクション演算開始信号のシーケンス番号の最下位の１ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「０」又は「１」のいずれであるか調べる（ステップＳ２５）。
【０１６１】
同期面選択情報の値が「０」である場合、制御部８２１は、設定情報レジスタ８２４の値の中の他ノード１のレジスタ部８２２を指定する値に基づいて、送信装置８３に対しパケット送信指示の信号を出す（ステップＳ２６）。また、送信装置８３は、設定情報レジスタ８２４の値の中の自ノード１のレジスタ部８２２を指定する値に基づいて、設定情報レジスタ８２４において指定されたレジスタ部８２２の同期資源＃０である、第１面シグナル受信状態レジスタ８２３１の値を読む（ステップＳ２６）。
【０１６２】
同期面選択情報の値が「１」である場合、制御部８２１は、設定情報レジスタ８２４の値の中の他ノード１のレジスタ部８２２を指定する値に基づいて、送信装置８３に対しパケット送信指示の信号を出す（ステップＳ２７）。また、送信装置８３は、設定情報レジスタ８２４の値の中の自ノード１のレジスタ部８２２を指定する値に基づいて、設定情報レジスタ８２４において指定された次ステージのレジスタ部８２２における同期資源＃１である、第２面シグナル受信状態レジスタ８２３２の値を読む（ステップＳ２７）。
【０１６３】
続いて、同期部８２が、次ステージの受信状態レジスタ８２３に同期状態を示す「１」が設定されているか否かを調べる（ステップＳ２８）。受信状態レジスタ８２３に「１」が設定されている場合（ステップＳ２８  Ｙｅｓ）、同期成立となる。一方、受信状態レジスタ８２３に「１」が設定されていない場合（ステップＳ２８  Ｎｏ）、同期は成立していない。
【０１６４】
同期が成立していない場合（ステップＳ２８  Ｎｏ）、制御部８２１は、リダクション演算開始信号のシーケンス番号の最下位の１ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「０」又は「１」のいずれであるか調べる（ステップＳ２９）。
【０１６５】
同期面選択情報の値が「０」である場合、制御部８２１は、設定情報レジスタ８２４において指定された次ステージのレジスタ部８２２における同期資源＃０の受信状態レジスタ８２３に「１」を書き込む（ステップＳ２１０）。同期面選択情報の値が「１」である場合、制御部８２１は、設定情報レジスタ８２４において指定された次ステージのレジスタ部８２２における同期資源＃１の受信状態レジスタ８２３に「１」を書き込む（ステップＳ２１１）。
【０１６６】
この後、同期部８２が、パケットの受信を待ち合わせ、受信装置８１がパケットを受信した場合、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報となる設定情報を取り出し、同期部８２に送信する（ステップＳ２１２）。
【０１６７】
同期部８２の制御部８２１は、受信装置８１からの信号を受信した場合、指定されたレジスタ部８２２の設定情報レジスタ８２４の値を読み取り（ステップＳ２１３）、ステップＳ２５を繰り返す。
【０１６８】
一方、ステップＳ２８において受信状態レジスタ８２３に「１」が設定されている場合、換言すれば、同期が成立している場合（ステップＳ２８  Ｙｅｓ）、演算回路８４０がリダクション演算を行なう（ステップＳ２１４）。演算対象となるデータは、レジスタ部８２２が最初のステージの次ステージに対応している場合には入力データレジスタの値である。また、レジスタ部８２２がそれ以降のステージに対応しており、同期成立の要因がパケットからの同期信号である場合には、演算対象となるデータはパケットに含まれるデータである。受信した同期信号が自プロセス又は自ノード１の同期装置からのバリア同期のメッセージである場合、前ステージにおける演算結果と、同期が成立したレジスタ部８２２に対応する記憶部８４４内のアドレスに格納するデータとの間で演算を行なう。受信した情報が演算結果の場合は、入力データレジスタから制御部８２１に入力された演算種類情報に基づいて、演算の種類が指定される。
【０１６９】
この後、制御部８２１は、更に、レジスタ部８２２がバリアネットワークにおける最後のステージに対応したものか否かを調べる（ステップＳ２１５）。最後のステージに対応するレジスタ部８２２で同期が成立した場合（ステップＳ２１５  Ｙｅｓ）、制御部８２１は、リダクション演算の結果を出力データレジスタに出力し、リダクション演算完了の信号をＣＰＵ３に送る（ステップＳ２１６）。ＣＰＵ３は、制御部８２１からのリダクション演算完了の信号を受け取り、リダクション演算完了を知る（ステップＳ２１７）。
【０１７０】
また、ステップＳ２１５においてレジスタ部８２２が最後のステージに対応したものでない場合（ステップＳ２１５  Ｎｏ）、制御部８２１は、ステップＳ２６又はＳ２７において読んだ受信状態レジスタ８２３の属するレジスタ部８２２の設定情報レジスタ８２４の値を読み（ステップＳ２１８）、ステップＳ２５を繰り返す。
【０１７１】
図１５〜図２６は、図７のバタフライによるバリア同期処理及びこれを利用したリダクション演算処理における各ステージ間でのバリア同期のメッセージの流れを示す。
【０１７２】
図１５〜図２６は、３個のプロセス＃０、＃１、＃２の間において、バタフライによるバリア同期が行われる場合について示し、また、バタフライによるバリア同期を利用したリダクション演算が行われる場合について示す。更に、図１５〜図２６から判るように、始点のステージ及び終点のステージとして、同一のレジスタ部６２２が用いられる。従って、始点のステージ及び終点のステージが、図１７（Ａ）等に示すように「始点・終点ステージ」と表される。また、始点・終点のステージ以外のステージは、図１７（Ａ）等に示すように「中継ステージ」と表される。なお、図１５のみにおいて、３個のプロセス＃０、＃１、＃２を点線で囲んで示す。
【０１７３】
ここで、プロセス＃０の中継ステージとしてステージ＃５８が使用され、プロセス＃１の中継ステージとしてステージ＃６３が使用され、プロセス＃２の中継ステージとしてステージ＃５２が使用されるものとする。
【０１７４】
バタフライによるバリア同期に着目すると、図１５〜図２６において、始点・終点ステージである３個のステージ＃５、＃２、＃６は、図１５（Ｂ）と同様に表される。中継ステージである３個のステージ＃５８、＃６３、＃５２も、図１５（Ｂ）と同様に表される。
【０１７５】
バタフライによるバリア同期を利用したリダクション演算に着目すると、図１５〜図２６において、始点・終点ステージである３個のステージ＃５、＃２、＃６は、図１５（Ｃ）と同様に表される。中継ステージである３個のステージ＃５８、＃６３、＃５２も、図１５（Ｃ）と同様に表される。
【０１７６】
以下、バタフライによるバリア同期を利用したリダクション演算について説明することにより、併せてバタフライによるバリア同期について説明することとする。
【０１７７】
更に、図１７〜図２６においては、バタフライによるバリア同期を利用したリダクション演算処理と合せて、受信したパケットのシーケンス番号の整合性のチェック処理が実行される。これは、各プロセスが受信したパケットのシーケンス番号が正しいとは限らないためである。制御部６２１のチェック回路６２１１が、受信したパケットのシーケンス番号と、そのステージが受信しているパケット数との整合性を確認する。この確認の結果、シーケンス番号とパケット数とが整合する場合にのみ、同期面選択情報に基づいて、２個の受信状態レジスタ６２３の一方が選択される。
【０１７８】
図１６は、シーケンス番号とパケット数との整合性について示す。
【０１７９】
例えば、図１６に示すように、バリア同期のメッセージが未発行である始点・終点のステージについて、差分値が（パケットのシーケンス番号）−（ステージのシーケンス番号）により算出される。また、バリア同期のメッセージが発行済である始点・終点のステージについて、差分値が（パケットのシーケンス番号）−（ステージのシーケンス番号）＋１により算出される。
【０１８０】
一方、バリア同期のメッセージが未発行である始点・終点のステージ以外のステージについて、差分値が（パケットのシーケンス番号）−（ステージのシーケンス番号）により算出される。また、バリア同期のメッセージが発行済である始点・終点のステージ以外のステージについて、差分値が（パケットのシーケンス番号）−（ステージのシーケンス番号）により算出される。始点・終点のステージと始点・終点のステージ以外のステージとの間で、バリア発行の状態に依存して差分値が変わるのは、ステージのシーケンス番号はステージがパケットを送信したときに「＋１」されるためである。
【０１８１】
チェック回路６２１１は、以上のようにして差分値を算出し、算出した差分値と受信状態レジスタの値（換言すれば、フラグの数）とを比較する。フラグの数については後述する。チェック回路６２１１は、比較の結果が一致する場合、受信したパケットのシーケンス番号が正しいものと判断して、同期面選択情報に基づいて、２個の受信状態レジスタ６２３の一方を選択する。
【０１８２】
以下、３個のプロセス＃０、＃１、＃２の間において、バタフライによるバリア同期、バタフライによるバリア同期を利用したリダクション演算、及び受信パケットのシーケンス番号のチェックが行われる場合について、図１７〜図２６を参照して説明する。
【０１８３】
図１７〜図２６に示す例は、第１面シグナル受信状態レジスタ８２３１を用いたバリア同期処理及びリダクション演算処理（以下、「第１面を用いた処理」という）において、プロセス＃０、＃１、＃２がバリア同期のメッセージを発行し、プロセス＃０及び＃２においてバリア同期が成立するが、ステージ＃６３において処理が遅れた場合の例である。更に、図１７〜図２６に示す例は、ステージ＃６３において処理が遅れた結果、第２面シグナル受信状態レジスタ８２３２を用いたバリア同期処理及びリダクション演算処理（以下、「第２面を用いた処理」という）において、プロセス＃０、＃２がバリア同期のメッセージを発行し、かつ、第１面を用いた処理において、プロセス＃１においてバリア同期が成立する場合の例である。
【０１８４】
最初に、図１７（Ａ）は、第１面を用いた処理について、バリア同期のメッセージが発行される前における状態を示す。図１７（Ｂ）は、第２面を用いた処理について、バリア同期のメッセージが発行される前における状態を示す。図１７（Ｃ）は、図１７（Ａ）及び図１７（Ｂ）の状態における、第１面シグナル受信状態レジスタ８２３１及び第２面シグナル受信状態レジスタ８２３２の状態を示す。以上は、図１８、図１９、図２１、図２２、図２４、図２６についても同様である。なお、以下の説明において、第１面シグナル受信状態レジスタ８２３１を「第１面レジスタ８２３１」と言い、第２面シグナル受信状態レジスタ８２３２を「第２面レジスタ８２３２」と言うこととする。
【０１８５】
図１７（Ａ）及び図１７（Ｂ）において、プロセス＃０、＃１、＃２は、バリアポイントに到達していない。この時、第１面レジスタ８２３１において、図１７（Ｃ）に示すように、領域Ｌ、領域Ｒ、領域Ｓの各々におけるフラグが、「０」にリセットされている、領域Ｌは、ローカル（自ノード）からパケットを受信したことを示すフラグとして「１」がセットされる、領域Ｒは、リモート（他ノード）からパケットを受信したことを示すフラグがセットされる領域である。領域Ｓは、始点・終点のステージのみにおいて、パケットを送信したことを示すフラグがセットされる領域である。
【０１８６】
なお、図１７（Ｃ）に示すように、図１７（Ａ）及び図１７（Ｂ）の時点において、各ステージが処理するパケットのシーケンス番号の実体は「３６ａ」であるものとする。また、第１面を用いた処理におけるパケットの発行時シーケンス番号は「３６ａ」であり、成立時シーケンス番号は「３６ａ」であるものとする。
【０１８７】
次に、第１面を用いた処理において、プロセス＃０、＃１、＃２がバリアポイントに到達して、図１８（Ａ）に示すように、バリア同期のメッセージを発行する。第２面を用いた処理には、図１８（Ｂ）に示すように、変化が無い。
【０１８８】
この時、図１８（Ｃ）に示すように、始点・終点のステージ＃５、＃２、＃６がバリア同期のメッセージを発行したので、ステージ＃５、＃２、＃６が使用する第１面レジスタ８２３１の各々において、領域Ｓにフラグ「１」がセットされる。また、各ステージが処理するパケットのシーケンス番号の実体が「３６ｂ」とされる。なお、ステージ＃５、＃２、＃６が次にパケットを発行する時のシーケンス番号も、「３６ｃ」とされる。
【０１８９】
次に、第１面を用いた処理において、ステージ＃５、＃２、＃６、＃５８、＃５２において処理が進んで、図１９（Ａ）に示すように、バリア同期が成立する。しかし、中継ステージ＃６３においては、処理が遅れている。第２面を用いた処理には、図１９（Ｂ）に示すように、変化が無い。この時、図１９（Ｃ）に示すように、ステージ＃５、＃６が２個のパケットを受信したので、ステージ＃５、＃６が使用する第１面レジスタ８２３１の各々において、領域Ｌ及び領域Ｒにフラグ「１」がセットされる。
【０１９０】
これに先立って、例えば、ステージ＃２において、図２０に示すように、ステージ＃６からのパケットのシーケンス番号「０ｘ３６ａ」と、ステージ＃２のシーケンス番号「０ｘ３６ｂ」との差分値ＤＩＦＦが算出される。この場合、（ステージ＃６からのパケットのシーケンス番号−ステージ＃２のシーケンス番号）＋１＝（０ｘ３６ａ―０ｘ３６ｂ）＋１＝０となるため、差分値ＤＩＦＦ＝０である。この後、差分値ＤＩＦＦと、第１面を用いた処理及び第２面を用いた処理においてステージ＃２が受信したパケットの数とが比較される。ステージ＃２が受信したパケットの数は、図２０に示すように、図１８（Ｃ）に示す状態におけるパケットの数から算出される。差分値ＤＩＦＦとステージ＃２が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、パケットの受信処理が実行され、ステージ＃２についての第１面レジスタ８２３１が、図１８（Ｃ）の状態から図１９（Ｃ）の状態に更新される。
【０１９１】
なお、受信パケットのシーケンス番号のチェックは、ステージ＃２のみならず、他の各ステージにおいても実行されるが、以下の説明においては、ステージ＃２について示すものとする。
【０１９２】
次に、第１面を用いた処理において、ステージ＃５、＃６において処理が進んで、図２１（Ａ）に示すように、バリア同期が成立したことに伴う処理が完了する。具体的には、図２１（Ｃ）に示すように、ステージ＃５、＃６においてバリア同期が成立したので、ステージ＃５、＃６が使用する第１面レジスタ８２３１の各々において、領域Ｌ、領域Ｒ、領域Ｓのフラグ「１」がリセットされる。一方、依然として、中継ステージ＃６３においては、処理が遅れている。従って、ステージ＃２が使用する第１面レジスタ８２３１には、領域Ｒと領域Ｓに、フラグがセットされたままである。第２面を用いた処理には、図２１（Ｂ）に示すように、変化が無い。
【０１９３】
次に、プロセス＃０、＃２において処理が進んでバリアポイントに到達して、バリア同期のメッセージを発行する。一方、依然として、中継ステージ＃６３においては、処理が遅れている。
【０１９４】
この時、ステージ＃５、＃６が同期を取る相手方であるステージ＃２が使用する第１面レジスタ８２３１には少なくとも１個のフラグ「１」がセットされているので、図２２（Ｃ）に示すように、第２面レジスタ８２３２が使用される。換言すれば、第１面レジスタ８２３１は、格納する値が全て「０」でなければ、新たなバリア同期のためには使用されない。これにより、第２面を用いた処理が開始される。具体的には、図２２（Ｃ）に示すように、ステージ＃５、＃６が使用する第２面レジスタ８２３２の各々において、領域Ｓにフラグ「１」がセットされる。また、ステージ＃５、＃６が処理するパケットのシーケンス番号の実体が「３６ｃ」とされる。
【０１９５】
この後、ステージ＃２において、図２２（Ｂ）に示すように、ステージ＃６からのバリア同期のメッセージが到達する。従って、ステージ＃２において、第１面を用いた処理におけるバリア同期が成立する前に、第２面を用いた処理におけるバリア同期のメッセージが到達してしまう。しかし、図２２（Ｃ）に示すように、第１面レジスタ８２３１の値は、上書きにより破壊されること無く、正しい状態で保存される。ステージ＃２が使用する第２面レジスタ８２３２において、領域Ｒにフラグ「１」がセットされる。
【０１９６】
なお、この時、図２３に示すように、ステージ＃６からのパケットのシーケンス番号「０ｘ３６ｂ」と、ステージ＃２のシーケンス番号「０ｘ３６ｂ」との差分値ＤＩＦＦが算出される。この場合、（ステージ＃６からのパケットのシーケンス番号−ステージ＃２のシーケンス番号）＋１＝（０ｘ３６ｂ―０ｘ３６ｂ）＋１＝１となるため、差分値ＤＩＦＦ＝１である。この後、差分値ＤＩＦＦと、第１面を用いた処理及び第２面を用いた処理においてステージ＃２が受信したパケットの数とが比較される。ステージ＃２が受信したパケットの数は、図２３に示すように、図２１（Ｃ）に示す状態におけるパケットの数から算出される。差分値ＤＩＦＦとステージ＃２が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、ステージ＃２についての第２面レジスタ８２３２が、図２１（Ｃ）の状態から図２２（Ｃ）の状態に更新される。
【０１９７】
次に、中継ステージ＃６３において処理が進んで、バリア同期のメッセージを発行する。これにより、第１面を用いた処理におけるステージ＃２において処理が進んで、図２４（Ａ）に示すように、バリア同期が成立する。ステージ＃２が使用する第１面レジスタ８２３１において、領域Ｌにフラグ「１」がセットされる。
【０１９８】
この時、図２５に示すように、ステージ＃６からのパケットのシーケンス番号「０ｘ３６ａ」と、ステージ＃２のシーケンス番号「０ｘ３６ｂ」との差分値ＤＩＦＦが算出される。この場合、（ステージ＃６からのパケットのシーケンス番号−ステージ＃２のシーケンス番号）＋１＝（０ｘ３６ａ―０ｘ３６ｂ）＋１＝０となるため、差分値ＤＩＦＦ＝０である。この後、差分値ＤＩＦＦと、第１面を用いた処理及び第２面を用いた処理においてステージ＃２が受信したパケットの数とが比較される。ステージ＃２が受信したパケットの数は、図２５に示すように、図２２（Ｃ）に示す状態におけるパケットの数から算出される。差分値ＤＩＦＦとステージ＃２が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、ステージ＃２についての第２面レジスタ８２３２が、図２２（Ｃ）の状態から図２４（Ｃ）の状態に更新される。
【０１９９】
次に、第１面を用いた処理において、ステージ＃２において処理が進んで、図２６（Ａ）に示すように、バリア同期が成立したことに伴う処理が完了する。具体的には、図２６（Ｃ）に示すように、ステージ＃２においてバリア同期が成立したので、ステージ＃２が使用する第１面レジスタ８２３１において、領域Ｌ、領域Ｒ、領域Ｓのフラグ「１」がリセットされる。第２面を用いた処理には、図２６（Ｂ）に示すように、変化が無い。これにより、再度、第１面レジスタ８２３１を用いることができる。
【０２００】
以上に説明した並列計算機システムにおいては、バリア同期のアルゴリズムはバタフライによるが、並列計算機システムにおけるバリア同期は、バタフライによるバリア同期に限られない。
【０２０１】
例えば、バリア同期のアルゴリズムは、ディスエミネーションであっても良い。これにより、プロセス数が２のべき乗でない場合であっても、並列計算機システムにおいて、ディスエミネーションによるバリア同期処理を実行することができ、また、ディスエミネーションによるバリア同期によるリダクション演算処理を実行することができる。
【０２０２】
また、例えば、バリア同期のアルゴリズムは、ペアワイズエクスチェンジウィズリカーシブダブリング（Pairwise exchange with recursive doubling）であっても良い。これにより、プロセス数が２のべき乗でない場合であっても、並列計算機システムにおいて、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期処理を実行することができ、また、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期によるリダクション演算処理を実行することができる。
【０２０３】
また、以上に説明した並列計算機システムにおいては、バリア同期装置は各々のノード、換言すれば、プロセッサに設けられるが、これに限られない。
【０２０４】
例えば、マルチプロセッサ（マルチプロセッサコア）により構成される並列計算機システムにおいて、バリア同期装置は、各々のノード、換言すれば、プロセッサコアに設けられるのではなく、プロセッサコアとは独立に設けられるようにしても良い。換言すれば、１個のバリア同期装置が、複数のプロセッサコアに共通に設けられるようにしても良い。また、マルチプロセッサにより構成される並列計算機システムにおいて、リダクション演算装置は、各々のノード、換言すれば、プロセッサコアに設けられるのではなく、プロセッサコアとは独立に設けられるようにしても良い。換言すれば、１個のリダクション演算装置が、複数のプロセッサコアに共通に設けられるようにしても良い。
【符号の説明】
【０２０５】
１    ノード
２    ネットワーク
３    ＣＰＵ
４    メモリ
５    システム制御部
６    バリア同期装置
７    ＩＯインタフェース部
８    リダクション演算装置
９    ネットワークインタフェース部
１１    ＩＯ装置
６１、８１    受信装置
６２、８２    同期装置（同期部）
６３、８３    送信装置
６２１、８２１    制御部
６２２、８２２    同期装置レジスタ部（レジスタ部）
【図１】
0005549574.tif 000002
【図２】
0005549574.tif 000003
【図３】
0005549574.tif 000004
【図４】
0005549574.tif 000005
【図５】
0005549574.tif 000006
【図６】
0005549574.tif 000007
【図７】
0005549574.tif 000008
【図８】
0005549574.tif 000009
【図９】
0005549574.tif 000010
【図１０】
0005549574.tif 000011
【図１１】
0005549574.tif 000012
【図１２】
0005549574.tif 000013
【図１３】
0005549574.tif 000014
【図１４】
0005549574.tif 000015
【図１５】
0005549574.tif 000016
【図１６】
0005549574.tif 000017
【図１７】
0005549574.tif 000018
【図１８】
0005549574.tif 000019
【図１９】
0005549574.tif 000020
【図２０】
0005549574.tif 000021
【図２１】
0005549574.tif 000022
【図２２】
0005549574.tif 000023
【図２３】
0005549574.tif 000024
【図２４】
0005549574.tif 000025
【図２５】
0005549574.tif 000026
【図２６】
0005549574.tif 000027
【図２７】
0005549574.tif 000028
【図２８】
0005549574.tif 000029
【図２９】
0005549574.tif 000030
【図３０】
0005549574.tif 000031
【図３１】
0005549574.tif 000032