(57)【要約】【課題】並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、高速でバリア同期処理を実行するバリア同期装置を提供する。【解決手段】受信装置６１は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を受信した場合、第１の同期信号を同期装置６２に送信する。同期装置６２は、設定条件に従って予め設定されたｎ個の第１の同期信号についての同期の成立の後に、前記設定条件に従ってその送信先が予め設定されたｍ個の第２の同期信号の送信を指示する。送信装置６３は、前記送信の指示を受信した場合、ｍ個の送信先に第２の同期信号を送信する。【選択図】図５
2010122848.tif 000002
【特許請求の範囲】
【請求項１】
バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信装置と、
前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の第２の同期信号の送信を指示する同期装置と、
前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記第２の同期信号を送信する送信装置を備える
ことを特徴とするバリア同期装置。
【請求項２】
前記バリア同期のアルゴリズムはバタフライアルゴリズムである
ことを特徴とする請求項１に記載のバリア同期装置。
【請求項３】
前記バリア同期のアルゴリズムはディスエミネーション(Dissemination)アルゴリズムである
ことを特徴とする請求項１に記載のバリア同期装置。
【請求項４】
前記バリア同期のアルゴリズムはペアワイズエクスチェンジウィズリカーシブダブリング(Pairwise exchange with recursive doubling)アルゴリズムである
ことを特徴とする請求項１に記載のバリア同期装置。
【請求項５】
前記同期装置が、各々がｎ個の前記第１の同期信号で構成される複数の組について、各々、同期を取る
ことを特徴とする請求項１に記載のバリア同期装置。
【請求項６】
バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力装置と、
バリア同期を行うバリア同期装置と、
前記入力装置から入力された前記設定条件に従って、バリア同期装置における第１の同期信号の送信先及び第２の同期信号の送信先を、前記バリア同期装置に設定する設定処理部とを備え、
前記バリア同期装置が、更に、
前記設定条件に従ってその送信先が予め設定された前記第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信装置と、
前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の前記第２の同期信号の送信を指示する同期装置と、
前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記第２の同期信号を送信する送信装置とを備える
ことを特徴とするバリア同期処理システム。
【請求項７】
入力装置が、バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力ステップと、
設定処理部が、前記入力装置から入力された前記設定条件に従って、前記バリア同期における第１の同期信号の送信先及び第２の同期信号の送信先を設定する設定ステップと、
受信装置が、前記設定条件に従ってその送信先が予め設定された前記第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信ステップと、
前記同期装置が、前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の前記第２の同期信号の送信を指示する同期ステップと、
送信装置が、前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記第２の同期信号を送信する送信ステップを備える
ことを特徴とするバリア同期処理方法。
【請求項８】
バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信装置と、
前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、予め定められたリダクション演算を指示し、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の第２の同期信号の送信を指示する同期装置と、
入力されたデータを記憶する記憶装置と、
前記同期装置からの前記予め定められたリダクション演算の指示を受信した場合、前記記憶装置に記憶されたデータを用いて前記予め設定されたリダクション演算を行う演算器と、
前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記演算器における演算の結果と、前記第２の同期信号とを送信する送信装置とを備える
ことを特徴とするリダクション演算装置。
【請求項９】
バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力装置と、
バリア同期を取りつつリダクション演算を行うリダクション演算装置と、
前記入力装置から入力された前記設定条件に従って、リダクション演算装置における第１の同期信号の送信先及び第２の同期信号の送信先を、前記リダクション演算装置に設定する設定処理部を備え、
前記リダクション演算装置が、更に、
前記設定条件に従ってその送信先が予め設定された前記第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信装置と、
前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、予め定められたリダクション演算を指示し、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の前記第２の同期信号の送信を指示する同期装置と、
入力されたデータを記憶する記憶装置と、
前記同期装置からの前記予め定められたリダクション演算の指示を受信した場合、前記記憶装置に記憶されたデータを用いて前記予め設定されたリダクション演算を行う演算器と、
前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記演算器における演算の結果と、前記第２の同期信号とを送信する送信装置とを備える
ことを特徴とするリダクション演算処理システム。
【請求項１０】
入力装置が、バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力ステップと、
設定処理部が、前記入力装置から入力された前記設定条件に従って、前記バリア同期における第１の同期信号の送信先及び第２の同期信号の送信先を設定する設定ステップと、
受信装置が、前記設定条件に従ってその送信先が予め設定された前記第１の同期信号を受信した場合、前記第１の同期信号を同期装置に送信する受信ステップと、
同期装置が、前記設定条件に従って予め設定されたｎ（ｎは正の整数）個の前記第１の同期信号についての同期を取り、当該同期成立の後に、予め定められたリダクション演算を指示し、前記設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の前記第２の同期信号の送信を指示する同期ステップと、
記憶装置が、入力されたデータを記憶する記憶ステップと、
演算装置が、前記同期装置からの前記リダクション演算の指示を受信した場合、前記記憶装置に記憶されたデータを用いて前記予め設定されたリダクション演算を行う演算ステップと、
送信装置が、前記同期装置からの前記送信の指示を受信した場合、前記予め設定されたｍ個の送信先に、前記演算器における演算の結果と、前記第２の同期信号とを送信する送信ステップとを備える
ことを特徴とするリダクション演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バリア同期装置、バリア同期処理システム及び方法、リダクション演算装置、リダクション演算処理システム及び方法に関し、例えば、並列演算を実行する複数のノードの各々に設けられるバリア同期装置、バリア同期処理システム及び方法、リダクション演算装置、リダクション演算処理システム及び方法に関する。
【背景技術】
【０００２】
並列処理されている複数のプロセス間の同期をとる方法として、バリア同期が知られている。バリア同期では同期を取るポイント、つまりバリアポイントが設定され、バリア同期を行なうプロセスはバリアポイントに処理が到着した場合、処理を一時的に停止する。バリア同期を行なうプロセスは、バリア同期を行なう、並列処理されている全てのプロセスがバリアポイントに到着した時点で、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【０００３】
一方、複数のプロセスが持つデータを対象とした演算として、リダクション演算が知られている。代表的なリダクション演算としては、例えば、データの総和を求める演算、最大値、最小値を求める演算等がある。リダクション演算には、演算結果を特定のプロセスのみが持つ場合と、全てのプロセスが持つ場合とがある。しかし、いずれの場合でもプロセス間でデータの通信が行なわれるので、リダクション演算は、バリア同期と同じアルゴリズムを用いて実行することができる。
【０００４】
なお、あるプロセッサから他の全てのプロセッサにツリー上に通信するブロードキャストを行い、これらブロードキャストを最後に受けたプロセッサ間で相互に通信するバタフライバリアを行い、このバタフライバリアに参加したプロセッサからバタフライバリアに参加しない全プロセッサに終了通知を行うデータ通信方法が提案されている。
【特許文献１】特開平０３−０９８１５２号公報
【特許文献２】特開平０７−１５２７１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
バリア同期を実行する際、アルゴリズムによっては、プロセスはバリアポイント到着の信号の送信先をステージ毎に変更する必要がある。リダクション演算においても、プロセスは演算の中間結果の送信先をステージ毎に変更する必要がある。本発明者は、バリア同期及びリダクション演算の高速化のために、送信先の変更処理を高速で行う手段について検討した。
【０００６】
本発明者の検討によれば、バリア同期、リダクション演算を全てソフトウェアによって実現する場合、ステージ毎の送信先変更処理にＣＰＵが介在するため、オーバーヘッドが発生し易くなる。従って、結果として、バリア同期、リダクション演算を高速化する事はできない。一方、送信先変更処理をハードウェアによって実現すれば、ステージ毎のＣＰＵの介在がなくなるため、バリア同期、リダクション演算の高速化が見込まれる。従って、送信先の変更処理はハードウェアにより実現することが望ましい。
【０００７】
しかし、この場合、高速化のために採用されるハードウェアの構成によっては、複数のノードをネットワークにより接続する場合、ノード間のネットワークの構成が限定される場合がある。
【０００８】
本発明は、かかる問題を解決すべく、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でバリア同期処理を実行するバリア同期装置を提供することを目的とする。
【０００９】
また、本発明は、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でバリア同期処理を実行するバリア同期処理システムを提供することを目的とする。
【００１０】
また、本発明は、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でバリア同期処理を実行するバリア同期処理方法を提供することを目的とする。
【００１１】
また、本発明は、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でリダクション演算を実行するリダクション演算装置を提供することを目的とする。
【００１２】
また、本発明は、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でリダクション演算を実行するリダクション演算処理システムを提供することを目的とする。
【００１３】
また、本発明は、並列演算を実行する複数のノードにおいて、複数組の信号の同期をとる同期部を備えることにより、ノード間のネットワーク構成を限定せず、高速でリダクション演算を実行するリダクション演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一実施態様であるバリア同期装置は、受信装置と、同期装置と、送信装置とを備える。受信装置は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を受信した場合、第１の同期信号を同期装置に送信する。同期装置は、設定条件に従って予め設定されたｎ（ｎは正の整数）個の第１の同期信号についての同期を取り、当該同期成立の後に、設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の第２の同期信号の送信を指示する。送信装置は、同期装置からの送信の指示を受信した場合、予め設定されたｍ個の送信先に、第２の同期信号を送信する。
【００１５】
本発明の一実施態様であるバリア同期処理システムは、バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力装置と、前述した構成を備えバリア同期を行うバリア同期装置と、設定処理部とを備える。設定処理部は、入力装置から入力された設定条件に従って、バリア同期装置における第１の同期信号の送信先及び第２の同期信号の送信先を、バリア同期装置に設定する。
【００１６】
本発明の一実施態様であるバリア同期処理方法は、前述した構成を備えるデータ処理装置により実現される。
【００１７】
本発明の一実施態様であるリダクション演算装置は、前述した構成を備える受信装置と、同期装置と、入力されたデータを記憶する記憶装置と、演算器と、送信装置とを備える。同期装置は、設定条件に従って予め設定されたｎ（ｎは正の整数）個の第１の同期信号についての同期を取り、当該同期成立の後に、予め定められたリダクション演算を指示し、設定条件に従ってその送信先が予め設定されたｍ（ｍは正の整数）個の第２の同期信号の送信を指示する。演算器は、同期装置からの予め定められたリダクション演算の指示を受信した場合、記憶装置に記憶されたデータを用いて予め設定されたリダクション演算を行う。送信装置は、同期装置からの送信の指示を受信した場合、予め設定されたｍ個の送信先に、演算器における演算の結果と、第２の同期信号とを送信する。
【００１８】
本発明の一実施態様であるリダクション演算処理システムは、バリア同期のアルゴリズムと実行条件とを含む設定条件を入力する入力装置と、設定処理部と、前述した構成を備えるリダクション演算装置とを備える。設定処理部は、入力装置から入力された設定条件に従って、リダクション演算装置における第１の同期信号の送信先及び第２の同期信号の送信先を、リダクション演算装置に設定する。
【００１９】
本発明の一実施態様であるリダクション演算処理方法は、前述した構成を備えるデータ処理装置により実現される。
【発明の効果】
【００２０】
本発明の一実施態様であるバリア同期装置、バリア同期を行うデータ処理装置及び方法によれば、第１の同期信号についての同期成立の後に、第２の同期信号が送信されるので、バリア同期を行うことができる。
【００２１】
また、前記設定条件に応じて、バリア同期装置において、ステージ毎にバリアポイント到着の信号の送信先を変更することができる。これにより、送信先の変更処理を実行するためのソフトウェアを不要とすることができる。従って、当該変更処理を実行するためにＣＰＵ及びメモリを使用する必要を無くし、ステージ毎のデータ転送を無くすことができる。
【００２２】
また、ステージ毎のバリアポイント到着の信号の送信先は、バリア同期装置において設定されるので、例えばスイッチによって送信先を変更する必要を無くすことができる。この結果、例えば、ネットワークによりバリア同期装置を備えるノード（コンピュータ）を接続する場合でも、ノード間のネットワーク構成が多段結合網に限定されることを避けることができる。
【００２３】
また、バリア同期装置は、ｎ個の第１の同期信号についての同期をとることができるので、異なるノードに対するバリア同期を、同時に複数行なうことができる。
【００２４】
本発明の一実施態様であるリダクション演算装置、バリア同期を行うリダクション演算を行うデータ処理装置及び方法によれば、以上のバリア同期装置と同様の効果を得ることができ、これにより、バリア同期を取りつつリダクション演算を行うことができる。
【発明を実施するための最良の形態】
【００２５】
（第１の実施態様）
第１の実施態様は、本発明の一実施態様であるバリア同期装置であって、バタフライによりバリア同期を行うバリア同期装置である。
【００２６】
図１は、本発明の一実施態様であるバリア同期装置を備えるノードを複数有するコンピュータネットワークの構成の一例を示す。図２は、本発明の一実施態様であるバリア同期装置を備えるノードの構成の一例を示す。
【００２７】
コンピュータネットワークは、複数のノードつまりコンピュータ１と、これらのノードを接続するネットワーク２とを含む。図１の例においては、４個のノード＃１〜＃４がコンピュータネットワークに設けられる。ネットワーク２により接続された複数のノード１は、並列演算を実行する。複数のノード１は、各々、並列演算におけるバリア同期のために、バリア同期装置６を備える。バリア同期装置６は高速でバリア同期を行う。
【００２８】
ノード１は、ＣＰＵ３と、メモリ４と、システム制御部５と、バリア同期装置６と、入出力装置７とを備える。システム制御部５はノード１を制御する。即ち、システム制御部５は、ＣＰＵ３、メモリ４、バリア同期装置６、入出力装置７を制御する。ＣＰＵ３は、設定処理部３１を備える。
【００２９】
設定処理部３１は、システム制御部５を介して、入出力装置７との間において、必要なデータの送受信を行う。これにより、入出力装置７は、バリア同期のアルゴリズムと実行条件とを含む設定条件を、ＣＰＵ３の設定処理部３１に入力する。また、入出力装置７は、必要に応じて、設定処理部３１から出力されたデータを出力する。
【００３０】
設定処理部３１は、システム制御部５を介して、バリア同期装置６に対してバリアポイント到達の信号を送信し、また、バリア同期装置６からバリア同期成立の信号を受信する。これにより、設定処理部３１は、入出力装置７から入力された設定条件に従って、バリア同期装置６における第１の同期信号の送信先及び第２の同期信号の送信先を、バリア同期装置６に設定する。バリア同期装置６は、設定条件に従って、ネットワーク２を介して、他のノード１のバリア同期装置６との間で通信を行ない、当該通信に基づいて、バリア同期を行なう。
【００３１】
設定処理部３１は、システム制御部５を介して、メモリ４との間において、必要なデータの送受信を行う。これにより、設定処理部３１は、メモリ４にデータを書き込み、また、設定制御部３１はメモリ４からデータを読み出す。このデータは、例えば、後述するリダクション演算に用いられるデータである。
【００３２】
ここで、バリア同期について簡単に説明する。バリア同期は、図３に示すように、バリア同期を行なう複数のプロセス＃０〜＃２は、その処理が同期をとるポイントつまりバリアポイントに到着した場合、自身の処理を停止する。即ち、複数のプロセス＃０〜＃２は自身がバリアポイントに到達した場合、各々、他のプロセスがバリアポイントに到着するのを待ち合わせる。複数のプロセス＃０〜＃２は、各々、バリア同期を行なう全てのプロセス＃０〜＃２がバリアポイントに到着した時点で、即ち、バリア同期が成立した時点で、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【００３３】
このようなバリア同期を実現するアルゴリズムの一つに、バタフライ演算がある。以下、バタフライ演算を単に「バタフライ」と称する。バタフライにおいては、処理を複数のステージに分割し、ステージ毎に他のプロセスと信号の通信を行なう。この例においては、バリア同期のアルゴリズムとして、バタフライが用いられる。
【００３４】
図４は、４個のプロセス＃０〜＃３の間において、バタフライによるバリア同期を行なう例を示す。図４において、例えば、プロセス＃０を円の中に数字の０を付して表し、他のプロセス＃１〜＃３も同様に表す。他の図においても同様とする。
【００３５】
各々のステージにおけるバリアポイント到着の信号の送信先は、ステージ番号をｋ、自プロセス又は自ノード１のプロセス番号をｉとすると、ｉ  ＸＯＲ  ２＾（ｋ−１）となる。ステージ数は、プロセス数Ｎが２のべき乗のとき、ｌｏｇ（Ｎ）となる。
【００３６】
例えば、図４において、プロセス＃０に着目すると、以下のように送信先が予め定められる。即ち、ステージ＃１において、バリアポイント到着を示す信号の送信先はプロセス＃１である。ステージ＃２において、プロセス＃０からのバリアポイント到達を示す信号の受信元はプロセス＃１であり、プロセス＃０からのバリアポイント到達を示す信号の送信先はプロセス＃２である。
【００３７】
これらの信号の送信先及び受信元は、設定条件において、バリア同期のアルゴリズム及び実行条件つまりプロセスの構成が定まることにより、一意に定めることができる。この例においては、バリア同期のアルゴリズムはバタフライであり、実行条件は４個のプロセスであるので、前述したように定めることができる。
【００３８】
そこで、入出力装置７から設定処理部３１に、設定条件が入力される。この例においては、設定条件において、バリア同期のアルゴリズムはバタフライとされ、実行条件は４個のプロセスとされる。これに加えて、実行条件として、当該演算つまりバリア同期におけるステージ数ｋと、各々のプロセス自身つまり自ノード１のプロセス番号ｉも入力される。ステージ数ｋはステージ番号の最大値を示している。
【００３９】
なお、設定処理部３１への設定条件の入力は、これに限られない。例えば、いずれか１個のノード１が、ネットワーク２を介して、他のノード１に各々の設定条件を入力するようにしても良い。また、ネットワーク２に接続された管理用のコンピュータが、ネットワーク２を介して、全てのノード１に各々の設定条件を入力するようにしても良い。
【００４０】
各プロセスは、ステージ毎に他のプロセスとの間でバリアポイント到着の信号を通信し合う。例えば、最初のステージ＃１において、各プロセスは、バリア同期ポイントに到着する。到着のタイミングは、各プロセスで異なる。この場合、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに信号を送る。バタフライネットワークは、図１に示すネットワーク２であって、バタフライによりバリア同期を行う、図２に示すノード１が接続されたネットワークである。これは以下の図においても同じである。
【００４１】
次のステージ＃２において、各プロセスは、バタフライネットワークの前のステージ＃１の予め設定されたプロセスからの信号を待ち合わせる。各プロセスは、他のプロセスから信号を受信した場合、次のステージ＃３の予め設定されたプロセスに信号を送る。
【００４２】
最後のステージ＃３において、各プロセスは、前ステージ＃２の予め設定されたプロセスからの信号を待ち合わせる。各プロセスが他のプロセスからの信号を受けると、全てのプロセス＃０〜＃３がバリアポイントに到着した後にバリア同期が成立した事を知る。この後、各プロセスは、バリア同期が成立したので、次の処理を開始する。
【００４３】
なお、前述したように、バリア同期信号を行なう他の方法として、各プロセスはある特定のプロセスに、バリアポイント到着の信号を送る方法がある。この方法においては、全てのプロセスからバリアポイント到着の信号を受信した後、バリア同期成立を全プロセスに対してブロードキャストを行なう。バタフライネットワークによるバリア同期方式によれば、このブロードキャストは必要ない。
【００４４】
図５は、本発明の一実施態様であるバリア同期装置の構成の一例を示す。図６は、主として、図５のバリア同期装置が備える同期装置の構成の一例を示す。なお、図６において、図５に示す受信装置６１及び送信装置６３を重複して図示している。
【００４５】
バリア同期装置６は、受信装置６１と、同期装置（以下、同期部という）６２と、送信装置６３とを備える。同期部６２は、制御部６２１と、複数の制御レジスタ６２２とを備える。複数の制御レジスタ６２２の各々は、複数のレジスタを含むレジスタ群である。
【００４６】
複数の制御レジスタ６２２は各々、同期信号の組に対応する。換言すれば、複数の制御レジスタ６２２を備えることにより、各々の演算毎に同期信号を制御レジスタに保持し、バリア同期を実行することが可能となる。従って、１組の演算がｎ個の第１の同期信号で構成される場合、同期部６２は、各々がｎ個の第１の同期信号で構成される複数の組について、各々、バリア同期を実行する。この場合、１個のノード１上で複数のプロセスが動作する。
【００４７】
第１の実施態様においては、１個のノード１上で複数のプロセスが動作し、また、１組の演算が実行され、この１組の演算についてバリア同期を実行することができる。また、第１の実施態様においては、１個のノード１上で複数のプロセスが動作する実施態様に代えて、１個のノード１上で１個のプロセスを動作させることができる。この場合、プロセスとノード１とは同一と考えて良い。
【００４８】
第１の実施態様においては、制御レジスタ６２２は、例えばシグナルレジスタと宛先レジスタとを含む。なお、図６において、シグナルレジスタは符号Signalを付して表し、宛先レジスタは符号Destination を付して表す（他の図においても同じ）。
【００４９】
制御部６２１は、複数の制御レジスタ６２２を参照して、その参照結果に基づいて、バリア同期のための同期信号を送信する。シグナルレジスタは、制御レジスタ６２２に対応するプロセス又はノードから同期信号を受信したか否かを示す情報を格納する。これにより、シグナルレジスタは、同期信号の待ち合わせ状況を示す情報を格納する。宛先レジスタは、制御レジスタ６２２が同期信号を送信すべき宛先であるプロセス又はノードを示す情報を格納する。これにより、宛先レジスタは、同期成立の後に同期信号の送信先を示す情報を格納する。
【００５０】
宛先レジスタは、同期信号の送信先が他のノードである場合、送信先となる宛先ノードアドレスおよび制御レジスタ番号を格納する。宛先ノードアドレスは、ノードのネットワークアドレスであり、一意に定まる。制御レジスタ番号は、制御レジスタ６２２の番号であり、ノードにおいて一意に定まる。宛先ノードアドレスは、ノードに予め付与されたノード番号であっても良い。制御レジスタ番号は、制御レジスタ６２２に予め付与された番号又は組番号であっても良い。
【００５１】
宛先ノードアドレス及び制御レジスタ番号を指定することにより、１個のノードにおける１個の制御レジスタが定まる。宛先レジスタは、同期信号の送信先が自ノード１である場合、自プロセス又は自ノード１の同期部６２の制御レジスタ番号を格納する。
【００５２】
バリア同期の実行に先立って、ＣＰＵ３の設定処理部３１は、制御部６２１を介して、制御レジスタ６２２に、設定条件に基づいて、必要なパラメータを設定する。制御レジスタ６２２に設定されるパラメータとしては、例えば、当該制御レジスタ６２２の次ステージの宛先ノードアドレスと、制御レジスタの制御レジスタ番号とが含まれる。前述したように、設定条件は、バリア同期のアルゴリズムと実行条件とを含む。
【００５３】
この設定の後、設定処理部３１が、制御部６２１にバリア同期開始信号を送信することにより、バリア同期が開始される。プロセスの最後のステージにおいて同期が成立した場合、同期部６２は、バリア同期成立、つまりバリア同期完了を示す信号を設定処理部３１に送る。
【００５４】
受信装置６１は、ネットワーク２を介して他ノードと接続され、同期信号を含む他ノードからのパケットを受信する。受信装置６１は、バリア同期のアルゴリズムと実行条件とを含む設定条件に従ってその送信先が予め設定された第１の同期信号を他ノードから受信した場合、受信した第１の同期信号を同期部６２に送信する。このため、受信装置６１は、ネットワーク２を介して、他のノードのバリア同期装置から、バリア同期のためのパケットを受信する。他ノードからのパケットを受信した場合、受信装置６１は、受信したパケットに基づいて、同期信号と宛先を生成して、同期部６２に送信する。具体的には、受信装置６１は、受信したパケットに含まれる同期信号及び宛先の情報を取り出し、同期部６２に送信する。宛先は、同期信号の宛先となる宛先ノードアドレス及び制御レジスタの制御レジスタ番号である。この宛先により、取出された宛先ノードアドレスに対応するノード及び取出された制御レジスタ番号に対応する制御レジスタ６２２を定めることができる。
【００５５】
なお、送信元のノードが複数存在する場合において、受信装置６１が送信元となるノードの数に対応した数だけのネットワークインタフェースを備える場合、複数の受信装置６１を用いて複数のノードから送信されるパケットを同時に受信することができる。これは送信装置６３においても同様である。
【００５６】
同期部６２は、受信装置６１からの同期信号と宛先に基づいて、バリア同期の処理を行なう。このために、同期部６２は、複数組の同期信号の待ち合わせを行ない、各組で同期成立の後、同期信号を宛先により指定された送信先に送信する。これにより、バリア同期を行なうアルゴリズムにおいて、ステージ毎にバリアポイント到着の信号の送信先を変更する処理を高速に行なうことができる。同期信号の各組に対しては、一意に定まる制御レジスタ番号が割り当てられる。同期部６２は、同期信号と制御レジスタ番号の双方を受信装置６１から受信し、同期が成立した組について、対応する同期信号を送信装置６３に出力する。
【００５７】
例えば、同期部６２は、各々の同期信号の組について、設定条件に従って予め設定されたｎ（ｎは正の整数）個の第１の同期信号についての同期を取る。各組において、ｎ個の同期信号が入力された場合、同期成立となる。同期部６２は、同期成立の後に、第２の同期信号の送信を送信装置６３に指示する。第２の同期信号は、ｍ（ｍは正の整数）個とされ、各々について設定条件に従ってその送信先が予め設定される。
【００５８】
同期が成立した場合、同期部６２は、各組について、予め設定された送信先に同期信号を送信する。送信先は、他ノードの同期部、又は、自ノードの同期部６２である。同期信号の送信先が他のノード１である場合、送信先ノードの宛先ノードアドレスと制御レジスタ番号が同期部６２に予め設定されている。この場合、同期部６２は、送信装置６３にパケットの送信指示の信号を送る。同期部６２からのパケット送信指示を受けた送信装置６３は、ネットワーク２を介して、宛先ノードアドレスで指定される他ノードのバリア同期装置に、バリア同期のためのパケットを送信する。一方、同期信号の送信先が自ノードである場合、同期部６２には制御レジスタ番号又は制御レジスタ番号が予め設定されている。同期部６２は、自プロセス又は自ノード１の同期部６２の指定された制御レジスタ６２２に同期信号を送信する。
【００５９】
なお、同期部６２は、ＣＰＵ３の設定処理部３１からバリア同期開始の信号を受信した場合、指定された送信先に対して同期信号を送る。同期部６２は、同期信号の最後の組で同期が成立した場合、バリア同期完了の信号をＣＰＵ３の設定処理部３１に通知する。
【００６０】
送信装置６３は、同期部６２からの送信の指示を受信した場合、予め設定されたｍ個の送信先に、第２の同期信号を送信する。このため、送信装置６３は、同期部６２からパケット送信指示の信号を受け取り、指定された送信先に基づいて、パケットを生成して、ネットワーク２を介して、他のノードに送信する。前述したように、送信先となるノードは、送信先宛先ノードアドレスおよび制御レジスタ番号に基づいて定められる。
【００６１】
図７は、図５のバリア同期装置が実行する、バタフライによるバリア同期処理の処理フローを示す。
【００６２】
ＣＰＵ内に設定された設定処理部３１は、バリア同期を開始する前に、バリア同期のアルゴリズムと設定条件とに基づいて、制御レジスタ６２２の役割を決定し、各々の制御レジスタ６２２の宛先レジスタに、バタフライでの次ステージに対応した宛先ノードアドレスと制御レジスタ番号を設定する（ステップＳ１１）。
【００６３】
このために、設定処理部３１は、宛先ノードアドレス及び制御レジスタ番号を設定すべき制御レジスタ６２２の制御レジスタ番号を、ライトアドレスとして同期部６２に入力する。また、設定処理部３１は、制御レジスタ６２２の宛先レジスタに設定すべき宛先ノードアドレスと制御レジスタ番号とを、ライトデータとして同期部６２の制御部６２１に入力する。ライトアドレス及びライトデータは、制御レジスタ６２２毎に入力される。これに応じて、制御部６２１は、入力されたライトデータである宛先ノードアドレス及び制御レジスタ番号を、ライトアドレスにより指定された制御レジスタ６２２の宛先レジスタに格納する。ライトデータの格納は、実際には、設定処理部３１からのライトアドレス及びライトデータを受信した制御部６２１により実行される。一方、これとは別に、シグナルレジスタの初期値は、例えば予め「０」とされる。
【００６４】
宛先ノードアドレスと制御レジスタ番号との設定は、例えば以下のように行われる。ノード数が２のべき乗である場合、バタフライにおいては、同期成立の後、自プロセス又は自ノードの次ステージと、他ノードでの次ステージの２箇所に対して、同期信号が送信される。従って、宛先レジスタに指定する宛先は、自プロセス又は自ノードの制御レジスタ番号、又は、他ノードの宛先ノードアドレス及び制御レジスタ番号のいずれかである。
【００６５】
最初のステージにおいては、信号の待ち合わせを行なわないので、シグナルレジスタは使用しない。一方、最後のステージにおいては、宛先レジスタは使用しない。従って、最初のステージと最後のステージにおいて、使用するレジスタは重複しない。そのため、最初と最後のステージにおいては同一の制御レジスタ６２２が指定される。例えば、図８において、最初のステージと最後のステージにおいて、同一の制御レジスタ番号＃１が指定される。
【００６６】
最初のステージと最後のステージにおいて使用するレジスタが重複しない場合でも、最初と最後のステージにおいて異なる制御レジスタ６２２が指定されるようにしても良い。例えば、制御レジスタ６２２の数が十分大きい場合、図８において、最後のステージにおいて、制御レジスタ番号＃３が指定されるようにしても良い。
【００６７】
なお、図８において、シグナルレジスタ及び宛先レジスタの組の各々に付された＃１等の符号が制御レジスタ番号を表す。これは、図１４、図１７、図２０においても同様である。また、以下の説明において、制御レジスタ番号＃１の制御レジスタ６２２を制御レジスタ＃１ということがある。
【００６８】
ノード数が２のべき乗でない場合、ノード数を２のべき乗にするためにネットワーク２に追加される追加ノードが持つ制御レジスタ６２２を、他のノードに持たせる。例えば、図８でノード＃１〜＃３でバリア同期を取りたい場合は、ノードの持つ制御レジスタ６２２をノード＃１〜＃３のいずれかに持たせる。この場合、必要となるのは中継ステージに相当する制御レジスタのみであるので、中継ステージに相当する制御レジスタ＃２をノード＃１〜＃３のいずれかのノードに持たせる。更に、最初のステージにおいて、制御レジスタの送信先のシグナルレジスタの値を予め「１」に設定する。最後のステージにおいて、制御レジスタの送信元の宛先レジスタから最初のステージの制御レジスタを外す。
【００６９】
設定処理部３１は、プロセスがバリアポイントに到達した場合、バリア同期装置６の同期部６２に対しバリア同期開始の信号を送る（ステップＳ１２）。バリア同期開始信号は最初のステージに対応する制御レジスタ６２２の番号を含む。例えば、図８のノード＃１において、バリア同期開始信号は、制御レジスタ＃１を指定する。最初のステージにおいては、他のプロセスからパケットを受信することは無いので、受信装置６１から同期信号及び宛先が制御部６２１に送信されることも無い。
【００７０】
同期部６２の制御部６２１は、バリア同期開始の信号を受信すると、バリア同期開始信号にて指定された番号に対応する制御レジスタ６２２の宛先レジスタの値を読む（ステップＳ１３）。以下、宛先レジスタの値を「Destination」とも言う。この読取のために、制御部６２１は、バリア同期開始信号にて指定された制御レジスタ番号をリードアドレスとして用いて、当該アドレスの制御レジスタ６２２の宛先レジスタの値をリードデータとして読み出す。最初のステージに対応する制御レジスタ６２２のシグナルレジスタは使用されず、従って、同期信号の待ち合せも行われない。例えば、図８のノード＃１において、制御レジスタ＃１の宛先レジスタの値は、他ノードであるノード＃２の制御レジスタ３２及び自ノードであるノード＃１の制御レジスタ＃２である。
【００７１】
制御部６２１は、宛先レジスタの値の中の他ノードの制御レジスタ６２２を指定する値に基づいて、送信装置６３に対しパケット送信指示の信号を出す（ステップＳ１４）。パケット送信指示は、他ノードを指示する宛先レジスタの値を含む。送信装置６３は、制御部６２１からのパケット送信指示で指定された宛先ノードアドレスおよび制御レジスタ番号に基づいて、パケットを生成し、パケットをネットワーク２へ送信する。このパケットの送信先は、指定された宛先ノードアドレスおよび制御レジスタ番号である。これにより、パケットは、例えば、図８において、ノード＃２の制御レジスタ＃２を宛先として、ノード＃１からノード＃２へ送信される。このパケットは、例えば、同期信号を含む。
【００７２】
また、送信装置６３は、宛先レジスタの値の中の自ノードの制御レジスタ６２２を指定する値に基づいて、宛先レジスタにおいて指定された制御レジスタ６２２のシグナルレジスタの値を読む（ステップＳ１４）。即ち、自ノードの次ステージにおける制御レジスタ６２２のシグナルレジスタの値が読み出される。これは、自ノードの同期部６２に同期信号を送り、自ノードでの同期の待ち合わせを行うためである。以下、シグナルレジスタの値を「signal」とも言う。
【００７３】
続いて、同期部６２が、次ステージのシグナルレジスタに同期状態を示す「１」が設定されているか否かを調べる（ステップＳ１５）。シグナルレジスタに「１」が設定されている場合（Ｓ１５  Ｙｅｓ）、同期成立となる。一方、シグナルレジスタに「１」が設定されていない場合（Ｓ１５  Ｎｏ）、同期は成立していない。
【００７４】
同期が成立していない場合（Ｓ１５  Ｎｏ）、同期部６２が、次ステージの制御レジスタ６２２のシグナルレジスタの値Signalを「１」に設定し、これ以後、パケットの受信を待ち合わせる（ステップＳ１６）。この設定のために、制御部６２１は、読み出した宛先レジスタの値の中の自ノードを指定する値をライトアドレスとして用いて、当該アドレスの制御レジスタ６２２のシグナルレジスタに「１」をライトデータとして書き込む。例えば、図８のノード＃２において、制御レジスタ＃１のシグナルレジスタの値は、「１」とされる。これにより、待ち合わせすべき同期信号の一方を受信したことが示される。
【００７５】
この後、受信装置６１は、パケットを受信した場合、受信したパケットに基づいて、同期信号と宛先となる制御レジスタ番号とを取り出し、同期部６２に送信する（ステップＳ１７）。
【００７６】
同期部６２の制御部６２１は、受信装置６１からの信号を受信した場合、指定された制御レジスタ６２２のシグナルレジスタの値を読み取る（ステップＳ１８）。この後、ステップＳ１５以下を繰り返す。例えば、制御部６２１は、受信装置６１からの同期信号と宛先とを受信すると、受信した制御レジスタ番号に基づいて、制御レジスタ６２２のシグナルレジスタの値を読取る。この読取のために、制御部６２１は、指定された制御レジスタ番号をリードアドレスとして用いて、当該アドレスの制御レジスタ６２２のシグナルレジスタの値を、リードデータとして読み出す。
【００７７】
一方、ステップＳ１５において同期が成立している場合（Ｓ１５  Ｙｅｓ）、制御部６２１は、更に、制御レジスタ６２２が最後のステージに対応したものか否かを調べる（ステップＳ１９）。例えば、図８のノード＃１において、ステップＳ１６の実行の後は、制御レジスタ＃２のシグナルレジスタの値は、「１」である。従って、この場合、同期が成立している。
【００７８】
最後のステージに対応する制御レジスタ６２２で同期が成立した場合（Ｓ１９  Ｙｅｓ）、制御部６２１は、バリア同期成立の信号をＣＰＵの設定処理部３１に送る（ステップＳ１１０）。
【００７９】
設定処理部３１は、制御部６２１からのバリア同期成立の信号を受け取り、バリア同期成立を知る（ステップＳ１１１）。
【００８０】
また、ステップＳ１９において制御レジスタ６２２が最後のステージに対応したものでない場合（Ｓ１９  Ｎｏ）、制御部６２１は、同期が成立した制御レジスタ６２２の宛先レジスタの値を読み（ステップＳ１１２）、ステップＳ１４以下の処理を繰り返す。例えば、図８のノード＃１において、制御レジスタ＃２は最後のステージに対応したものでないので、ステップＳ１４以下の処理が繰り返される。
【００８１】
図８は、図７のバタフライによるバリア同期処理における各ステージ間での同期信号の流れを示す。なお、図８において、同期装置６内の符号＃１等はそれぞれ複数の制御レジスタ６２２のレジスタ番号を示し、また、図示左から順に時間の経過と共に同期信号が送信される状態を示す（他の図においても同じ）。
【００８２】
図８において、ノード＃１に着目すると、以下のように同期信号が流れる。例えば、ノード＃１は、バリアポイントに到達した場合、バリア同期開始信号の入力により同期開始を指示される。これに応じて、ノード＃１は、ステージ＃１において、予め指示された宛先であるノード＃１及びノード＃２に、同期信号を送信する。
【００８３】
ステージ＃２において、自己の同期信号を受信したノード＃１は、予め指示されたノード＃２からの同期信号を待ち合わせる。ステージ＃２の同期信号は、ノード＃２がバリアポイントに到達した後に、同様にして、ノード＃２からノード＃１に到達する。ノード＃２からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃２からの同期信号との待ち合わせつまり２つの信号の同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃２において、予め指示された宛先であるノード＃１及びノード＃３に同期信号を送信する。
【００８４】
ステージ＃３において、自己の同期信号を受信したノード＃１は、予め指示されたノード＃３からの同期信号を待ち合わせる。ステージ＃３の同期信号は、ノード＃３がバリアポイントに到達し、かつ、バリアポイントに到達したノード＃４からの同期信号を受信した後に、同様にして、ノード＃３からノード＃１に到達する。ノード＃３からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃３からの同期信号との同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃３において、バリア同期が成立したと判定して、バリア同期成立信号を出力する。
【００８５】
ノード＃２〜４においても、同様にして、ステージ＃３において、バリア同期が成立し、バリア同期成立信号が出力される。これにより、バタフライによるバリア同期が実行される。
【００８６】
従って、図８における同期信号の流れは図４と同じ流れとなり、バタフライによるバリア同期が実行されていることが判る。
【００８７】
（第２の実施態様）
第２の実施態様は、本発明の一実施態様である、バタフライによりバリア同期を行いつつリダクション演算を行うリダクション演算装置に関する。
【００８８】
図９は、第２の実施態様であるリダクション演算装置の構成の一例を示す。図１０は、図９のリダクション演算装置が備える同期部８２及びリダクション演算部の構成の一例を示す。図１１は、図１０のリダクション演算部が備える演算器８４５の構成の一例を示す。
【００８９】
第２の実施態様において、リダクション演算装置８は、図１に示すコンピュータネットワークを構成するノード１に設けられる。第２の実施態様において、ノード１は、図２に示すノード１のバリア同期装置６を、リダクション演算装置８で置き換えた構成を備える。即ち、第２の実施態様のノード１は、バリア同期装置６以外は、図２に示すノード１と同様の構成を備える。以下、図２に示すノード１と同じ要素については、一部図示を省略する。
【００９０】
リダクション演算装置８は、バリア同期を取りつつリダクション演算を行う。リダクション演算装置は、リダクション演算部８４と、同期装置（以下「同期部」）８２とを備える。同期部８２は、制御部８２１と、制御レジスタ８２２とを備える。リダクション演算部８４は、入力データレジスタ８４１、マルチプレクサ８４２、スイッチ８４３、記憶装置８４４、演算器８４５、デマルチプレクサ８４６、出力データレジスタ８４７を備える。
【００９１】
リダクション演算装置８は、リダクション演算部８４を備える以外は、バリア同期装置６と同様の構成を備える。リダクション演算部８４を備えるので、リダクション演算装置８は、バリア同期開始の信号に代えてリダクション演算開始の信号を入力され、また、バリア同期成立の信号に代えてリダクション演算完了の信号を出力する。
【００９２】
また、リダクション演算部８４を備えるので、リダクション演算装置８は、ネットワーク２との間で、パケットの送受信に加えて、データの送受信も行い、また、ＣＰＵ３の設定処理部３１との間で、制御信号に加えて、データの送受信も行う。
【００９３】
また、リダクション演算部８４を備えるので、リダクション演算装置８は、リダクション演算の対象データを外部から入力され、また、リダクション演算の結果を外部に出力する。
【００９４】
リダクション演算の第１の対象データは、ＣＰＵ３の設定処理部３１から、ライトデータとして入力データレジスタ８４１に入力され、リードデータとして入力データレジスタ８４１からマルチプレクサ８４２に入力される。リダクション演算の第２の対象データは、ネットワーク２から受信装置８１を介してパケットとして入力され、パケットから取出されて、マルチプレクサ８４２に入力される。
【００９５】
一方、リダクション演算の結果は、デマルチプレクサ８４６から、ライトデータとして出力データレジスタ８４７に出力され、リードデータとして出力データレジスタ８４７から設定処理部３１に出力される。また、リダクション演算の結果は、デマルチプレクサ８４６から送信装置８３に出力され、送信装置８３からネットワーク２へパケットとして送信される。
【００９６】
入力データレジスタ８４１及び出力データレジスタ８４７は、複数設けられる。入力データレジスタ８４１は、各々、制御レジスタ８２２と対応する。出力データレジスタ８４７も同様である。
【００９７】
ライトデータを書き込むべき入力データレジスタ８４１は、設定処理部３１からライトアドレスにより指定される。リードデータを読み出すべき入力データレジスタ８４１は、制御部８２１からリードアドレスにより指定される。入力データレジスタ８４１のリードアドレスは、例えば受信装置８１が受信したパケットにおける宛先が指示する制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。ライトデータを書き込むべき出力データレジスタ８４７は、制御部８２１からライトアドレスにより指定される。出力データレジスタ８４７のライトアドレスは、当該ライトデータのリダクション演算に用いられる制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。リードデータを読み出すべき出力データレジスタ８４７は、設定処理部３１からリードアドレスにより指定される。
【００９８】
リダクション演算を実行するために、設定処理部３１は、入出力装置７から入力された設定条件に従って、リダクション演算装置８における第１の同期信号の送信先及び第２の同期信号の送信先を、リダクション演算装置８に設定する。
【００９９】
また、設定処理部３１は、システム制御部５を介して、リダクション演算の開始時にリダクション演算装置８に対して演算対象のデータを送信し、また、リダクション演算装置８からリダクション演算結果を受信する。リダクション演算装置８は、ネットワーク２（図示「Network」）を介して、他のノードのリダクション演算装置との間で通信を行ない、当該通信に基づいて、リダクション演算を行なう。
【０１００】
更に、リダクション演算を実行するために、リダクション演算装置８の備える同期部８２は、同期成立の後に、第２の同期信号の送信を送信装置８３に指示（図示「パケット送信指示」）すると共に、予め定められたリダクション演算をリダクション演算部８４に指示する。また、送信装置８３は、第２の同期信号送信の指示を受信した場合、第２の同期信号と共に、演算器８４５におけるリダクション演算の結果を設定処理部３１に送信する。
【０１０１】
また、同期部８２は、制御レジスタ８２２に、タイプレジスタを備える。図１０において、タイプレジスタは符号typeを付して表す（他の図においても同じ）。タイプレジスタは、演算器８４５におけるリダクション演算の制御のために、演算の種類を示す情報を格納する。タイプレジスタに格納される情報も、設定条件の一部として、入出力装置７から入力される。
【０１０２】
ここで、リダクション演算について簡単に説明する。リダクション演算は、前述したように、バリア同期と同一のアルゴリズムを用いて実行することができる。即ち、リダクション演算は、バタフライによるバリア同期を実行するバタフライネットワークにより実行することができる。
【０１０３】
従って、リダクション演算は、図３及び図４に示すように、処理を複数のステージに分割し、各プロセスはステージ毎に他のプロセスと信号の通信を行なう。１個のノード上で１個のプロセスが動作する場合、プロセスとノードとは同一と考えて良い。各ステージにおけるプロセスの処理及び送信先は、基本的に、バリア同期と同じである。
【０１０４】
リダクション演算は、図１２に示すように、最初のステージ＃１においては、各プロセスは、演算の対象となるデータを次のステージ＃２のプロセスに送信する。ステージ＃２において各プロセスは、前のステージ＃１のプロセスからのデータを受信した場合、例えば、自身が持っているデータとの加算を行い、演算結果を次のステージ＃３のプロセスに送信する。最後のステージ＃３において各プロセスは、前のステージ＃２のプロセスからデータを受信した場合、例えば、受信したデータと前のステージ＃２での自身の演算結果との加算を行う。この加算の結果が、総和演算の結果となる。
【０１０５】
なお、リダクション演算の他の実現方法として、特定のプロセスにデータを送信し、演算を行わせる方法がある。この方法においては、全てのプロセスが演算結果を持つには、特定のプロセスからのブロードキャストが必要となる。バタフライネットワークによるリダクション演算によれば、ブロードキャストは必要ない。
【０１０６】
第２の実施態様におけるリダクション演算は、以下のように行われる。
【０１０７】
設定処理部３１は、バリア同期装置６と同様にして、同期部８２におけるリダクション演算の各組に対応する制御レジスタ８２２に、設定条件に基づいて、次ステージの宛先ノードアドレス、制御レジスタ番号等を設定する。この後、設定処理部３１は、入力データ及びリダクション同期開始信号をリダクション演算部８４に送信する。これにより、リダクション演算部８４によるリダクション演算が開始される。最後のステージに対応した制御レジスタ８２２において同期が成立した場合、リダクション演算装置８は、演算結果とリダクション演算完了の信号とを、設定処理部３１に送る。
【０１０８】
受信装置８１はネットワーク２を介してパケットをＣＰＵ３から受信し、受信したパケットに基づいて、同期信号及び宛先との組を同期信号を同期部８２に送信し、パケットとして受信したデータをリダクション演算部８４に送信する。
【０１０９】
リダクション演算部８４において、入力データレジスタ８４１は、ＣＰＵ３から送信されたリダクション演算の対象である入力データ（図１０図示「ライトデータ」）を一時格納し、制御部８２１からの指示に応じて、格納したデータを「リードデータ」としてマルチプレクサ８４２を介して、記憶装置８４４に入力する。ＣＰＵ３からのデータは、前述したように、リダクション演算の開始時に入力される。
【０１１０】
記憶装置８４４は、入力データレジスタ８４１を介して入力されたデータを記憶する。これにより、記憶装置８４４は、リダクション演算中のデータを保持する。記憶装置８４４の記憶容量は、例えば、（制御レジスタ８２２の数）×（データのビット数）とされる。リダクション演算中のデータを保持すべき記憶装置８４４のアドレスは、制御部８２１からライトアドレスにより指定される。記憶装置８４４のライトアドレスは、当該リダクション演算に用いられる制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。
【０１１１】
記憶装置８４４に格納されたリダクション演算中のデータは、制御部８２１からリードアドレスを指定することにより、読み出されて演算器８４５に入力される。記憶装置８４４のリードアドレスは、当該リダクション演算に用いられる制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。
【０１１２】
マルチプレクサ８４２は、制御部８２１からの入力部選択の指示に従って、入力データレジスタ８４１からのデータ、又は、受信装置１からのデータを選択して、スイッチ８４３を介して、記憶装置８４４又は演算器８４５に入力する。入力部選択の指示は、受信装置８１から同期信号及び宛先が入力された場合には、受信装置８１のデータをマルチプレクサ８４２に出力するようにされ、これ以外の場合には、入力データレジスタ８４１のリードデータをマルチプレクサ８４２に出力するようにされる。
【０１１３】
スイッチ８４３は、制御部８２１からの入出力部選択の指示に従って、マルチプレクサ８４２又は演算器８４５からの入力を、記憶装置８４４又は演算器８４５に入力する。入出力部選択の指示は、マルチプレクサ８４２からデータが入力された場合には、マルチプレクサ８４２のデータを入力するようにされ、これ以外の場合には、演算器８４５のデータを入力するようにされる。また、入出力部選択の指示は、同期が成立した場合には、入力されたデータを演算器８４５に出力するようにされ、これ以外の場合には、入力されたデータを記憶装置８４４に出力するようにされる。
【０１１４】
演算器８４５は、同期が成立した場合、記憶装置８４４で待ち合わせているデータと、マルチプレクサ８４２を介して入力するパケットからのデータ又は先の演算結果とについて、所定の演算を行なう。即ち、演算器８４５は、同期部８２の制御部８２１からの指示を受信した場合、記憶装置８４４に記憶されたデータを用いて、リダクション演算を行う。具体的には、演算器８４５は、制御部８２１からの演算指示に従って、所定の演算を実行して、その結果を、デマルチプレクサ８４６に入力すると共に、スイッチ８４３に入力する。
【０１１５】
演算器８４５は、図１１に示すように、演算ユニット８４５１〜８４５４と、マルチプレクサ８４５５とを備える。加算部（ＡＤＤ）８４５１、論理和演算部（Ｌｏｇｉｃａｌ）８４５２、最大値算出部（ＭＡＸ）８４５３、最小値算出部（ＭＩＮ）８４５４が、演算ユニットを構成する。演算ユニット８４５１〜８４５４は、各々、予め定められた演算を実行する。
【０１１６】
演算器８４５は、記憶装置８４４から入力するデータつまり第１データと、入力データレジスタ８４１から入力するデータ、受信装置８１が受信したパケットからのデータ又は演算器８４５が前ステージで行なった演算結果つまり第２データとの間で、指示された種類の演算を行なう。演算ユニット８４５１〜８４５４は、第１データ及び第２データを入力されて、これらについての演算を行い、演算結果をマルチプレクサ８４５５に出力する。演算の種類は、制御部８２１からの演算指示により指示される。この演算指示は、演算の種類を示すタイプレジスタの値に基づいて、制御部８２１により生成される。マルチプレクサ８４５５は、演算指示に従って、演算ユニット８４５１〜８４５４での演算結果のいずれかを選択して出力する。
【０１１７】
デマルチプレクサ８４６は、出力部選択を指示する制御部８２１からの制御に従って、演算器８４５からの入力を、出力データレジスタ８４７又は送信装置８３に入力する。出力部選択の指示は、リダクション演算が完了する以前には、演算器８４５からのデータを送信装置８３に出力するようにされ、これ以外の場合には、出力データレジスタ８４７に出力するようにされる。
【０１１８】
出力データレジスタ８４７は、リダクション演算の結果を、ＣＰＵ３に出力する。出力データレジスタ８４７から出力されるリダクション演算結果は、リダクション演算完了時にＣＰＵ３に入力される。
【０１１９】
送信装置８３は、リダクション演算部のデマルチプレクサ８４６から、演算結果、パケット送信指示で指定された宛先ノードアドレス、制御レジスタ番号を受信した場合、これらに基づいて、パケットを生成し、生成したパケットをネットワーク２へ送信する。
【０１２０】
同期部８２は、バリア同期装置６の同期部６２と同様にして、ステージ毎に演算の中間結果の送信先を変更する処理を行う。同期部８２の制御部８２１は、同期信号及び制御レジスタ番号を受信装置８１から受信した場合、受信した制御レジスタ番号に対応する制御レジスタ８２２に同期信号を送る。
【０１２１】
制御部８２１は、同期が成立した場合、送信装置８３へ同期信号の送信指示を出す。同期信号の送信指示は、図１０では「パケット送信指示」と示す。この時、制御部８２１は、自プロセス又は自ノードの同期部８２内の指定された制御レジスタ８２２に同期信号を送信することに加えて、リダクション演算部８４を制御する。即ち、制御部８２１は、リダクション演算部８４に入力されているデータと、記憶装置８４４で待ち合わせているデータとの間で、リダクション演算を行なわせる。一方、同期が成立していない場合、制御部８２１は、データを記憶装置８４４に保持させる。
【０１２２】
自プロセス又は自ノードの同期部８２の指定された制御レジスタ８２２に同期信号を送信した場合において、同期が成立した場合、制御部８２１は、更に、演算結果と記憶装置８４４で待ち合わせているデータとの演算を繰り返すようリダクション演算部８４を制御する。一方、同期が成立しない場合、制御部８２１は、演算結果を記憶装置８４４に送信する。
【０１２３】
制御部８２１は、設定処理部３１からリダクション演算開始の信号を受け取ると、指定された組つまり制御レジスタ８２２の送信先に、同期信号と設定処理部３１から入力されたデータとを送信する。この後、最後の組で同期が成立した場合、制御部８２１は、演算結果とリダクション演算完了の信号とを、設定処理部３１に送信する。
【０１２４】
図１３は、図９のリダクション演算装置８が実行する、バタフライによるバリア同期を行いつつリダクション演算を行う処理の処理フローを示す。
【０１２５】
このリダクション演算はバリア同期を利用する。従って、図１３の処理フローは、リダクション演算対象のデータの送受信処理及びリダクション演算処理（ステップＳ２９）以外は、図７の処理フローとほぼ同一である。
【０１２６】
設定処理部３１は、リダクション演算を開始する前に、リダクション演算を行なうノード数から使用する制御レジスタ８２２の数を決定し、各制御レジスタ８２２の宛先レジスタにバタフライでの次ステージに対応した宛先ノードアドレスと制御レジスタ番号とを、タイプレジスタに演算種類を設定する（ステップＳ２１）。
【０１２７】
レジスタの設定は、以下のように行われる。ノード数が２のべき乗である場合、バタフライにおいては、同期成立の後、自プロセス又は自ノードの次ステージと他ノードでの次ステージの２箇所に対して、同期信号を送信する。従って、宛先レジスタに指定する宛先は、自プロセス又は自ノードの制御レジスタ番号と、他ノードの宛先ノードアドレス及び制御レジスタ番号とを含む。最初のステージにおいては、信号の待ち合わせを行なわないので、シグナルレジスタは使わず、最後のステージにおいては、宛先レジスタは使わない。そのため、最初と最後のステージにおいては同一の制御レジスタ８２２を指定する。
【０１２８】
ノード数が２のべき乗でない場合、第１の実施態様と同様に、追加ノードの中継ステージにあたる制御レジスタ８２２を、他のノードつまり追加ノードに設ける。追加ノードにおいて、最初のステージの制御レジスタ８２２と、最後のステージの制御レジスタ８２２とが、通信しないように設定する。更に、追加ノードの制御レジスタ８２２のタイプレジスタを通過（バイパス）に設定し、追加ノードに演算を行なわせないように設定する。
【０１２９】
設定処理部３１は、リダクション演算を開始するため、入力データを入力データレジスタへ送信し、リダクション演算開始信号を同期部８２に送信する（ステップＳ２２）。リダクション演算開始信号は、入力レジスタ番号と、最初のステージに対応した制御レジスタ番号とを含む。
【０１３０】
同期部８２の制御部８２１は、リダクション演算開始の信号が送られると、リダクション演算信号で指定された制御レジスタ８２２の宛先レジスタの値を読む（ステップＳ２３）。
【０１３１】
宛先レジスタにおいて他ノードが指定されている場合、制御部８２１は、送信装置８３に対してパケット送信指示の信号を出し、送信装置８３に対しデータを送る。送信装置８３に送られるデータは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には演算器８４５からの演算結果である。入力データレジスタの値を送信装置８３に送信する場合、演算指示としてバイパスを指定する。送信装置８３は、データと、パケット送信指示で指定された宛先ノードアドレス及び制御レジスタ番号とに基づいて、パケットを生成し、これをネットワーク２へ送信する。
【０１３２】
また、自プロセス又は自ノードの制御レジスタ８２２を指定されている場合、制御部８２１は、自プロセス又は自ノードの同期部８２に同期信号を送るため、宛先レジスタにおいて指定された制御レジスタ８２２のシグナルレジスタの値を読む（ステップＳ２４）。
【０１３３】
制御部８２１が、シグナルレジスタに「１」が設定されているか否かを調べる（ステップＳ２５）。シグナルレジスタに「１」が設定されている場合（Ｓ２５  Ｙｅｓ）、同期成立となる。一方、シグナルレジスタに「１」が設定されていない場合（Ｓ２５  Ｎｏ）、同期は成立していない。
【０１３４】
同期が成立していない場合、制御部８２１は、シグナルレジスタに「１」を設定し、データを記憶装置８４４の制御レジスタ８２２に対応するアドレスに格納する。データは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には前ステージの演算結果である。この後、制御部８２１は、他のプロセスからのパケットの受信を待ち合わせる（ステップＳ２６）。
【０１３５】
受信装置８１は、他のプロセスからパケットを受信した場合、受信したパケットに基づいて、データ、同期信号、宛先となる制御レジスタ番号を取り出し、デマルチプレクサ８４６、同期部８２へ対応する情報を送信する（ステップＳ２７）。
【０１３６】
同期部８２は、受信装置８１から同期信号、制御レジスタ番号を受信した場合、指定された制御レジスタ８２２のSignalの値を読取る（ステップＳ２８）。この後、ステップＳ２５以下を繰り返す。
【０１３７】
一方、ステップＳ２５において同期が成立している場合、演算を行なう（ステップＳ２９）。演算対象となるデータは、制御レジスタ８２２が最初のステージの次ステージに対応している場合には入力データレジスタの値である。また、制御レジスタ８２２がそれ以降のステージに対応しており、同期成立の要因がパケットからの同期信号である場合には、当該データはパケットに含まれるデータである。受信した同期信号が自プロセス又は自ノードの同期装置からの同期信号である場合、前ステージにおける演算結果と、同期が成立した制御レジスタ８２２に対応する記憶装置８４４内のアドレスに格納するデータとの間で演算を行なう。受信した情報が演算結果の場合はタイプレジスタの値から演算の種類を指定する。
【０１３８】
更に、制御部８２１は、制御レジスタ８２２が最後のステージに対応したものか否かを調べる（ステップＳ２１０）。
【０１３９】
最後のステージに対応する制御レジスタ８２２で同期が成立した場合（Ｓ２１０  Ｙｅｓ）、制御部８２１は、演算結果を出力データレジスタに格納し、設定処理部３１にリダクション演算完了の信号を送信する（ステップＳ２１１）。
【０１４０】
設定処理部３１は、制御部８２１からのリダクション演算完了の信号を受け取り、出力データレジスタから演算結果を読み取る（ステップＳ２１２）。
【０１４１】
ステップＳ２１０において制御レジスタ８２２が最後のステージに対応したものでない場合（Ｓ２１０  Ｎｏ）、同期が成立した制御レジスタ８２２の宛先レジスタの値を読取る（ステップＳ２１３）。この後、ステップＳ２４以下の処理を繰り返す。
【０１４２】
図１４は、図１３のバタフライによるリダクション演算処理における各ステージ間での同期信号の流れを示す。
【０１４３】
図１４において、ノード＃１に着目すると、以下のように同期信号リダクション及び演算対象のデータが流れる。例えば、ノード＃１は、演算対象のデータである入力データを受信した場合、リダクション演算開始信号の入力によりリダクション演算開始を指示される。これに応じて、ノード＃１は、ステージ＃１において、予め指示された宛先であるノード＃１及びノード＃２に、同期信号及び演算対象のデータを送信する。
【０１４４】
ステージ＃２において、自己の同期信号及び演算対象のデータを受信したノード＃１は、予め指示されたノード＃２からの同期信号を待ち合わせ、また、受信した演算対象のデータを記憶装置及び演算器に保持する。ステージ＃２の同期信号及び演算対象のデータは、ノード＃２が入力データを受信した後に、同様にして、ノード＃２からノード＃１に到達する。ノード＃２からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃２からの同期信号との待ち合わせつまり２つの信号の同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃２において、自己の演算対象のデータとノード＃２からの演算対象のデータとの間の演算を実行し、予め指示された宛先であるノード＃１及びノード＃３に、同期信号及び演算結果を送信する。この演算結果は、ノード＃１及びノード＃３において、演算対象のデータとして用いられる。
【０１４５】
ステージ＃３において、自己の同期信号及び演算対象のデータを受信したノード＃１は、予め指示されたノード＃３からの同期信号を待ち合わせ、また、受信した演算対象のデータを記憶装置及び演算器に保持する。ステージ＃３の同期信号及び演算対象のデータは、ノード＃３が入力データを受信し、かつ、入力データを受信したノード＃４からの同期信号を受信した後に、同様にして、ノード＃３からノード＃１に到達する。ノード＃３からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃３からの同期信号との同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃３において、自己の演算対象のデータとノード＃３からの演算対象のデータとの間の演算を実行し、予め指示された出力データレジスタに、演算結果を出力する。この後、ノード＃１は、リダクション演算完了信号を出力すると共に、出力データレジスタの保持されたデータをリダクション演算結果として出力する。  ノード＃２〜４においても、同様にして、ステージ＃３において、同期が成立し、リダクション演算完了信号とリダクション演算結果が出力される。これにより、バタフライによるリダクション演算が実行される。
【０１４６】
従って、図１４における同期信号及び演算対象のデータの流れは図４と同じ流れとなり、バタフライによるバリア同期を利用したリダクション演算が実行されていることが判る。
【０１４７】
（第３の実施態様）
第３の実施態様は、本発明の他の実施態様である、ディスエミネーションによりバリア同期を行うバリア同期装置に関する。即ち、この例においては、バリア同期のアルゴリズムはディスエミネーションである。
【０１４８】
第１の実施態様が採用するバタフライによるバリア同期は、プロセス数が２のべき乗でない場合に対応できない。このような場合、バタフライによるバリア同期を実行するためには、仮想的にプロセスを追加し、プロセス数を２のべき乗とする。仮想プロセスの通信は、実プロセスが代行する。このため、仮想プロセスに割り当てられた実プロセスは、仮想プロセスとしての通信も行なわなければならないので、ステージ数が増加する。
【０１４９】
図１５は、６個のプロセス＃０〜＃５でバタフライによるバリア同期を行なう例を示す。この場合、実プロセス＃０〜＃５に加えて、仮想プロセス＃６及び＃７が追加される。これにより、プロセス数が２のべき乗とされる。この場合、実プロセス＃０及び＃１は、仮想プロセス＃６及び＃７としての通信も行なう。実プロセス＃０及び＃１が、実プロセスとしての通信と、仮想プロセスとしての通信とを行う。このため、図１５の例ではステージ数は６になる。
【０１５０】
ステップ１において、実プロセス＃０及び＃１、実プロセス＃２及び＃３、実プロセス＃４及び＃５が、各々、相互に通信を行う。この後、仮想プロセス＃６及び＃７である実プロセス＃０及び＃１が、相互に通信を行う。実プロセス＃０及び＃１の間の通信と、仮想プロセス＃６及び＃７との間の通信は、同時に行うことはできない。従って、ステップ１におけるステージ数は、前者の通信及び後者の通信を合わせて、２となる。
【０１５１】
なお、ステップ１において、プロセス＃０、＃１、＃６及び＃７が、各々、独立したプロセスとして図示される。プロセス＃０及び＃６を点線で囲んだプロセスが、実際の実プロセス＃０である。プロセス＃１及び＃７も同様である。ステップ２及びステップ３において、仮想プロセス＃６及び＃７の図示を省略している。
【０１５２】
ステップ２において、実プロセス＃０は、実プロセス＃２と通信を行い、また、仮想プロセス＃６として実プロセス＃４と通信を行う。これらの通信は、同時に行うことはできない。実プロセス＃１についても、同様である。従って、ステップ２におけるステージ数は２となる。同様に、ステップＳ３においても、ステージ数は２となる。従って、全体の
ステージ数は６となる。
【０１５３】
この問題を解決するため、バリア同期のアルゴリズムとして、バタフライに代えて、ディスエミネーションが提案されている。
【０１５４】
図１６は、６個のプロセス数でディスエミネーションによるバリア同期を行なう例を示す。ディスエミネーションは、ステージ番号をｋ、自プロセス又は自ノード１のプロセス番号をｉ、全プロセス数をＮとした場合、バリアポイント到着の信号の送信先をｉ＋２＾（ｋ−１）ｍｏｄＮとするアルゴリズムである。
【０１５５】
ステップ１において、各実プロセスは、１個隣の実プロセスに同期信号を送信する。例えば、実プロセス＃０は実プロセス＃１に同期信号を送信する。最後の実プロセスは、実プロセス＃０に同期信号を送信する。ステップ２において、各実プロセスは、２個隣の実プロセスに同期信号を送信する。ステップ３において、各実プロセスは、３個隣の実プロセスに同期信号を送信する。
【０１５６】
これにより、ｌｏｇ（Ｎ）（但し、対数の底＝２）回の同期信号の送信の後に、ある実プロセスは、他の全ての実プロセスからの同期信号を受信する。この結果、ステージ数は常にｌｏｇ（Ｎ）（但し、対数の底＝２）となるので、プロセス数が２のべき乗でない場合にも、図１５の場合よりも効率が良い。
【０１５７】
第３の実施態様によるコンピュータネットワークは、第１の実施態様と同様の構成を備える。即ち、第３の実施態様においては、図１に示すコンピュータネットワークにおいて図２に示すノード１が設けられ、ノード１において図５に示すバリア同期装置６が設けられ、バリア同期装置６において図６に示す同期部６２が設けられる。
【０１５８】
第３の実施態様では、制御レジスタ６２２の宛先レジスタに、ディスエミネーションによるバリア同期において次ステージとなる制御レジスタ６２２が設定される。これにより、ディスエミネーションによるバリア同期を行うことができる。
【０１５９】
第３の実施態様において、バリア同期は、図７に示す処理フローと同様の処理フローにより実行される。しかし、第３の実施態様において、同期部６２の制御部６２１は、図７のステップＳ１４における、読取った対応する制御レジスタ６２２の宛先レジスタの値についての判定を省略する。即ち、自ノード１の制御レジスタ６２２又は他ノードの制御レジスタのいずれが指定されているかは、第３の実施態様では判定されない。これは、ディスエミネーションによるバリア同期においては、常に、各ステージの通信元及び通信先は、自ノード１の制御レジスタ６２２又は他ノードの制御レジスタの２つであるからである。
【０１６０】
図１７は、ディスエミネーションによるバリア同期処理における各ステージ間での同期信号の流れを示す。なお、図１７は、４個のプロセス数でディスエミネーションによるバリア同期を行なう例である。従って、図１６に現れる符号ｄは、図１７には現れない。
【０１６１】
図１７において、ノード＃１に着目すると、以下のように同期信号が流れる。即ち、同期信号がノード＃１に到達した場合、ステージ＃１において、ノード＃１からノード＃１及びノード＃２に同期信号が送信される。ステージ＃２の同期信号は、図１７において符号ａで示すように、ノード＃４からノード＃１に到達する。ノード＃４からの同期信号が到達した場合、ステージ＃２において、ノード＃１からノード＃１及びノード＃３に同期信号が送信される。ステージ＃３の同期信号は、図１７において符号ｃで示すように、ノード＃３からノード＃１に到達する。ノード＃３からの同期信号が到達した場合、ステージ＃３において、同期が成立したと判定され、ノード＃１から同期信号が出力される。
【０１６２】
ノード＃２〜４においても、同様にして、ステージ＃３において、同期が成立し、同期信号が出力される。これにより、ディスエミネーションによるバリア同期が実行される。
【０１６３】
（第４の実施態様）
第４の実施態様は、本発明の他の実施態様である、ディスエミネーションによりバリア同期を行いつつリダクション演算を行うリダクション演算装置に関する。
【０１６４】
図１８は、第４の実施態様のリダクション演算装置が備える同期部８２及びリダクション演算部の構成の一例を示す。
【０１６５】
第４の実施態様は、基本的には、第２の実施態様と同様の構成を備える。即ち、第４の実施態様においては、図１に示すコンピュータネットワークにおいて図２に示すノード１が設けられ、ノード１において図９に示すリダクション演算装置８が設けられる。
【０１６６】
一方、第４の実施態様では、図１０に示すリダクション演算装置８に代えて、図１８に示すように、リダクション演算装置８Ａが設けられる。リダクション演算装置８Ａは、基本的には、リダクション演算装置８と同様の構成を備える。しかし、リダクション演算装置８Ａにおいては、制御レジスタ８２２のタイプレジスタが省略される。
【０１６７】
このために、第４の実施態様では、パケットが演算種類を示す情報を含む。演算種類は予め知ることができる。従って、リダクション演算に先立って、ＣＰＵ３の設定処理部３１に、リダクション演算の設定条件の一部として、演算種類が入力される。受信装置８１は、受信した演算種類を同期装置８２の制御部８２１に送信する。制御部８２１は、同期装置８２からのパケット送信指示の信号に、演算種類の情報を加えて、送信装置８３に送信する。送信装置８３は、受信した演算種類の情報を、送信すべきパケットの所定の位置に付加することにより、送信パケットを生成する。
【０１６８】
第４の実施態様において、制御レジスタ８２２の宛先レジスタに、ディスエミネーションによるバリア同期によるリダクション演算において次ステージとなる制御レジスタ８２２が設定される。これにより、ディスエミネーションによるバリア同期によるリダクション演算を行うことができる。
【０１６９】
第４の実施態様において、リダクション演算は、図１３に示す処理フローと同様の処理フローにより実行される。しかし、第４の実施態様において、同期部８２の制御部８２１は、ステップＳ２１における、制御レジスタ８２２のタイプレジスタの値についての判定を省略する。また、第４の実施態様では、ステップＳ２２において、リダクション演算開始信号が、演算種類の情報を含むようにされる。更に、第４の実施態様では、ステップＳ２４において、制御部８２１はパケット送信指示に演算種類の指定の情報を加え、送信装置８３は演算種類の情報を持つパケットを生成する。また、第４の実施態様では、ステップＳ２９において、演算種類は、受信装置８１からの演算種類の信号に基づいて、指定される。そして、第４の実施態様では、ステップＳ２７において、受信装置８１から同期装置に送る信号に、演算種類が付加される。
【０１７０】
また、制御部８２１は、ステップＳ２４における、読取った対応する制御レジスタ８２２の宛先レジスタの値についての判定を省略する。
【０１７１】
以上により、図１７と同様に、ディスエミネーションによるリダクション演算処理における各ステージ間での同期信号の流れが実現される。
【０１７２】
（第５の実施態様）
第５の実施態様は、本発明の他の実施態様である、ペアワイズエクスチェンジウィズリカーシブダブリング（Pairwise exchange with recursive doubling）によりバリア同期を行うバリア同期装置に関する。即ち、この例においては、バリア同期のアルゴリズムはペアワイズエクスチェンジウィズリカーシブダブリングである。
【０１７３】
前述したように、バタフライによるバリア同期の欠点は、プロセス数が２のべき乗でない場合に対応できない点にある。この問題を解決するため、バリア同期のアルゴリズムとして、バタフライに代えて、第３の実施態様において説明したディスエミネーションの他に、ペアワイズエクスチェンジウィズリカーシブダブリングが提案されている。
【０１７４】
図１９は、６個のプロセスでペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期を行なう例を示す。ペアワイズエクスチェンジウィズリカーシブダブリングは、プロセスを２のべき乗のグループと、その余りのグループとに分ける。図１９において、group a が２のべき乗のグループであり、group b が余りのグループである。図１９の例では、group aには４つのプロセス＃０〜＃３が含まれ、group bには２つのプロセス＃４及び＃５が含まれる。
【０１７５】
最初のステージにおいて、余りのグループｂから２のべき乗のグループａへの通信を行う（ステップ１）。例えば、グループｂのプロセス＃４及び＃５から、各々、グループａのプロセス＃０及び＃１へ、同期信号が送信される。グループａのプロセス＃０及び＃１は、受信した同期信号を、シグナルレジスタに格納する。図１９において、各プロセスの備えるシグナルレジスタが、円で表される各プロセスに対応する四角形で表される。例えば、グループａのプロセス＃０は、シグナルレジスタにおけるプロセス＃４に対応するビットである第５ビットに、「１」を格納する。プロセス１についても、同様である。
【０１７６】
この後、２のべき乗のグループａ内で通信を行なう（ステップ２〜３）。例えば、プロセス＃０及び＃１の間及びプロセス＃２及び＃３の間で相互に通信を行い、続いて、プロセス＃０及び＃２の間及びプロセス＃１及び＃３の間で相互に通信を行う。これにより、２のべき乗のグループａにおいて同期が成立する。
【０１７７】
２のべき乗のグループａにおいて同期が取れた場合、２のべき乗のグループａから余りのグループｂへの通信を行なう（ステップ４）。例えば、グループａのプロセス＃０及び＃１から、各々、グループｂのプロセス＃４及び＃５へ、同期信号が送信される。これにより、グループａとグループｂとの間即ちグループａのプロセスとグループｂのプロセスとの間で同期が成立する。
【０１７８】
第５の実施態様によるコンピュータネットワークは、第１の実施態様と同様の構成を備える。即ち、第５の実施態様においては、図１に示すコンピュータネットワークにおいて図２に示すノード１が設けられ、ノード１において図５に示すバリア同期装置６が設けられ、バリア同期装置６において図６に示す同期部６２が設けられる。
【０１７９】
第５の実施態様において、制御レジスタ６２２の宛先レジスタに、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期において次ステージとなる制御レジスタ６２２が設定される。これにより、第１の実施態様と同様にして、ディスエミネーションによるバリア同期を行うことができる。
【０１８０】
第５の実施態様において、バリア同期は、図７に示す処理フローと同様の処理フローにより実行される。しかし、第５の実施態様において、同期部６２の制御部６２１は、図７のステップＳ１１において、図２０から判るように、最初のステージと最後のステージとで同じ制御レジスタ６２２を設定しない。
【０１８１】
例えば、グループａのノード＃１に着目すると、最初のステージにおいては、次ステージにおける宛先を指定するために、宛先レジスタを使用する。一方、最後のステージにおいても、グループｂのノード＃５を宛先として指定するために、宛先レジスタを使用する。従って、最初のステージと最後のステージにおいて、使用するレジスタが重複する。このため、最初と最後のステージにおいて、同一の制御レジスタ６２２は指定されない。即ち、図２０において、最初のステージと最後のステージにおいて、異なる制御レジスタ番号＃１及び＃４が指定される。グループａのノード＃２についても同様である。
【０１８２】
グループａ及びｂを決定する際、いずれのノードが図２０におけるノード＃１及び＃２として動作するかは不明である。従って、最初のステージと最後のステージにおいて、同じ制御レジスタ６２２が設定されないようにされる。
【０１８３】
また、ステップＳ１９において、バリア同期の最後のステージであっても、制御レジスタ６２２の宛先レジスタにおいて通信先が指定されている場合には、当該通信を行う。これは、以下の理由による。即ち、ペアワイズエクスチェンジウィズリカーシブダブリングにおいては、バリア同期が成立するステージが異なるノードが存在する。このため、バリア同期成立の後も、他のノードと通信を行なうノードが存在することになる。従って、最初のステージと最後のステージとで、同じ制御レジスタ６２２を設定できないノードが存在するので、最初のステージと最後のステージとで同じ制御レジスタ６２２を設定しない。
【０１８４】
図２０は、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期処理における各ステージ間での同期信号の流れを示す。
【０１８５】
図２０において、グループａのノード＃１に着目すると、以下のように同期信号が流れる。即ち、同期信号が到達した場合、ステージ＃１において、ノード＃１に同期信号が送信される。ステージ＃２の同期信号は、グループｂのノード＃５からノード＃１に到達する。この同期信号が到達した場合、ステージ＃２において、ノード＃１からノード＃１及びノード＃２に同期信号が送信される。ステージ＃３の同期信号は、ノード＃２からノード＃１に到達する。この同期信号が到達した場合、ステージ＃３において、ノード＃１からノード＃１及びノード＃４に同期信号が送信される。ステージ＃４の同期信号は、ノード＃３からノード＃１に到達する。この同期信号が到達した場合、ステージ＃４において、同期が成立したと判定され、ノード＃１から同期信号が出力されると共に、グループｂのノード＃５に同期信号が送信される。
【０１８６】
ノード＃２〜４においても、図２０に示すように、ほぼ同様にして、ステージ＃４において、同期が成立し、同期信号が出力される。
【０１８７】
一方、グループｂのノード＃５に着目すると、以下のように同期信号が流れる。即ち、ステージ＃１において、ノード＃５からノード＃１に同期信号が送信される。この後、ステージ＃２〜４においては、ノード＃５への同期信号の入力が無いので、変化がない。ステージ＃５において、ノード＃１からの同期信号がノード＃５に入力した場合、同期が成立したと判定され、ノード＃５から同期信号が出力される。ノード＃６においても、ほぼ同様である。これにより、ペアワイズエクスチェンジウィズリカーシブダブリング によるバリア同期が実行される。
【０１８８】
（第６の実施態様）
第６の実施態様は、本発明の他の実施態様である、ペアワイズエクスチェンジウィズリカーシブダブリングによりバリア同期を行いつつリダクション演算を行うリダクション演算装置に関する。
【０１８９】
第６の実施態様は、第２の実施態様と同様の構成を備える。即ち、第６の実施態様においては、図１に示すコンピュータネットワークにおいて図２に示すノード１が設けられ、ノード１において図９に示すリダクション演算装置８が設けられ、リダクション演算装置８は図１０に示す構成とされる。
【０１９０】
第６の実施態様において、制御レジスタ８２２の宛先レジスタに、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期によるリダクション演算において次ステージとなる制御レジスタ８２２が設定される。これにより、第２の実施態様と同様にして、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期によるリダクション演算を行うことができる。
【０１９１】
第６の実施態様において、リダクション演算は、図１３に示す処理フローと同様の処理フローにより実行される。しかし、第６の実施態様においても、第５の実施態様と同様に、ステップＳ１１において、最初のステージと最後のステージとで同じ制御レジスタ８２２が設定されない。また、ステップＳ１９において、バリア同期の最後のステージであっても、制御レジスタ８２２の宛先レジスタにおいて通信先が指定されている場合には、当該通信が行われる。
【０１９２】
第６の実施態様において、ペアワイズエクスチェンジウィズリカーシブダブリングによるバリアによりバリア同期を行いつつリダクション演算を行う処理における各ステージ間での同期信号の流れは、図２０と同様である。これにより、ペアワイズエクスチェンジウィズリカーシブダブリングによりバリア同期を行いつつリダクション演算が実行される。
【０１９３】
（第７の実施態様）
第７の実施態様は、本発明の他の実施態様であるバリア同期装置であって、バタフライによりバリア同期を行うバリア同期装置に関する。
【０１９４】
図２１は、本発明の一実施態様であるバリア同期装置を備え、マルチプロセッサ（マルチプロセッサコア）により構成されるコンピュータシステムの構成の一例を示す。図２２は、図２１のコンピュータシステムにおける、本発明の一実施態様であるバリア同期装置を示す。
【０１９５】
第７の実施態様においては、バリア同期装置６Ａは、第１の実施態様のように各々のプロセッサコア１０に設けられるのではなく、プロセッサコアとは独立に設けられる。即ち、第７の実施態様において、複数のプロセッサコア１０が、バス９を介して、接続されるとともに、バス９にはバリア同期装置６Ａが接続される。これにより、複数のプロセッサコア１０は、バス９を介して、バリア同期装置６Ａと接続される。バス９に代えて、種々のネットワークを用いるようにしても良い。
【０１９６】
第７の実施態様においては、バリア同期装置６Ａは、相互に通信を行なわない。このため、バリア同期装置６Ａは、第１の実施態様のような受信装置６１及び送信装置６３を備えない。即ち、第７の実施態様のバリア同期装置６Ａは、図６に示す第１の実施態様のバリア同期装置６において、受信装置６１及び送信装置６３を省略した構成を有する。これに代えて、複数のプロセッサコア１０及びバリア同期装置６Ａが、各々、バスインタフェースを備え、全ての入力信号及び出力信号は、バスインタフェースを介して、入力又は出力される。
【０１９７】
第７の実施態様においては、バリア同期装置６Ａに接続されたプロセッサコア１０毎に、対応する制御レジスタ６２２が、バリア同期装置６Ａ内に予め定められる。これにより、例えば４個のプロセッサコア１０でバリア同期を実行する場合、第１の実施態様における図４と同様にしてバリア同期を行うことができる。この結果、プロセッサコア１０にバリア同期装置６Ａを設けたのと同様に、バリア同期を行うことができる。
【０１９８】
第７の実施態様においては、複数のプロセッサコア１０に対応する複数の制御レジスタ６２２が同一のバリア同期装置６Ａに存在する。従って、複数のバリア同期装置６Ａの間におけるブロードキャストは不要であり、これに代えて、制御部６２１が、当該複数の制御レジスタ６２２を参照する。
【０１９９】
（第８の実施態様）
第８の実施態様は、本発明の他の実施態様である、バタフライによりバリア同期を行うリダクション演算装置に関する。
【０２００】
第８の実施態様は、第７の実施態様におけるバリア同期装置６Ａに代えて、リダクション演算装置８Ｂを設けた例である。
【０２０１】
図２３は、図２１のコンピュータシステムにおける、本発明の一実施態様であるリダクション演算装置を示す。
【０２０２】
第８の実施態様においては、リダクション演算装置８Ｂは、各々のプロセッサコア１０と独立に設けられる。リダクション演算装置８Ｂは、第１の実施態様のような受信装置８１及び送信装置８３を備えない。即ち、第８の実施態様のリダクション演算装置８Ｂは、図１０に示す第２の実施態様のリダクション演算装置８において受信装置８１及び送信装置８３を省略した構成を有する。これに加えて、第８の実施態様のリダクション演算装置８Ｂは、あるリダクション演算においては同一の演算を行うので、図１０のリダクション演算装置８においてデマルチプレクサ８４６を省略した構成を有する。一方、第８の実施態様のリダクション演算装置８Ｂの演算器８４５は、図１０のリダクション演算装置８の演算器８４５と同様の構成を備える。
【０２０３】
第８の実施態様においては、プロセッサコア１０毎に、これが使用する制御レジスタ８２２が予め定められる。これにより、例えば４個のプロセッサコア１０でバリア同期によるリダクション演算を実行する場合、第２の実施態様における図１２と同様にしてバリア同期によるリダクション演算を行うことができる。この結果、プロセッサコア１０にリダクション演算装置８Ｂを設けたのと同様に、バリア同期によるリダクション演算を行うことができる。
【０２０４】
第８の実施態様においては、複数のリダクション演算装置８Ｂの間におけるブロードキャストは不要である。
【図面の簡単な説明】
【０２０５】
【図１】ノードの接続の一例を示す図である。
【図２】ノードの構成の一例を示す図である。
【図３】バリア同期の概要を示す説明図である。
【図４】４個のプロセスでのバタフライによるバリア同期の例を示す図である。
【図５】バリア同期装置の構成の一例を示す図である。
【図６】主として、同期装置（同期部）の構成の一例を示す図である。
【図７】バリア同期実行時の処理フローチャートである。
【図８】バタフライによるバリア同期での信号の流れを示す図である。
【図９】リダクション演算装置の構成の一例を示す図である。
【図１０】主として、リダクション演算部の構成の一例を示す図である。
【図１１】演算器の構成の一例を示す図である。
【図１２】バタフライによるリダクション演算を示す図である。
【図１３】リダクション演算実行時の処理フローチャートである。
【図１４】バタフライネットワークによるリダクション演算でのデータ及び信号の流れを示す図である。
【図１５】６個のプロセスでのバタフライによるバリア同期の例を示す図である。
【図１６】６個のプロセスでのディスエミネーションによるバリア同期の例を示す図である。
【図１７】ディスエミネーションによるバリア同期での信号の流れを示す図である。
【図１８】主として、リダクション演算部の構成の一例を示す図である。
【図１９】６個のプロセスでのペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期の例を示す図である。
【図２０】ペアワイズエクスチェンジウィズリカーシブダブリングによるバリア同期での信号の流れを示す図である。
【図２１】マルチコアプロセッサの構成例を示す図である。
【図２２】主として、同期装置（同期部）の構成の一例を示す図である。
【図２３】主として、リダクション演算部の構成の一例を示す図である。
【符号の説明】
【０２０６】
１  ノード
２  ネットワーク
３  ＣＰＵ
４  メモリ
５  システム制御部
６  バリア同期装置
７  入出力装置
８  リダクション演算装置
６１、８１  受信装置
６２、８２  同期装置（同期部）
６３、８３  送信装置
６２１、８２１  制御部
６２２、８２２  制御レジスタ
８４１  入力データレジスタ
８４２  マルチプレクサ
８４３  スイッチ
８４４  記憶装置
８４５  演算器
８４６  デマルチプレクサ
８４７  出力データレジスタ
【図１】
2010122848.tif 000003
【図２】
2010122848.tif 000004
【図３】
2010122848.tif 000005
【図４】
2010122848.tif 000006
【図５】
2010122848.tif 000007
【図６】
2010122848.tif 000008
【図７】
2010122848.tif 000009
【図８】
2010122848.tif 000010
【図９】
2010122848.tif 000011
【図１０】
2010122848.tif 000012
【図１１】
2010122848.tif 000013
【図１２】
2010122848.tif 000014
【図１３】
2010122848.tif 000015
【図１４】
2010122848.tif 000016
【図１５】
2010122848.tif 000017
【図１６】
2010122848.tif 000018
【図１７】
2010122848.tif 000019
【図１８】
2010122848.tif 000020
【図１９】
2010122848.tif 000021
【図２０】
2010122848.tif 000022
【図２１】
2010122848.tif 000023
【図２２】
2010122848.tif 000024
【図２３】
2010122848.tif 000025