最初に、バリア同期について簡単に説明する。バリア同期は、図27に示すように、バリア同期を行なう複数のプロセス#0〜#3の各々は、その処理が同期をとるポイントつまりバリアポイントに到着した場合、自身の処理を停止する。即ち、複数のプロセス#0〜#3の各々は処理がバリアポイントに到達した場合、他のプロセスがバリアポイントに到着するのを待ち合わせる。複数のプロセス#0〜#3は、各々、バリア同期を行なう全てのプロセス#0〜#3がバリアポイントに到着した時点で、即ち、バリア同期が成立した時点で、待ち合わせ状態を解除し、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
このようなバリア同期を実現するアルゴリズムの一つに、バタフライ演算がある。以下、バタフライ演算を単に「バタフライ」と称する。バタフライにおいては、処理を複数のステージに分割し、ステージ毎に他のプロセスとバリア同期メッセージの通信を行なう。この例においては、バリア同期のアルゴリズムとして、バタフライが用いられる。
図28(A)は、4個のプロセス#0〜#3の間において、バタフライによるバリア同期を行なう例を示す。図28(A)における個々のプロセスは、図28(B)に示すように表される。図28(B)において、左上の数字は送信元プロセスを表し、左下の数字は送信元プロセスを表し、中央の数字は自プロセスを表し、右上の数字は送信先プロセス又は宛先プロセスを表し、右下の数字は送信先プロセス又は宛先プロセスを表す。プロセスは、プロセスを識別する識別情報であるプロセス番号で表される。
各々のステージにおけるバリアポイントに到着した旨を表すバリア同期メッセージ(以下、単に「メッセージ」と省略する場合がある)の送信先は、ステージ番号をk、自プロセス又は自ノード1のプロセス番号をiとすると、i XOR 2^(k−1)となる。XORは、排他的論理和演算を表す。ステージ数は、プロセス数Nが2のべき乗のとき、log(N)となる。
例えば、図28(A)において、プロセス#0に着目すると、以下のようにメッセージの送信先が予め定められる。即ち、ステージ#1において、バリアポイント到着を示すメッセージの送信先はプロセス#1である。ステージ#2において、プロセス#0からのバリアポイント到着を示すメッセージの受信元はプロセス#1であり、プロセス#0からのバリアポイント到着を示すメッセージの送信先はプロセス#2である。
これらの信号の送信先及び受信元は、設定条件において、バリア同期のアルゴリズム及び実行条件つまりプロセスの構成が定まることにより、一意に定めることができる。この例においては、バリア同期のアルゴリズムはバタフライであり、実行条件は4個のプロセスであるので、前述したように定めることができる。
各プロセスは、ステージ毎に他のプロセスとの間でバリアポイント到着の信号を通信し合う。例えば、最初のステージ#1において、各プロセスは、バリア同期ポイントに到着する。到着のタイミングは、各プロセスで異なる。この場合、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに信号を送る。並列計算機は、バタフライによりバリア同期を行う。
次のステージ#2において、各プロセスは、バタフライネットワークの前のステージ#1の予め設定されたプロセスからの信号を待ち合わせる。各プロセスは、他のプロセスから信号を受信した場合、次のステージ#3の予め設定されたプロセスに信号を送る。
最後のステージ#3において、各プロセスは、前ステージ#2の予め設定されたプロセスからの信号を待ち合わせる。各プロセスが他のプロセスからの信号を受けると、全てのプロセス#0〜#3がバリアポイントに到着した後にバリア同期が成立した事を知る。この後、各プロセスは、バリア同期が成立したので、次の処理を開始する。
しかし、並列計算機システムにおけるバタフライによるバリア同期装置において、連続してノード間のバリア同期を実行すると、先のバリア同期のプロセスに対するメッセージの待ち合わせ状態を後のバリア同期のプロセスに対するメッセージにより上書きしてしまう、換言すれば、先のバリア同期の待ち合わせ状態を破壊してしまう可能性がある。
例えば、図29(A)に示すように、4個のプロセス#0〜#3の各々が最初の処理を実行してバリアポイントに到達して、1回目のバリア同期のリクエストを出力する。これに応じて、図29(B)に示すように、4個のプロセス#0〜#3の間でバリア同期のメッセージが送受信される。これにより、プロセス#0及びプロセス#2においては、ノード間での同期が成立してバリア同期完了が通知される。しかし、プロセス#3のステージ#2からのメッセージの通信が遅れたとする。換言すれば、プロセス#3は、ステージ#2の状態のまま、1回目のバリア同期のメッセージを保持した状態であると考えることができる。この遅れにより、プロセス#1及びプロセス#3においては、ノード間での同期が成立しないので、バリア同期完了が通知されない。
次に、図30(A)に示すように、プロセス#0及びプロセス#2は、次の処理を実行してバリアポイントに到達して、2回目のバリア同期のリクエストを出力する。しかし、この時点でも、1回目のバリア同期のリクエストに基づく、プロセス#3のステージ#2からのメッセージの通信が遅れているとする。
この結果、図30(B)に示すように、プロセス#2からのバリア同期のメッセージが、ステージ#1において、自プロセス#2とプロセス#3とに送信される。これにより、プロセス#3において、通信の遅れによりその時点で保持されていた1回目のバリア同期のメッセージが、新たに到達した2回目のバリア同期のメッセージにより破壊されてしまう。換言すれば、プロセス#3において、1回目のバリア同期のメッセージを受信したという受信状態が、2回目のバリア同期のメッセージを受信したという受信状態に書き換えられてしまう。
開示の並列計算機システム、同期装置、並列計算機システムの制御方法は、バリア同期の2重の投入によるオーバーヘッドを回避し、バリア同期のメッセージの待ち合わせ状態の破壊を防止しつつ、高速でバリア同期処理を実行する。
図1は、バリア同期装置を含むノードを複数有するコンピュータネットワーク、換言すれば、並列計算機システムの構成の一例を示す。
並列計算機システムは、複数のノードつまりコンピュータ1と、これらのノードを接続するネットワーク2とを含む。図1の例においては、4個のノード#0〜ノード#3が並列計算機システムに設けられる。複数のノード1は、例えば、相互結合網であるネットワーク2を介して、相互に接続される。ネットワーク2により接続された複数のノード1は、並列演算を実行する。複数のノード1は、各々、並列演算におけるバリア同期のために、バリア同期装置6を含む。換言すれば、並列計算機システムは、複数のバリア同期装置6を含む。バリア同期装置6は高速でバリア同期を行う。
図1の並列計算機システムは、複数のノード1が相互に接続される一例として、ノード#0が、ノード#1〜ノード#3の各々と接続された状態を示す。また、図1においては、個々のノード1が、CPU3とバリア同期装置6とを含むことを、模式的に表している。
図2は、バタフライによりバリア同期を行うバリア同期装置を含むノードの構成の一例を示す。
ノード1は、CPU3と、メモリ4と、システム制御部5と、バリア同期装置6と、IO(Input Output)インタフェース部7と、ネットワークインタフェース部9とを含む。システム制御部5はノード1を制御する。即ち、システム制御部5は、CPU3、メモリ4、バリア同期装置6、IO(Input Output)装置11を制御する。CPU3は、設定処理部31を含む。システム制御部5は、IOインタフェース部7を介して、IO装置11に接続される。IOインタフェース部7は、システム制御部5に設けられるようにしても良い。バリア同期装置6は、ネットワークインタフェース部9を介して、ネットワーク2に接続される。ネットワークインタフェース部9は、バリア同期装置6に設けられるようにしても良い。
設定処理部31は、システム制御部5及びIOインタフェース部7を介して、IO装置11との間において、必要なデータの送受信を行う。これにより、IO装置11は、バリア同期のアルゴリズムと実行条件とを含む設定条件を、CPU3の設定処理部31に入力する。また、IO装置11は、必要に応じて、設定処理部31から出力されたデータを出力する。
設定処理部31は、システム制御部5を介して、バリア同期装置6に対してバリアポイント到達のメッセージを送信し、また、バリア同期装置6からバリア同期成立のメッセージを受信する。これにより、設定処理部31は、IO装置11から入力された設定条件に従って、バリア同期装置6における第1のバリア同期メッセージの送信先及び第2のバリア同期メッセージの送信先を、バリア同期装置6に設定する。バリア同期装置6は、設定条件に従って、ネットワーク2及びネットワークインタフェース部9を介して、他ノード1のバリア同期装置6との間で通信を行ない、当該通信に基づいて、バリア同期を行なう。
バリア同期装置6は、バタフライによるバリア同期を実行する。換言すれば、バリア同期装置6は、受けるデータの待ち合わせを行ない、前記待ち合わせたデータが揃った場合にデータを送信することにより同期を行う。具体的には、図1の並列計算機システムにおいて、複数のバリア同期装置6のうち、同期を行う第1の複数のバリア同期装置6の組の各々の間で、同期が実行される。更に、第1の複数の同期装置の組の各々の間で同期を完了した後、第1の複数の同期装置の組とは異なる第2の複数のバリア同期装置6の組の各々の間で、同期が実行される。
設定処理部31は、システム制御部5を介して、メモリ4との間において、必要なデータの送受信を行う。これにより、設定処理部31は、メモリ4にデータを書き込み、また、設定処理部31はメモリ4からデータを読み出す。このデータは、例えば、後述するリダクション演算に用いられるデータである。
図3は、バリア同期装置の構成の一例を示す。図4は、図3のバリア同期装置が含む同期装置(同期部)の構成の一例を示す。
バリア同期装置6は、受信装置61と、同期装置62と、送信装置63と、ループ経路65とを含む。従って、並列計算機システムは、複数の同期装置62を含む。同期装置62は、バリア同期装置6の主要部であるが、バリア同期装置6と区別するために、以下の説明においては、「同期部62」と言うこととする。
同期部62は、図3に示すように、2個の同期資源620を含む。2個の同期資源620は、具体的には後述するように、2個のシグナル受信状態レジスタ623である。2個のシグナル受信状態レジスタ623は、第1面シグナル受信状態レジスタ6231と第2面シグナル受信状態レジスタ6232とを含み、複数の同期装置レジスタ部622の各々に設けられる。例えば、同期資源#0は第1面シグナル受信状態レジスタ6231であり、同期資源#1は第2面シグナル受信状態レジスタ6232である。
なお、図3は、同期部62が2個の同期資源620を含むことを、模式的に表している。2個の同期資源620は、実際には、図4に示すように、複数の同期装置レジスタ部622の各々に設けられる2個のレジスタである。
同期部62は、図4に示すように、制御部621と、複数の同期装置レジスタ部622とを含む。制御部621は、チェック回路6211、シーケンス回路6212、レジスタアクセス制御回路6213を含む。複数の同期装置レジスタ部622は、各々、後述するように、複数のレジスタを含むレジスタ群である。なお、以下の説明において、同期装置レジスタ部622を「レジスタ部622」と言うこととする。
複数のレジスタ部622は、例えば、n個の同期メッセージの組#0〜#n−1に対応するように、n個設けられる。換言すれば、1個のレジスタ部622は、1個のプロセスの1個のステージに対応する。複数のレジスタ部622を含むことにより、各々の演算毎に同期メッセージをレジスタ部622に保持し、バリア同期を実行することが可能となる。従って、1組の演算がn個の第1の同期メッセージで構成される場合、同期部62は、各々がn個の第1の同期メッセージで構成される複数の組について、各々、バリア同期を実行する。この場合、1個のノード1上で複数のプロセスが動作する。
図2の例においては、1個のノード1上で複数のプロセスが動作し、また、1組の演算が実行され、この1組の演算についてバリア同期を実行することができる。また、図2の例においては、1個のノード1上で複数のプロセスが動作する実施態様に代えて、1個のノード1上で1個のプロセスを動作させることができる。この場合、プロセスとノード1とは同様に取り扱っても良い。
図2の例においては、各々のレジスタ部622は、図4に示すように、2個のシグナル受信状態レジスタ623と、1個の設定情報レジスタ624とを含む。1個の設定情報レジスタ624は、実際には、複数のレジスタを含むレジスタ群である。なお、以下の説明において、シグナル受信状態レジスタ623を「受信状態レジスタ623」と言うこととする。
受信状態レジスタ623は、2個のレジスタ、換言すれば、第1面シグナル受信状態レジスタ6231と第2面シグナル受信状態レジスタ6232とを含む。受信状態レジスタ623は、同期のために用いられる資源である同期資源620である。受信状態レジスタ623は2個のレジスタを含むので、1個のプロセスの1個のステージ毎に2面の同期資源620が設けられる。2面の同期資源620を含むことにより、バリア同期のメッセージの待ち合わせ状態、換言すれば、同期情報の破壊を防止しつつ、高速でバリア同期処理を実行することができる。
第1面シグナル受信状態レジスタ6231は、第1の同期資源620であり、同期を行う2以上のバリア同期装置6からの同期情報を保持する第1の受信状態レジスタである。同期情報は、プロセス又はノードから同期メッセージを受信したか否かを示す情報であり、また、同期メッセージの待ち合わせ状況を示す情報である。第2面シグナル受信状態レジスタ6232は、第2の同期資源620であり、同期を行う2以上のバリア同期装置6からの同期メッセージに基づく同期情報を保持する第2の受信状態レジスタである。
制御部621は、受信装置61部が抽出した同期情報を、レジスタ選択情報に基づいて、第1面シグナル受信状態レジスタ6231又は第2面シグナル受信状態レジスタ6232に、交互に保持させる。制御部621は、第1面シグナル受信状態レジスタ6231又は第2面シグナル受信状態レジスタ6232のいずれかに、同期を行う2以上のバリア同期装置6からの同期メッセージに基づく同期情報を全て保持した場合に、同期を行う2以上のバリア同期装置6へのデータを送信部63にそれぞれ送信させる。換言すれば、制御部621は、第1面シグナル受信状態レジスタ6231又は第2面シグナル受信状態レジスタ6232のいずれかに2以上の同期装置からのデータから抽出された同期情報が揃った場合に、送信装置63が送信を行うデータであって、2以上の同期装置がそれぞれ有する第1面シグナル受信状態レジスタ6231又は第2面シグナル受信状態レジスタ6232に交互に保持させるレジスタ選択情報を含んだデータを、送信装置63にそれぞれ送信させる。
制御部621は、チェック回路6211により、各プロセスが受信したパケットの整合性のチェック処理を実行する。チェック回路6211は、送信装置61からの同期面選択情報、同期信号及び宛先情報を取り込んで、これらに基づいて、パケットの整合性のチェック処理を実行する。チェック回路6211は、パケットの整合性のチェック結果を、シーケンス回路6212に入力する。
例えば、チェック回路6211は、同期面選択情報、同期メッセージ及び宛先情報に基づいて、受信したパケットのシーケンス番号とプロセス(換言すれば、プロセスの処理が位置するステージ)のシーケンス番号とを求め、両者の差分値を求め、求めた差分値とそのプロセス(換言すれば、プロセスの処理が位置するステージ)が受信したパケットの数とを比較する。パケットの整合性のチェック処理については後述する。パケットの整合性のチェック処理の結果、シーケンス番号とパケット数とが整合する場合にのみ、実際に、同期面選択情報に基づいて2個の受信状態レジスタ623の一方が選択される。
制御部621は、シーケンス回路6212により、バリア同期のメッセージ、換言すれば、バリア同期のための同期信号の送信指示を送信装置63へ出力する。これにより、送信装置63は、バリア同期のメッセージを、例えば他のノード1へ送信する。シーケンス回路6212は、レジスタアクセス制御回路6213によるレジスタ部622の参照結果と、CPU3からのバリア発行指示とを取り込んで、両者に基づいて、バリア同期のメッセージの送信指示を送信装置63へ出力し、バリア同期の成立通知をCPU3へ送信する。
制御部621は、レジスタアクセス制御回路6213により、レジスタ部622の設定情報レジスタ624に設定情報を設定する。設定情報は、ライトデータとしてCPU3の設定処理部31から入力される。設定情報を設定するレジスタ部622は、ライトアドレスを含むライト制御信号としてCPU3の設定処理部31から入力される。
制御部621は、レジスタアクセス制御回路6213により、レジスタ部622を参照して、その参照結果に基づいて、バリア同期のための同期メッセージを送信する。同期信号の送信は、実際には、シーケンス回路6212の指示により、送信装置63が行う。レジスタ部622において、2個の受信状態レジスタ623は、各々、レジスタ部622に対応するプロセス又はノードから同期メッセージを受信したか否かを示す情報を格納する。換言すれば、2個の受信状態レジスタ623は、各々、同期メッセージの待ち合わせ状況を示す情報を格納する。設定情報レジスタ624は、レジスタ部622が同期メッセージを送信する宛先であるプロセス又はノードを示す情報を含む設定情報を格納する。換言すれば、設定情報レジスタ624は、同期成立の後に同期メッセージの送信先を示す情報を格納する。
同期情報は、同期メッセージに含まれる同期信号に基づいて定まる同期の状態を示す情報であり、2個の受信状態レジスタ623に保持される情報である。同期メッセージに含まれる同期信号は、バリア同期のメッセージに含まれる情報であって、図5を参照して後述するように、例えば、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号である。同期信号は、バリア同期のメッセージに含まれた形態で送受信される。従って、同期信号の送受信を行うことは、同期信号を含むバリア同期のメッセージの送受信を行うことである。バリア同期のメッセージに含まれた同期信号は、バリア同期のメッセージから抽出される。
設定情報レジスタ624は、設定情報を格納する。具体的には、設定情報レジスタ624は、「宛先ノードアドレス」「宛先ステージ番号」「送信元ノードアドレス」「送信元ステージ番号」「シーケンス番号(換言すれば、面選択番号)」を含む設定情報を格納する。シーケンス番号が、2個の受信状態レジスタ623のいずれか一方を選択するためのレジスタ選択情報である。宛先ノードアドレス等については、図5を参照して後述する。設定情報を指定することにより、1個のノードにおける1個のレジスタ部622が定まる。
設定情報レジスタ624は、同期信号の送信先が自ノード1である場合、自プロセス又は自ノード1の同期部62のレジスタ部622を指定する設定情報を格納する。
バリア同期の実行に先立って、IO装置11から設定処理部31に、設定条件が入力される。この例においては、設定条件において、バリア同期のアルゴリズムはバタフライ演算によるアルゴリズムとされ、実行条件は例えば4個のプロセスとされる。これに加えて、実行条件として、当該演算つまりバリア同期におけるステージ数kと、各々のプロセス自身つまり自ノード1のプロセス番号iも入力される。ステージ数kはステージ番号の最大値を示している。
なお、設定処理部31への設定条件の入力は、これに限られない。例えば、いずれか1個のノード1が、ネットワーク2を介して、他ノード1に各々の設定条件を入力するようにしても良い。また、ネットワーク2に接続された管理用のコンピュータが、ネットワーク2を介して、全てのノード1に各々の設定条件を入力するようにしても良い。
また、バリア同期の実行に先立って、CPU3の設定処理部31は、制御部621を介して、レジスタ部622に、設定条件に基づいて、前述の設定情報を設定する。前述したように、設定条件は、バリア同期のアルゴリズムと実行条件とを含む。
この設定の後、設定処理部31が、制御部621にバリア同期開始信号を送信することにより、バリア同期が開始される。プロセスの最後のステージにおいて同期が成立した場合、同期部62は、バリア同期成立、つまりバリア同期完了を示す信号を設定処理部31に送る。
受信装置61は、ネットワーク2及びネットワークインタフェース部9を介して他ノード1と接続される受信部である。受信装置61は、並列計算機システムにおける複数のバリア同期装置6のうち、同期を行う2以上のバリア同期装置6からのパケットを各々受信し、受信した2以上のバリア同期装置からのパケットから同期情報とレジスタ選択情報とを抽出する。同期を行う2以上のバリア同期装置6には、自ノード1のバリア同期装置6が含まれる。従って、受信装置61は、複数のバリア同期装置6のうち、自ノード1を含む同期を行う2以上の同期装置からのパケットを各々受信する場合がある。
具体的には、受信装置61は、他ノード1又は自ノード1からのバリア同期のためのパケット、換言すれば、バリア同期のためのデータを受信する。受信装置61は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第1の同期信号を受信した場合、受信した第1の同期信号を同期部62に送信する。このため、受信装置61は、ネットワーク2を介して、他ノード1のバリア同期装置6から、バリア同期のためのパケットを受信する。
また、受信装置61は、自ノード1のバリア同期装置6の送信装置63から、バリア同期のためのパケット、換言すれば、バリア同期のためのデータを受信する。この場合、バリア同期のためのパケットは、図3に点線で示すループ経路65を介して、送受信される。ループ経路65は、自ノード1内に設けられ、送信装置63と受信装置61とを接続する。
パケットを受信した場合、受信装置61は、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報を生成して、同期部62に送信する。具体的には、受信装置61は、受信したパケットに含まれる同期面選択情報、同期信号及び宛先情報を取り出し、同期部62に送信する。同期面選択情報、同期信号及び宛先情報については、図5を参照して後述する。
なお、送信元のノードが複数存在する場合において、受信装置61が送信元となるノード1の数に対応した数だけのネットワークインタフェース部9を含む場合、複数の受信装置61を用いて複数のノードから送信されるパケットを同時に受信することができる。これは送信装置63においても同様である。
図5は、パケットのフォーマットを示す図である。
プロセス#0〜プロセス#3の間において相互に送受信されるパケットは、例えば、図5に示すようなフォーマットを有する。パケットは、例えば、ヘッダCRC(Cyclic Redundancy Check)、ルーティングヘッダ、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号、パケットCRC(Cyclic Redundancy Check)を含む。同期面選択情報は、例えばシーケンス番号の一部である。パケットに含まれる同期信号は、例えば、タイプ、宛先ノードアドレス、送信元ノードアドレス、送信元ステージ番号、宛先ステージ番号、シーケンス番号である。宛先情報は、例えば、宛先ノードアドレス、宛先ステージ番号である。
ヘッダCRCは、ルーティングヘッダ用の誤り検出符号である。
ルーティングヘッダは、ルータが、パケットの送信において、次の宛先を決定するための情報である。ルータは、ネットワーク2において、パケットの転送を実行するネットワークインタフェースに含まれる中継装置である。
タイプは、パケットのタイプを示す情報である。換言すれば、タイプは、バリアを示すタイプであって、例えば、パケットがバリア同期のメッセージであることを示す。
宛先ノードアドレスは、パケットの宛先ノード1のネットワーク2上のアドレスを示す。バリア同期装置が、各ステージでバリアパケットを送信する際に、バリア同期装置の設定情報レジスタに予め設定されている宛先ノードアドレスをパケットに埋め込む。
送信元ノードアドレスは、パケットの送信元ノード1のネットワーク2上のアドレスを示す。バリア同期装置が、各ステージでバリアパケットを送信する際に、自ノードアドレスをパケットに埋め込む。パケットを受信したバリア同期装置(の制御部)が、本フィールドの値と、バリア同期装置の設定情報レジスタに予め設定されている送信元ノードアドレスとを比較して、パケットの受信可/不可の判定に使用される。
送信元ステージ番号は、パケット送信元ノード1のバリア同期装置でのステージ番号である。バリア同期装置が、各ステージでバリアパケットを送信する際に、ステージ番号を送信元ステージ番号としてパケットに埋め込む。パケットを受信したバリア同期装置(の制御部)が、本フィールドの値と、バリア同期装置の設定情報レジスタに予め設定されている送信元ステージ番号とを比較して、パケットの受信可/不可の判定に使用される。
送信先ステージ番号は、パケット送信先ノードバリア同期装置でのステージ番号を示す。バリア同期装置が、各ステージでバリア同期メッセージに対応するバリアパケットを送信する際に、バリア同期装置の設定情報レジスタに予め設定されている宛先ステージ番号をパケットに埋め込む。パケットを受信したバリア同期装置(の制御部)が、本フィールドの値を参照して、設定情報レジスタの選択(ステージ選択)に使用される。
シーケンス番号は、バリア同期装置が各ステージでバリア同期メッセージに対応するバリアパケットを送信する際に付加する番号である。シーケンス番号の一部が、図6に示すように、同期面選択情報として使用される。
パケットCRCは、パケット全体の誤り検出符号である。
図6は、同期面選択情報の説明図である。
同期面選択情報は、シーケンス番号に含まれる。換言すれば、シーケンス番号の最下位の1ビットが同期面選択情報として用いられる。具体的には、パケットがバリア同期のメッセージである場合において、シーケンス番号の最下位の1ビットが「0」である場合、同期信号、換言すれば、バリア同期のメッセージは、第1面シグナル受信状態レジスタ6231宛ての同期信号である。パケットがバリア同期のメッセージである場合において、シーケンス番号の最下位の1ビットが「1」である場合、同期信号、換言すれば、バリア同期のメッセージは、第2面シグナル受信状態レジスタ6232宛ての同期信号である。
図3及び図4に戻って、同期部62は、受信装置61からの同期面選択情報、同期信号及び宛先情報に基づいて、バリア同期の処理を行なう。このために、同期部62は、複数組のバリア同期のメッセージの待ち合わせを行ない、各組で同期成立の後、同期信号としてのバリア同期のメッセージを宛先情報により指定された送信先に送信する。これにより、バリア同期を行なうアルゴリズムにおいて、ステージ毎にバリアポイント到着の信号の送信先を変更する処理を高速に行なうことができる。バリア同期のメッセージの各組に対しては、一意に定まる設定情報が割り当てられる。同期部62は、同期信号としてのバリア同期のメッセージと設定情報の双方を受信装置61から受信し、同期が成立した組について、対応するバリア同期のメッセージを送信装置63に出力する。
例えば、同期部62は、各々のバリア同期のメッセージの組について、設定条件に従って予め設定されたn(nは正の整数)個の第1のバリア同期のメッセージについての同期を取る。各組において、n個のバリア同期のメッセージが入力された場合、同期成立となる。同期部62は、同期成立の後に、第2のバリア同期のメッセージの送信を送信装置63に指示する。第2のバリア同期のメッセージは、m(mは正の整数)個とされ、各々について設定条件に従ってその送信先が予め設定される。
同期が成立した場合、同期部62は、各組について、予め設定された送信先にバリア同期のメッセージを送信する。送信先は、他ノード1の同期部62、又は、自ノード1の同期部62である。バリア同期のメッセージの送信先が他ノード1である場合、送信先ノード1の宛先ノードアドレスを含む設定情報が同期部62に予め設定されている。この場合、同期部62は、送信装置63にパケットの送信指示の信号を送る。同期部62からのパケット送信指示を受けた送信装置63は、ネットワーク2を介して、宛先ノードアドレスで指定される他ノード1のバリア同期装置6に、バリア同期のためのパケットを送信する。一方、バリア同期のメッセージの送信先が自ノードである場合、同期部62には設定情報が予め設定されている。同期部62は、自プロセス又は自ノード1の同期部62の指定されたレジスタ部622にバリア同期のメッセージを送信する。
なお、同期部62は、CPU3の設定処理部31からバリア同期開始の信号を受信した場合、指定された送信先に対してバリア同期のメッセージを送る。同期部62は、バリア同期のメッセージの最後の組で同期が成立した場合、バリア同期完了の信号をCPU3の設定処理部31に通知する。
送信装置63は、ネットワーク2及びネットワークインタフェース部9を介して他ノード1と接続される送信部である。送信装置63は、並列計算機システムにおける複数のバリア同期装置6のうち、同期を行う2以上のバリア同期装置6へのデータをそれぞれ送信する。同期を行う2以上のバリア同期装置6には、自ノード1のバリア同期装置6が含まれる。従って、送信装置63は、複数のバリア同期装置6のうち、自ノード1を含む同期を行う2以上の同期装置へのデータをそれぞれ送信する場合がある。
具体的には、送信装置63は、他ノード1又は自ノード1へのバリア同期のためのパケット、換言すれば、バリア同期のためのデータを送信する。送信装置63は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第1のバリア同期のメッセージを送信した場合、送信した第1のバリア同期のメッセージを同期部62に送信する。このため、送信装置63は、ネットワーク2を介して、他ノード1のバリア同期装置6へ、バリア同期のためのパケットを送信する。
また、送信装置63は、自ノード1のバリア同期装置6の送信装置63へ、バリア同期のためのパケット、換言すれば、バリア同期のためのデータを送信する。この場合、バリア同期のためのパケットは、前述したように、図3に点線で示すループ経路65を介して、送受信される。従って、送信装置63は、自ノード1へのデータを送信する場合、ループ経路65を介してデータを送信する。
送信装置63は、同期部62からの送信の指示を受信した場合、予め設定されたm個の送信先に、第2のバリア同期のメッセージを送信する。このため、送信装置63は、同期部62からパケット送信指示の信号を受け取り、指定された送信先に基づいて、パケットを生成して、ネットワーク2を介して、他ノード1に送信する。前述したように、送信先となるノード1は、設定情報に基づいて定められる。
図7及び図8は、一体となって、図1〜図3のバリア同期装置を含む並列計算機システムが実行する、バタフライによるバリア同期処理の処理フローを示す。
CPU3内に設定された設定処理部31は、バリア同期を開始する前に、バリア同期のアルゴリズムと設定条件とに基づいて、レジスタ部622の役割を決定し、各々のレジスタ部622の設定情報レジスタ624に、バタフライでの次ステージに対応した設定情報を設定する(ステップS11)。
このために、設定処理部31は、設定情報を設定すべきレジスタ部622を示す情報を、ライトアドレスとして同期部62に入力する。また、設定処理部31は、レジスタ部622の設定情報レジスタ624に設定すべき設定情報を、ライトデータとして同期部62の制御部621に入力する。ライトアドレス及びライトデータは、レジスタ部622毎に入力される。これに応じて、制御部621は、入力されたライトデータである設定情報を、ライトアドレスにより指定されたレジスタ部622の設定情報レジスタ624に格納する。ライトデータの格納は、実際には、設定処理部31からのライトアドレス及びライトデータを受信した制御部621により実行される。一方、これとは別に、2個の受信状態レジスタ623の初期値は、例えば予め「0」とされる。
設定情報の設定は、例えば以下のように行われる。ノード数が2のべき乗である場合、バタフライにおいては、同期成立の後、自プロセス又は自ノード1の次ステージと、他ノード1での次ステージの2箇所に対して、バリア同期のメッセージが送信される。従って、設定情報レジスタ624に指定する宛先情報は、自プロセス又は自ノード1の設定情報、又は、他ノード1の設定情報のいずれかである。
最初のステージにおいては、信号の待ち合わせを行なわないので、受信状態レジスタ623は使用しない。一方、最後のステージにおいては、設定情報レジスタ624は使用しない。従って、最初のステージと最後のステージにおいて、使用するレジスタは重複しない。そのため、最初のステージと最後のステージにおいて同一のレジスタ部622が指定される。例えば、後述する図15〜図26に示す例のように、最初のステージと最後のステージにおいて、同一の設定情報レジスタ624が指定される。
最初のステージと最後のステージにおいて使用するレジスタが重複しない場合でも、最初と最後のステージにおいて異なるレジスタ部622が指定されるようにしても良い。例えば、レジスタ部622の数が十分大きい場合、最後のステージにおいて、最初のステージと異なる設定情報レジスタ624が指定されるようにしても良い。
なお、ノード数が2のべき乗でない場合、ノード数を2のべき乗にするためにネットワーク2に追加される追加ノードが持つレジスタ部622を、他ノード1に持たせるようにしても良い。例えば、3個のノード#1〜#3でバリア同期を取りたい場合は、ノード1の持つレジスタ部622をノード#1〜#3のいずれかに持たせる。この場合、必要となるのは中継ステージに相当するレジスタ部622のみであるので、中継ステージに相当するレジスタ部622をノード#1〜#3のいずれかのノードに持たせる。更に、最初のステージにおいて、レジスタ部622の送信先の受信状態レジスタ623の値を予め「1」に設定する。最後のステージにおいて、レジスタ部622の送信元の設定情報レジスタ624から最初のステージのレジスタ部622を外す。
CPU3は、プロセスがバリアポイントに到達した場合、バリア同期装置6の同期部62に対しバリア同期開始の信号、換言すれば、同期信号を含むバリア同期のメッセージを送る(ステップS12)。バリア同期開始の信号は、同期信号を含むバリア同期のメッセージ、換言すれば、バリア同期発行指示である。バリア同期開始信号は最初のステージに対応するレジスタ部622の番号を含む。これにより、あるノード1において、バリア同期開始信号は、ある1個のレジスタ部622を指定する。最初のステージにおいては、他のプロセスからパケットを受信することは無いので、受信装置61から同期信号及び宛先情報が制御部621に送信されることも無い。
同期部62の制御部621は、バリア同期開始信号を受信すると、バリア同期開始信号にて指定された番号に対応するレジスタ部622の設定情報レジスタ624の値を読む(ステップS13)。この読取のために、制御部621は、バリア同期開始信号にて指定された設定情報をリードアドレスとして用いて、当該アドレスのレジスタ部622の設定情報レジスタ624の値をリードデータとして読み出す。最初のステージに対応するレジスタ部622の受信状態レジスタ623は使用されず、従って、バリア同期のメッセージの待ち合せも行われない。例えば、あるノード1において、ある1個のレジスタ部622の設定情報レジスタ624の値は、他ノード1であるノード#2のある1個のレジスタ部622の設定情報レジスタ624の値及び自ノード1であるノード#1のある1個のレジスタ部622の設定情報レジスタ624の値と同一の値を示す。
制御部621は、バリア同期開始信号のシーケンス番号の最下位の1ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「0」又は「1」のいずれであるか調べる(ステップS14)。
同期面選択情報の値が「0」である場合、制御部621は、設定情報レジスタ624の値の中の他ノード1のレジスタ部622を指定する値に基づいて、送信装置63に対しパケット送信指示の信号を出す(ステップS15)。パケット送信指示は、他ノード1を指示する設定情報レジスタ624の値を含む。送信装置63は、制御部621からのパケット送信指示で指定された宛先ノードアドレスを含む設定情報に基づいて、パケットを生成し、パケットをネットワーク2へ送信する。このパケットの送信先は、指定された宛先ノードアドレスである。これにより、パケットは、例えば、他ノード1のある1個のレジスタ部622を宛先として、あるノード1から他ノード1へ送信される。
また、送信装置63は、設定情報レジスタ624の値の中の自ノード1のレジスタ部622を指定する値に基づいて、ループ経路65を経由してパケットを送信する。パケットを受信した受信装置61は、受信したパケットに基づいて、同期面選択情報、同期信号、宛先情報となる設定情報を取り出して、同期部62の制御部621に送る。制御部621は指定されたレジスタ部622の同期資源#0の受信状態レジスタ623の値を読む(ステップS15)。具体的には、同期面選択情報の値「0」に対応する第1面シグナル受信状態レジスタ6231の値が読み出される。
同期面選択情報の値が「1」である場合、制御部621は、設定情報レジスタ624の値の中の他ノード1のレジスタ部622を指定する値に基づいて、送信装置63に対しパケット送信指示の信号を出す(ステップS16)。送信装置63は、制御部621からのパケット送信指示で指定された宛先ノードアドレスを含む設定情報に基づいて、パケットを生成し、パケットをネットワーク2へ送信する。
また、送信装置63は、設定情報レジスタ624の値の中の自ノード1のレジスタ部622を指定する値に基づいて、ループ経路65を経由してパケットを送信する。パケットを受信した受信装置61は、受信したパケットに基づいて、同期面選択情報、同期信号、宛先情報となる設定情報を取り出して、同期部62の制御部621に送る。制御部621は指定されたレジスタ部622の同期資源#1の受信状態レジスタ623の値を読む(ステップS16)。具体的には、同期面選択情報の値「1」に対応する第2面シグナル受信状態レジスタ6232の値が読み出される。
続いて、同期部62が、次ステージの受信状態レジスタ623に同期状態を示す「1」が設定されているか否かを調べる(ステップS17)。受信状態レジスタ623に「1」が設定されている場合(ステップS17 Yes)、同期成立となる。一方、受信状態レジスタ623に「1」が設定されていない場合(ステップS17 No)、同期は成立していない。
同期が成立していない場合(ステップS17 No)、制御部621は、バリア同期開始信号のシーケンス番号の最下位の1ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「0」又は「1」のいずれであるか調べる(ステップS18)。
同期面選択情報の値が「0」である場合、制御部621は、設定情報レジスタ624において指定された次ステージのレジスタ部622における同期資源#0である、第1面シグナル受信状態レジスタ6231に「1」を書き込む(ステップS19)。同期面選択情報の値が「1」である場合、制御部621は、設定情報レジスタ624において指定された次ステージのレジスタ部622における、同期資源#1である第2面シグナル受信状態レジスタ6232に「1」を書き込む(ステップS110)。
ステップS19及びS110において、制御部621は、読み出した設定情報レジスタ624の値の中の自ノード1を指定する値をライトアドレスとして用いて、当該アドレスのレジスタ部622の受信状態レジスタ623に「1」をライトデータとして書き込む。これにより、ノード1において、ある1個のレジスタ部622の2個の受信状態レジスタ623のいずれか一方の値は、「1」とされる。これにより、待ち合わせすべきバリア同期のメッセージの一方を受信したことが示される。
この後、同期部62が、パケットの受信を待ち合わせ、受信装置61がパケットを受信した場合、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報となる設定情報を取り出し、同期部62に送信する(ステップS111)。
同期部62の制御部621は、受信装置61からの信号を受信した場合、指定されたレジスタ部622の設定情報レジスタ624の値を読み取り(ステップS112)、ステップS14を繰り返す。ステップS112において、制御部621は、指定された設定情報をリードアドレスとして用いて、当該アドレスのレジスタ部622の設定情報レジスタ624の値を、リードデータとして読み出す。
一方、ステップS17において受信状態レジスタ623に「1」が設定されている場合、換言すれば、同期が成立している場合(ステップS17 Yes)、制御部621は、更に、レジスタ部622が最後のステージに対応したものか否かを調べる(ステップS113)。例えば、あるノード1のあるレジスタ部622において、ステップS19又はS110の実行の後は、2個の受信状態レジスタ623の一方の値は「1」である。従って、ステップS19又はS110の実行の後に再度ステップS17を実行した場合、同期が成立する。
最後のステージに対応するレジスタ部622で同期が成立した場合(ステップS113 Yes)、制御部621は、バリア同期成立の信号をCPU3に送る(ステップS114)。CPU3は、制御部621からのバリア同期成立の信号を受け取り、バリア同期成立を知る(ステップS115)。
また、ステップS113においてレジスタ部622が最後のステージに対応したものでない場合(ステップS113 No)、制御部621は、ステップS17において読んだ受信状態レジスタ623の属するレジスタ部622の設定情報レジスタ624の値を読み(ステップS116)、ステップS14を繰り返す。
次に、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置を含む並列計算機について説明する。
最初に、図31を参照して、リダクション演算について簡単に説明する。リダクション演算は、図28(A)に示すバタフライによるバリア同期を利用して実行される。従って、図31(A)は、基本的には、図28(A)と同様の処理の流れを示す。換言すれば、図31(A)は、4個のプロセス#0〜#3の間において、バタフライによるバリア同期を利用してリダクション演算を行なう例を示す。
図31(A)における個々のプロセスは、図31(B)に示すように表される。図31(B)は、基本的には図28(B)と同様の記号を表すが、さらに、リダクション演算の演算途中データを含む点のみが図28(B)と異なる。図31(B)において、中央の自プロセスを表すプロセス番号の下部に、演算途中データが示される。バリアポイント到着時のデータ及びバリア同期成立時のデータも、演算途中データとして表される。
例えば、最初のステージ#1において、各プロセスは、バリア同期ポイントに到着する。この後、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに、バリアポイント到着の信号と、演算途中データとを送る。
次のステージ#2において、各プロセスは、前のステージ#1の予め設定されたプロセスからのバリアポイント到着の信号と、演算途中データとを受信する。この後、各プロセスは、受信した演算途中データを用いてリダクション演算を実行し、次のステージ#3の予め設定されたプロセスに、バリアポイント到着の信号と、リダクション演算により算出した演算途中データとを送る。
最後のステージ#3において、各プロセスは、前ステージ#2の予め設定されたプロセスからのバリアポイント到着の信号と、演算途中データとを待ち合わせる。この後、各プロセスが他のプロセスからのバリアポイント到着の信号と、演算途中データとを受信すると、受信した演算途中データを用いてリダクション演算を実行する。全てのプロセス#0〜#3がバリアポイントに到着した後にバリア同期が成立し、リダクション演算が完了する。
次に、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置について説明する。
図9は、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置を含むノードの構成の一例を示す。図10は、図9のリダクション演算装置の構成の一例を示す。図11は、図10のリダクション演算装置の演算装置(演算部)の構成の一例を示す図である。図12は、図10のリダクション演算部が含む演算器の構成の一例を示す。
図9のリダクション演算装置8は、図1に示す並列計算機システムを構成するノード1に設けられる。図9の例において、ノード1は、図2に示すノード1のバリア同期装置6を、リダクション演算装置8で置き換えた構成を含む。即ち、図9の例のノード1は、バリア同期装置6以外は、図2に示すノード1と同様の構成を含む。以下、図2〜図4にも示される要素については、図示又は説明を省略する場合がある。
リダクション演算装置8は、バリア同期を取りつつリダクション演算を行う。リダクション演算装置8は、受信装置81と、同期装置82と、送信装置83と、演算装置84と、ループ経路85とを含む。同期装置82は、制御部821と、同期装置レジスタ部822とを含む。演算装置84は、演算回路840、入力データレジスタ841、出力データレジスタ847を含む。演算回路840は、セレクタ842、セレクタ843、記憶部844、演算部845、デマルチプレクサ(DMUX)846を含む。なお、以下の説明において、同期装置82を「同期部82」と言い、同期装置レジスタ部822を「レジスタ部822」と言い、演算装置84を「演算部84」と言うこととする。
リダクション演算装置8は、演算部84を含む以外は、バリア同期装置6と同様の構成を含む。演算部84を含むので、リダクション演算装置8は、バリア同期開始の信号に代えてリダクション演算開始の信号を入力され、また、バリア同期成立の信号に代えてリダクション演算完了の信号を出力する。
また、演算部84を含むので、リダクション演算装置8は、ネットワーク2との間で、パケットの送受信に加えて、データの送受信も行い、また、CPU3の設定処理部31との間で、制御信号に加えて、データの送受信も行う。
また、演算部84を含むので、リダクション演算装置8は、リダクション演算の対象データを外部から入力され、また、リダクション演算の結果を外部に出力する。具体的には、受信装置81は、受信した2以上の同期装置からのデータから演算対象データを抽出し、演算部84に入力する。演算部84は、抽出された演算対象データに対して演算を行い、演算結果データを送信装置83へ出力する。送信装置83は、同期を行う2以上の同期装置へのデータに、演算結果データを含めてそれぞれ送信する。
同期部82は、図10に示すように、2個の同期資源820を含む。2個の同期資源820は、2個のシグナル受信状態レジスタ823である。2個のシグナル受信状態レジスタ823は、第1面シグナル受信状態レジスタ8231と第2面シグナル受信状態レジスタ8232とを含み、複数のレジスタ部822の各々に設けられる。例えば、同期資源#0は第1面シグナル受信状態レジスタ8231であり、同期資源#1は第2面シグナル受信状態レジスタ8232である。
なお、図10は、同期部82が2個の同期資源820を含むことを、模式的に表している。2個の同期資源820は、実際には、図11に示すように、複数のレジスタ部822の各々に設けられる2個のレジスタである。また、図11は、各々のレジスタ部822が、第1面シグナル受信状態レジスタ8231及び第2面シグナル受信状態レジスタ8232を含む受信状態レジスタ823と、設定情報レジスタ824を含むことを、模式的に表している。換言すれば、レジスタ部822は、図4のレジスタ部622と同様の構成を有する。
リダクション演算の第1の対象データは、CPU3の設定処理部31から、ライトデータとして入力データレジスタ841に入力され、リードデータとして入力データレジスタ841からセレクタ842に入力される。リダクション演算の第2の対象データは、ネットワーク2から受信装置81を介してパケットとして入力され、パケットから取出されて、セレクタ842に入力される。
一方、リダクション演算の結果は、デマルチプレクサ846から、ライトデータとして出力データレジスタ847に出力され、リードデータとして出力データレジスタ847から設定処理部31に出力される。また、リダクション演算の結果は、デマルチプレクサ846から送信装置83に出力され、送信装置83からネットワーク2へパケットとして送信される。
入力データレジスタ841及び出力データレジスタ847は、複数設けられる。入力データレジスタ841は、各々、レジスタ部822と対応する。出力データレジスタ847も同様である。
ライトデータを書き込むべき入力データレジスタ841は、設定処理部31からライトアドレスにより指定される。リードデータを読み出すべき入力データレジスタ841は、制御部821からリードアドレスにより指定される。入力データレジスタ841のリードアドレスは、例えば受信装置81が受信したパケットにおける宛先情報が指示するレジスタ部822に対応し、指示されたレジスタ部822の設定情報に基づいて生成される。ライトデータを書き込むべき出力データレジスタ847は、制御部821からライトアドレスにより指定される。出力データレジスタ847のライトアドレスは、ライトデータのリダクション演算に用いられるレジスタ部822に対応し、指示されたレジスタ部822の設定情報に基づいて生成される。リードデータを読み出すべき出力データレジスタ847は、設定処理部31からリードアドレスにより指定される。
リダクション演算を実行するために、設定処理部31は、IO装置11から入力された設定条件に従って、リダクション演算装置8における第1のバリア同期のメッセージの送信先及び第2のバリア同期のメッセージの送信先を、リダクション演算装置8に設定する。
また、設定処理部31は、システム制御部5を介して、リダクション演算の開始時にリダクション演算装置8に対して演算対象のデータを送信し、また、リダクション演算装置8からリダクション演算結果を受信する。リダクション演算装置8は、ネットワーク2を介して、他ノード1のリダクション演算装置との間で通信を行ない、当該通信に基づいて、リダクション演算を行なう。
更に、リダクション演算を実行するために、リダクション演算装置8が含む同期部82は、同期成立の後に、第2のバリア同期のメッセージの送信を送信装置83に指示(「送信指示」として図示)すると共に、予め定められたリダクション演算を演算部84に指示する。また、送信装置83は、第2のバリア同期のメッセージ送信の指示を受信した場合、第2のバリア同期のメッセージと共に、演算部845におけるリダクション演算の結果を設定処理部31に送信する。
また、同期部82の制御部821は、演算種類情報を保持する。演算種類情報は、演算部845におけるリダクション演算の制御のために、演算の種類を示す情報である。演算種類情報は、CPU3から入力データレジスタを介して制御部821に入力される。演算種類情報も、設定条件の一部として、IO装置11から入力される。
ここで、リダクション演算について簡単に説明する。リダクション演算は、前述したように、バリア同期と同一のアルゴリズムを用いて実行することができる。即ち、リダクション演算は、バタフライによるバリア同期を実行するバタフライネットワークにより実行することができる。
従って、リダクション演算は、図27及び図28に示すように、処理を複数のステージに分割し、各プロセスはステージ毎に他のプロセスと信号の通信を行なう。1個のノード上で1個のプロセスが動作する場合、プロセスとノードとは同様に取り扱っても良い。各ステージにおけるプロセスの処理及び送信先は、基本的に、バリア同期と同じである。
リダクション演算は、図31(A)に示すように、最初のステージ#1においては、各プロセスは、演算の対象となるデータを次のステージ#2のプロセスに送信する。ステージ#2において各プロセスは、前のステージ#1のプロセスからのデータを受信した場合、例えば、自身が持っているデータとの加算を行い、演算結果を次のステージ#3のプロセスに送信する。最後のステージ#3において各プロセスは、前のステージ#2のプロセスからデータを受信した場合、例えば、受信したデータと前のステージ#2での自身の演算結果との加算を行う。この加算の結果が、総和演算の結果となる。
なお、リダクション演算の他の実現方法として、特定のプロセスにデータを送信し、演算を行わせる方法がある。この方法においては、全てのプロセスが演算結果を持つには、特定のプロセスを実行するノードから他のプロセスを実行する他のノードへのブロードキャストが必要となる。バタフライネットワークによるリダクション演算によれば、ブロードキャストは必要ない。
図9の例におけるリダクション演算は、以下のように行われる。
設定処理部31は、バリア同期装置6と同様にして、同期部82におけるリダクション演算の各組に対応するレジスタ部822に、設定条件に基づいて、設定情報を設定する。この後、設定処理部31は、入力データ及びリダクション同期開始信号を演算部84に送信する。これにより、演算部84によるリダクション演算が開始される。最後のステージに対応したレジスタ部822において同期が成立した場合、リダクション演算装置8は、演算結果とリダクション演算完了の信号とを、設定処理部31に送る。
受信装置81はネットワーク2を介してパケットを受信し、受信したパケットに基づいて、同期信号及び宛先情報を同期部82に送信し、パケットとして受信したデータを演算部84に送信する。
演算部84において、入力データレジスタ841は、CPU3から送信されたリダクション演算の対象である入力データ(図10において「入力データ」として図示)を一時格納し、制御部821からの指示に応じて、格納したデータを「リードデータ」としてセレクタ842を介して、記憶部844に入力する。CPU3からのデータは、前述したように、リダクション演算の開始時に入力される。
記憶部844は、入力データレジスタ841を介して入力されたデータを記憶する。これにより、記憶部844は、リダクション演算中のデータを保持する。記憶部844の記憶容量は、例えば、(レジスタ部822の数)×(データのビット数)とされる。リダクション演算中のデータを保持すべき記憶部844のアドレスは、制御部821からライトアドレスにより指定される。記憶部844のライトアドレスは、当該リダクション演算に用いられるレジスタ部822に対応し、当該レジスタ部822の設定情報に基づいて生成される。
記憶部844に格納されたリダクション演算中のデータは、制御部821からリードアドレスを指定することにより、読み出されて演算部845に入力される。記憶部844のリードアドレスは、当該リダクション演算に用いられるレジスタ部822に対応し、当該レジスタ部822の設定情報に基づいて生成される。
セレクタ842は、制御部821からの入力部選択の指示に従って、入力データレジスタ841からのデータ、又は、受信装置1からのデータを選択して、セレクタ843を介して、記憶部844又は演算部845に入力する。入力部選択の指示は、受信装置81から同期信号及び宛先情報が入力された場合には、受信装置81のデータをセレクタ842に出力するようにされ、これ以外の場合には、入力データレジスタ841のリードデータをセレクタ842に出力するようにされる。
セレクタ843は、制御部821からの入出力部選択の指示に従って、セレクタ842又は演算部845からの入力を、記憶部844又は演算部845に入力する。入出力部選択の指示は、セレクタ842からデータが入力された場合には、セレクタ842のデータを入力するようにされ、これ以外の場合には、演算部845のデータを入力するようにされる。また、入出力部選択の指示は、同期が成立した場合には、入力されたデータを演算部845に出力するようにされ、これ以外の場合には、入力されたデータを記憶部844に出力するようにされる。
演算部845は、同期が成立した場合、記憶部844で待ち合わせているデータと、セレクタ842を介して入力するパケットからのデータ又は先の演算結果とについて、所定の演算を行なう。即ち、演算部845は、同期部82の制御部821からの指示を受信した場合、記憶部844に記憶されたデータを用いて、リダクション演算を行う。具体的には、演算部845は、制御部821からの演算指示に従って、所定の演算を実行して、その結果を、デマルチプレクサ846に入力すると共に、セレクタ843に入力する。
演算部845は、図12に示すように、演算ユニット8451〜8454と、マルチプレクサ8455とを含む。加算部(ADD)8451、最小値算出部(MIN)8452、最大値算出部(MAX)8453、論理和演算部(Logical)8454が、演算ユニットを構成する。演算ユニット8451〜8454は、各々、予め定められた演算を実行する。
演算部845は、記憶部844から入力するデータつまり第1データと、入力データレジスタ841から入力するデータ、受信装置81が受信したパケットからのデータ又は演算部845が前ステージで行なった演算結果つまり第2データとの間で、指示された種類の演算を行なう。演算ユニット8451〜8454は、第1データ及び第2データを入力されて、これらについての演算を行い、演算結果をマルチプレクサ8455に出力する。演算種類情報は、制御部821からの演算指示により指示される。この演算指示は、演算の種類を示す演算種類情報に基づいて、制御部821により生成される。マルチプレクサ8455は、演算指示に従って、演算ユニット8451〜8454での演算結果のいずれかを選択して出力する。
デマルチプレクサ846は、出力部選択を指示する制御部821からの制御に従って、演算部845からの入力を、出力データレジスタ847又は送信装置83に入力する。出力部選択の指示は、リダクション演算が完了する以前には、演算部845からのデータを送信装置83に出力するようにされ、これ以外の場合には、出力データレジスタ847に出力するようにされる。
出力データレジスタ847は、リダクション演算の結果を、CPU3に出力する。出力データレジスタ847から出力されるリダクション演算結果は、リダクション演算完了時にCPU3に入力される。
送信装置83は、演算回路840のデマルチプレクサ846から演算結果を受信し、制御部821から送信指示を受信した場合、これらに基づいて、生成したパケットをネットワーク2へ送信する。
同期部82は、バリア同期装置6の同期部62と同様にして、ステージ毎に演算の中間結果の送信先を変更する処理を行う。同期部82の制御部821は、バリア同期のメッセージ及び設定情報を受信装置81から受信した場合、受信した設定情報に対応するレジスタ部822にバリア同期のメッセージを送る。
制御部821は、同期が成立した場合、送信装置83へバリア同期のメッセージの送信指示を出す。バリア同期のメッセージの送信指示は、図10では「送信指示」と示す。この時、制御部821は、自プロセス又は自ノード1の同期部82内の指定されたレジスタ部822にバリア同期のメッセージを送信することに加えて、演算部84を制御する。即ち、制御部821は、演算部84に入力されているデータと、記憶部844で待ち合わせているデータとの間で、リダクション演算を行なわせる。一方、同期が成立していない場合、制御部821は、データを記憶部844に保持させる。
自プロセス又は自ノード1の同期部82の指定されたレジスタ部822にバリア同期のメッセージを送信した場合において、同期が成立した場合、制御部821は、更に、演算結果と記憶部844で待ち合わせているデータとの演算を繰り返すよう演算部84を制御する。一方、同期が成立しない場合、制御部821は、演算結果を記憶部844に送信する。
制御部821は、設定処理部31からリダクション演算開始の信号を受け取ると、指定された組つまりレジスタ部822の送信先に、バリア同期のメッセージと設定処理部31から入力されたデータとを送信する。この後、最後の組で同期が成立した場合、制御部821は、演算結果とリダクション演算完了の信号とを、設定処理部31に送信する。
図13は、図9のリダクション演算装置8が実行する、バタフライによるバリア同期を行いつつリダクション演算を行う処理の処理フローを示す。
このリダクション演算はバリア同期を利用する。従って、図13の処理フローは、リダクション演算対象のデータの送受信処理(ステップS22)及びリダクション演算処理(ステップS214)以外は、図7の処理フローとほぼ同一である。従って、ステップS22及びS214以外については、簡単に説明する。
CPU3の設定処理部31は、バリア同期を利用したリダクション演算を開始する前に、バリア同期を利用したリダクション演算のアルゴリズムと設定条件とに基づいて、レジスタ部822の役割を決定し、各々のレジスタ部822の設定情報レジスタ824に、バタフライでの次ステージに対応した設定情報を設定する(ステップS21)。
CPU3は、リダクション演算を開始するため、リダクション演算の入力データ、換言すれば、リダクションデータと、演算種類情報とを入力データレジスタへ送信する(ステップS22)。入力データレジスタ841は、リダクションデータをセレクタ842へ入力し、演算種類情報を制御部821へ入力する。
CPU3は、プロセスがバリアポイントに到達した場合、同期部82に対しリダクション演算開始の信号、換言すれば、同期信号を含むリダクション演算のメッセージを送る(ステップS23)。リダクション演算開始信号は、入力レジスタ番号と、最初のステージに対応した設定情報とを含む。
同期部82の制御部821は、リダクション演算開始信号を受信すると、リダクション演算開始信号にて指定された番号に対応するレジスタ部822の設定情報レジスタ824の値を読む(ステップS24)。
制御部821は、リダクション演算開始信号のシーケンス番号の最下位の1ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「0」又は「1」のいずれであるか調べる(ステップS25)。
同期面選択情報の値が「0」である場合、制御部821は、設定情報レジスタ824の値の中の他ノード1のレジスタ部822を指定する値に基づいて、送信装置83に対しパケット送信指示の信号を出す(ステップS26)。また、送信装置83は、設定情報レジスタ824の値の中の自ノード1のレジスタ部822を指定する値に基づいて、設定情報レジスタ824において指定されたレジスタ部822の同期資源#0である、第1面シグナル受信状態レジスタ8231の値を読む(ステップS26)。
同期面選択情報の値が「1」である場合、制御部821は、設定情報レジスタ824の値の中の他ノード1のレジスタ部822を指定する値に基づいて、送信装置83に対しパケット送信指示の信号を出す(ステップS27)。また、送信装置83は、設定情報レジスタ824の値の中の自ノード1のレジスタ部822を指定する値に基づいて、設定情報レジスタ824において指定された次ステージのレジスタ部822における同期資源#1である、第2面シグナル受信状態レジスタ8232の値を読む(ステップS27)。
続いて、同期部82が、次ステージの受信状態レジスタ823に同期状態を示す「1」が設定されているか否かを調べる(ステップS28)。受信状態レジスタ823に「1」が設定されている場合(ステップS28 Yes)、同期成立となる。一方、受信状態レジスタ823に「1」が設定されていない場合(ステップS28 No)、同期は成立していない。
同期が成立していない場合(ステップS28 No)、制御部821は、リダクション演算開始信号のシーケンス番号の最下位の1ビット、換言すれば、同期面選択情報を読み、読み取った同期面選択情報の値が「0」又は「1」のいずれであるか調べる(ステップS29)。
同期面選択情報の値が「0」である場合、制御部821は、設定情報レジスタ824において指定された次ステージのレジスタ部822における同期資源#0の受信状態レジスタ823に「1」を書き込む(ステップS210)。同期面選択情報の値が「1」である場合、制御部821は、設定情報レジスタ824において指定された次ステージのレジスタ部822における同期資源#1の受信状態レジスタ823に「1」を書き込む(ステップS211)。
この後、同期部82が、パケットの受信を待ち合わせ、受信装置81がパケットを受信した場合、受信したパケットに基づいて、同期面選択情報、同期信号及び宛先情報となる設定情報を取り出し、同期部82に送信する(ステップS212)。
同期部82の制御部821は、受信装置81からの信号を受信した場合、指定されたレジスタ部822の設定情報レジスタ824の値を読み取り(ステップS213)、ステップS25を繰り返す。
一方、ステップS28において受信状態レジスタ823に「1」が設定されている場合、換言すれば、同期が成立している場合(ステップS28 Yes)、演算回路840がリダクション演算を行なう(ステップS214)。演算対象となるデータは、レジスタ部822が最初のステージの次ステージに対応している場合には入力データレジスタの値である。また、レジスタ部822がそれ以降のステージに対応しており、同期成立の要因がパケットからの同期信号である場合には、演算対象となるデータはパケットに含まれるデータである。受信した同期信号が自プロセス又は自ノード1の同期装置からのバリア同期のメッセージである場合、前ステージにおける演算結果と、同期が成立したレジスタ部822に対応する記憶部844内のアドレスに格納するデータとの間で演算を行なう。受信した情報が演算結果の場合は、入力データレジスタから制御部821に入力された演算種類情報に基づいて、演算の種類が指定される。
この後、制御部821は、更に、レジスタ部822がバリアネットワークにおける最後のステージに対応したものか否かを調べる(ステップS215)。最後のステージに対応するレジスタ部822で同期が成立した場合(ステップS215 Yes)、制御部821は、リダクション演算の結果を出力データレジスタに出力し、リダクション演算完了の信号をCPU3に送る(ステップS216)。CPU3は、制御部821からのリダクション演算完了の信号を受け取り、リダクション演算完了を知る(ステップS217)。
また、ステップS215においてレジスタ部822が最後のステージに対応したものでない場合(ステップS215 No)、制御部821は、ステップS26又はS27において読んだ受信状態レジスタ823の属するレジスタ部822の設定情報レジスタ824の値を読み(ステップS218)、ステップS25を繰り返す。
図15〜図26は、図7のバタフライによるバリア同期処理及びこれを利用したリダクション演算処理における各ステージ間でのバリア同期のメッセージの流れを示す。
図15〜図26は、3個のプロセス#0、#1、#2の間において、バタフライによるバリア同期が行われる場合について示し、また、バタフライによるバリア同期を利用したリダクション演算が行われる場合について示す。更に、図15〜図26から判るように、始点のステージ及び終点のステージとして、同一のレジスタ部622が用いられる。従って、始点のステージ及び終点のステージが、図17(A)等に示すように「始点・終点ステージ」と表される。また、始点・終点のステージ以外のステージは、図17(A)等に示すように「中継ステージ」と表される。なお、図15のみにおいて、3個のプロセス#0、#1、#2を点線で囲んで示す。
ここで、プロセス#0の中継ステージとしてステージ#58が使用され、プロセス#1の中継ステージとしてステージ#63が使用され、プロセス#2の中継ステージとしてステージ#52が使用されるものとする。
バタフライによるバリア同期に着目すると、図15〜図26において、始点・終点ステージである3個のステージ#5、#2、#6は、図15(B)と同様に表される。中継ステージである3個のステージ#58、#63、#52も、図15(B)と同様に表される。
バタフライによるバリア同期を利用したリダクション演算に着目すると、図15〜図26において、始点・終点ステージである3個のステージ#5、#2、#6は、図15(C)と同様に表される。中継ステージである3個のステージ#58、#63、#52も、図15(C)と同様に表される。
以下、バタフライによるバリア同期を利用したリダクション演算について説明することにより、併せてバタフライによるバリア同期について説明することとする。
更に、図17〜図26においては、バタフライによるバリア同期を利用したリダクション演算処理と合せて、受信したパケットのシーケンス番号の整合性のチェック処理が実行される。これは、各プロセスが受信したパケットのシーケンス番号が正しいとは限らないためである。制御部621のチェック回路6211が、受信したパケットのシーケンス番号と、そのステージが受信しているパケット数との整合性を確認する。この確認の結果、シーケンス番号とパケット数とが整合する場合にのみ、同期面選択情報に基づいて、2個の受信状態レジスタ623の一方が選択される。
図16は、シーケンス番号とパケット数との整合性について示す。
例えば、図16に示すように、バリア同期のメッセージが未発行である始点・終点のステージについて、差分値が(パケットのシーケンス番号)−(ステージのシーケンス番号)により算出される。また、バリア同期のメッセージが発行済である始点・終点のステージについて、差分値が(パケットのシーケンス番号)−(ステージのシーケンス番号)+1により算出される。
一方、バリア同期のメッセージが未発行である始点・終点のステージ以外のステージについて、差分値が(パケットのシーケンス番号)−(ステージのシーケンス番号)により算出される。また、バリア同期のメッセージが発行済である始点・終点のステージ以外のステージについて、差分値が(パケットのシーケンス番号)−(ステージのシーケンス番号)により算出される。始点・終点のステージと始点・終点のステージ以外のステージとの間で、バリア発行の状態に依存して差分値が変わるのは、ステージのシーケンス番号はステージがパケットを送信したときに「+1」されるためである。
チェック回路6211は、以上のようにして差分値を算出し、算出した差分値と受信状態レジスタの値(換言すれば、フラグの数)とを比較する。フラグの数については後述する。チェック回路6211は、比較の結果が一致する場合、受信したパケットのシーケンス番号が正しいものと判断して、同期面選択情報に基づいて、2個の受信状態レジスタ623の一方を選択する。
以下、3個のプロセス#0、#1、#2の間において、バタフライによるバリア同期、バタフライによるバリア同期を利用したリダクション演算、及び受信パケットのシーケンス番号のチェックが行われる場合について、図17〜図26を参照して説明する。
図17〜図26に示す例は、第1面シグナル受信状態レジスタ8231を用いたバリア同期処理及びリダクション演算処理(以下、「第1面を用いた処理」という)において、プロセス#0、#1、#2がバリア同期のメッセージを発行し、プロセス#0及び#2においてバリア同期が成立するが、ステージ#63において処理が遅れた場合の例である。更に、図17〜図26に示す例は、ステージ#63において処理が遅れた結果、第2面シグナル受信状態レジスタ8232を用いたバリア同期処理及びリダクション演算処理(以下、「第2面を用いた処理」という)において、プロセス#0、#2がバリア同期のメッセージを発行し、かつ、第1面を用いた処理において、プロセス#1においてバリア同期が成立する場合の例である。
最初に、図17(A)は、第1面を用いた処理について、バリア同期のメッセージが発行される前における状態を示す。図17(B)は、第2面を用いた処理について、バリア同期のメッセージが発行される前における状態を示す。図17(C)は、図17(A)及び図17(B)の状態における、第1面シグナル受信状態レジスタ8231及び第2面シグナル受信状態レジスタ8232の状態を示す。以上は、図18、図19、図21、図22、図24、図26についても同様である。なお、以下の説明において、第1面シグナル受信状態レジスタ8231を「第1面レジスタ8231」と言い、第2面シグナル受信状態レジスタ8232を「第2面レジスタ8232」と言うこととする。
図17(A)及び図17(B)において、プロセス#0、#1、#2は、バリアポイントに到達していない。この時、第1面レジスタ8231において、図17(C)に示すように、領域L、領域R、領域Sの各々におけるフラグが、「0」にリセットされている、領域Lは、ローカル(自ノード)からパケットを受信したことを示すフラグとして「1」がセットされる、領域Rは、リモート(他ノード)からパケットを受信したことを示すフラグがセットされる領域である。領域Sは、始点・終点のステージのみにおいて、パケットを送信したことを示すフラグがセットされる領域である。
なお、図17(C)に示すように、図17(A)及び図17(B)の時点において、各ステージが処理するパケットのシーケンス番号の実体は「36a」であるものとする。また、第1面を用いた処理におけるパケットの発行時シーケンス番号は「36a」であり、成立時シーケンス番号は「36a」であるものとする。
次に、第1面を用いた処理において、プロセス#0、#1、#2がバリアポイントに到達して、図18(A)に示すように、バリア同期のメッセージを発行する。第2面を用いた処理には、図18(B)に示すように、変化が無い。
この時、図18(C)に示すように、始点・終点のステージ#5、#2、#6がバリア同期のメッセージを発行したので、ステージ#5、#2、#6が使用する第1面レジスタ8231の各々において、領域Sにフラグ「1」がセットされる。また、各ステージが処理するパケットのシーケンス番号の実体が「36b」とされる。なお、ステージ#5、#2、#6が次にパケットを発行する時のシーケンス番号も、「36c」とされる。
次に、第1面を用いた処理において、ステージ#5、#2、#6、#58、#52において処理が進んで、図19(A)に示すように、バリア同期が成立する。しかし、中継ステージ#63においては、処理が遅れている。第2面を用いた処理には、図19(B)に示すように、変化が無い。この時、図19(C)に示すように、ステージ#5、#6が2個のパケットを受信したので、ステージ#5、#6が使用する第1面レジスタ8231の各々において、領域L及び領域Rにフラグ「1」がセットされる。
これに先立って、例えば、ステージ#2において、図20に示すように、ステージ#6からのパケットのシーケンス番号「0x36a」と、ステージ#2のシーケンス番号「0x36b」との差分値DIFFが算出される。この場合、(ステージ#6からのパケットのシーケンス番号−ステージ#2のシーケンス番号)+1=(0x36a―0x36b)+1=0となるため、差分値DIFF=0である。この後、差分値DIFFと、第1面を用いた処理及び第2面を用いた処理においてステージ#2が受信したパケットの数とが比較される。ステージ#2が受信したパケットの数は、図20に示すように、図18(C)に示す状態におけるパケットの数から算出される。差分値DIFFとステージ#2が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、パケットの受信処理が実行され、ステージ#2についての第1面レジスタ8231が、図18(C)の状態から図19(C)の状態に更新される。
なお、受信パケットのシーケンス番号のチェックは、ステージ#2のみならず、他の各ステージにおいても実行されるが、以下の説明においては、ステージ#2について示すものとする。
次に、第1面を用いた処理において、ステージ#5、#6において処理が進んで、図21(A)に示すように、バリア同期が成立したことに伴う処理が完了する。具体的には、図21(C)に示すように、ステージ#5、#6においてバリア同期が成立したので、ステージ#5、#6が使用する第1面レジスタ8231の各々において、領域L、領域R、領域Sのフラグ「1」がリセットされる。一方、依然として、中継ステージ#63においては、処理が遅れている。従って、ステージ#2が使用する第1面レジスタ8231には、領域Rと領域Sに、フラグがセットされたままである。第2面を用いた処理には、図21(B)に示すように、変化が無い。
次に、プロセス#0、#2において処理が進んでバリアポイントに到達して、バリア同期のメッセージを発行する。一方、依然として、中継ステージ#63においては、処理が遅れている。
この時、ステージ#5、#6が同期を取る相手方であるステージ#2が使用する第1面レジスタ8231には少なくとも1個のフラグ「1」がセットされているので、図22(C)に示すように、第2面レジスタ8232が使用される。換言すれば、第1面レジスタ8231は、格納する値が全て「0」でなければ、新たなバリア同期のためには使用されない。これにより、第2面を用いた処理が開始される。具体的には、図22(C)に示すように、ステージ#5、#6が使用する第2面レジスタ8232の各々において、領域Sにフラグ「1」がセットされる。また、ステージ#5、#6が処理するパケットのシーケンス番号の実体が「36c」とされる。
この後、ステージ#2において、図22(B)に示すように、ステージ#6からのバリア同期のメッセージが到達する。従って、ステージ#2において、第1面を用いた処理におけるバリア同期が成立する前に、第2面を用いた処理におけるバリア同期のメッセージが到達してしまう。しかし、図22(C)に示すように、第1面レジスタ8231の値は、上書きにより破壊されること無く、正しい状態で保存される。ステージ#2が使用する第2面レジスタ8232において、領域Rにフラグ「1」がセットされる。
なお、この時、図23に示すように、ステージ#6からのパケットのシーケンス番号「0x36b」と、ステージ#2のシーケンス番号「0x36b」との差分値DIFFが算出される。この場合、(ステージ#6からのパケットのシーケンス番号−ステージ#2のシーケンス番号)+1=(0x36b―0x36b)+1=1となるため、差分値DIFF=1である。この後、差分値DIFFと、第1面を用いた処理及び第2面を用いた処理においてステージ#2が受信したパケットの数とが比較される。ステージ#2が受信したパケットの数は、図23に示すように、図21(C)に示す状態におけるパケットの数から算出される。差分値DIFFとステージ#2が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、ステージ#2についての第2面レジスタ8232が、図21(C)の状態から図22(C)の状態に更新される。
次に、中継ステージ#63において処理が進んで、バリア同期のメッセージを発行する。これにより、第1面を用いた処理におけるステージ#2において処理が進んで、図24(A)に示すように、バリア同期が成立する。ステージ#2が使用する第1面レジスタ8231において、領域Lにフラグ「1」がセットされる。
この時、図25に示すように、ステージ#6からのパケットのシーケンス番号「0x36a」と、ステージ#2のシーケンス番号「0x36b」との差分値DIFFが算出される。この場合、(ステージ#6からのパケットのシーケンス番号−ステージ#2のシーケンス番号)+1=(0x36a―0x36b)+1=0となるため、差分値DIFF=0である。この後、差分値DIFFと、第1面を用いた処理及び第2面を用いた処理においてステージ#2が受信したパケットの数とが比較される。ステージ#2が受信したパケットの数は、図25に示すように、図22(C)に示す状態におけるパケットの数から算出される。差分値DIFFとステージ#2が受信したパケットの数とが一致する場合、正しいパケットを受信していると判断され、ステージ#2についての第2面レジスタ8232が、図22(C)の状態から図24(C)の状態に更新される。
次に、第1面を用いた処理において、ステージ#2において処理が進んで、図26(A)に示すように、バリア同期が成立したことに伴う処理が完了する。具体的には、図26(C)に示すように、ステージ#2においてバリア同期が成立したので、ステージ#2が使用する第1面レジスタ8231において、領域L、領域R、領域Sのフラグ「1」がリセットされる。第2面を用いた処理には、図26(B)に示すように、変化が無い。これにより、再度、第1面レジスタ8231を用いることができる。
以上に説明した並列計算機システムにおいては、バリア同期のアルゴリズムはバタフライによるが、並列計算機システムにおけるバリア同期は、バタフライによるバリア同期に限られない。
例えば、バリア同期のアルゴリズムは、ディスエミネーションであっても良い。これにより、プロセス数が2のべき乗でない場合であっても、並列計算機システムにおいて、ディスエミネーションによるバリア同期処理を実行することができ、また、ディスエミネーションによるバリア同期によるリダクション演算処理を実行することができる。
また、例えば、バリア同期のアルゴリズムは、ペアワイズエクスチェンジウィズリカーシブダブリング(Pairwise exchange with recursive doubling)であっても良い。これにより、プロセス数が2のべき乗でない場合であっても、並列計算機システムにおいて、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期処理を実行することができ、また、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期によるリダクション演算処理を実行することができる。
また、以上に説明した並列計算機システムにおいては、バリア同期装置は各々のノード、換言すれば、プロセッサに設けられるが、これに限られない。
例えば、マルチプロセッサ(マルチプロセッサコア)により構成される並列計算機システムにおいて、バリア同期装置は、各々のノード、換言すれば、プロセッサコアに設けられるのではなく、プロセッサコアとは独立に設けられるようにしても良い。換言すれば、1個のバリア同期装置が、複数のプロセッサコアに共通に設けられるようにしても良い。また、マルチプロセッサにより構成される並列計算機システムにおいて、リダクション演算装置は、各々のノード、換言すれば、プロセッサコアに設けられるのではなく、プロセッサコアとは独立に設けられるようにしても良い。換言すれば、1個のリダクション演算装置が、複数のプロセッサコアに共通に設けられるようにしても良い。