(57)【特許請求の範囲】
【請求項１】
複数のノードから同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置であって、
前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、
前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、
データと前記演算器の演算結果を保持する記憶装置と、
前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、
受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、
前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記同期が成立した複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する
ことを特徴としたリダクション演算装置。
【請求項２】
請求項１のリダクション演算装置において、
前記同期装置は、各々前記複数のノードに対応して設けられ、前記同期信号、前記送信ノード先のアドレス、前記演算タイプ又はデータタイプを格納する複数の制御レジスタを有し、
前記制御レジスタの各々に、マスクレジスタを設け、
前記同期装置は、前記同期成立後、前記マスクレジスタが有効な値を示す制御レジスタを前記演算タイプ又はデータタイプの比較と、前記演算との実行の対象外とする
ことを特徴としたリダクション演算装置。
【請求項３】
請求項１のリダクション演算装置において、
前記同期装置は、前記送信装置を介し、前記不整合を示す信号と前記不整合が発生したノードのアドレスとを送る
ことを特徴としたリダクション演算装置。
【請求項４】
ネットワークを介し相互に接続された複数のノードの各々に設けられた処理装置であって、
処理ユニットと、
前記処理ユニット及び他の前記ノードから前記ネットワークを介し同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置とを有し、
前記リダクション演算装置は、
前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、
前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、
データと前記演算器の演算結果を保持する記憶装置と、
前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、
受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、
前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記同期が成立した複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する
ことを特徴とした処理装置。
【請求項５】
ネットワークを介し接続された複数のノードを有するコンピュータシステムであって、
前記ノードの各々は、
処理ユニットと、
前記処理ユニット及び他の前記ノードから前記ネットワークを介し同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置とを有し、
前記リダクション演算装置は、
前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、
前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、
データと前記演算器の演算結果を保持する記憶装置と、
前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、
受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、
前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記同期が成立した複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する
ことを特徴としたコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リダクション演算装置、処理装置及びコンピュータシステムに関する。
【背景技術】
【０００２】
リダクション演算は、複数のプロセスが持つデータを対象とした演算である。代表的なリダクション演算としては、例えば、データの総和を求める演算、最大値、最小値を求める演算等が知られている。リダクション演算は、演算結果を特定のプロセスのみが持つ場合と、全てのプロセスが持つ場合とがある。しかし、いずれの場合でもプロセス間でデータの通信が行なわれるので、リダクション演算は、バリア同期と同じアルゴリズムを用いて実行することができる。
【０００３】
バリア同期は、並列処理されている複数のプロセス間の同期をとる方法である。バリア同期では同期を取るポイント、つまりバリアポイントが設定される。バリア同期を行なうプロセスはバリアポイントに処理が到着した場合、処理を一時的に停止する。バリア同期を行なう並列処理されている全てのプロセスがバリアポイントに到着した時点で、バリア同期を行なうプロセスは、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【０００４】
並列計算を行っている複数のノード間でリダクション演算を行う場合には、各ノード内にリダクション演算装置を設けることが有効である。リダクション演算装置は複数の種類の演算処理を実行できる。リダクション演算装置は、ノードからのデータの同期が成立したかを判定し、成立した場合に、指定された演算処理を実行する。
【０００５】
一方、リダクション演算は複数のノード間に跨った処理であり、各ノードがリダクション演算を開始することで行う。各ノードは個別にリダクション演算の演算タイプ、データタイプを指定するため、ノード間で、演算タイプ、データタイプの不整合が起こり得る。不整合を検出するためには、他のノードが指定した演算タイプ、データタイプを確認するため、ノード間で、演算タイプ、データタイプの通信が必要となる。
【０００６】
ノード内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がソフトウェアでリダクション演算処理を行う場合には、演算タイプ、データタイプの不整合検出をソフトウェアで行うことが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】日本特許公開２０１０−１２２８４８号公報
【特許文献２】日本特許公開平３−０９８１５２号公報
【非特許文献】
【０００８】
【非特許文献１】PROST J.-P.,TREUMANN R., HEDGES R., JIA B., KONIGES A. E., and WHITE A.、“Ｔｏｗａｒｄｓ ａ Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ ａｎｄ  Ｒｏｂｕｓｔ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ ｏｆ MPI−IO  on ｔoｐ ｏｆ ＧＰＦＳ”, National Technical Information Service U.S. Department of Commerce, UCRL-LC-137128, January １１, ２０００
【非特許文献２】Patrick Ohly, Werner Krotz-Vogel、“Ａｕｔｏｍａｔｅｄ ＭＰＩ Ｃｏｒｒｅｃｔｎｅｓｓ Ｃｈｅｃｋｉｎｇ Ｗｈａｔ ｉｆ ｔｈｅｒｅ ｗａｓ ａ ｍａｇｉｃ ｏｐｔｉｏｎ？”、Ｔｈｅ ８ｔｈ ＬＣＩ Ｉｎｔｅｒｎａｔｉｏｎａｌ Ｃｏｎｆｅｒｅｎｃｅ ｏｎ  Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｌｕｓｔｅｒｅｄ  Ｃｏｍｐｕｔｉｎｇ，２００７
【発明の概要】
【発明が解決しようとする課題】
【０００９】
リダクション演算装置をノード内に独立設ける構成においては、ノード間で演算タイプ、データタイプの不整合があると、処理が完了せず、ハングアップ、もしくは誤った計算結果を返す。又、この際のデバッグは困難である。
【００１０】
又、ソフトウェアでリダクション演算を行う構成においては、ノード間でリダクション演算データとは別に演算タイプ、データタイプの通信を行い、不整合を検出している。従って、リダクション演算の完了には、演算タイプ、データタイプの通信完了も待たなければならない。そのため、リダクション演算の処理時間が長くなる。
【００１１】
本発明の目的は、ハードウェアでノード間の演算タイプ、データタイプの不整合を検出できるリダクション演算装置、処理装置及びコンピュータシステムを提供することにある。
【課題を解決するための手段】
【００１２】
この目的の達成のため、開示のリダクション演算装置は、複数のノードから同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置であって、前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、データと前記演算器の演算結果を保持する記憶装置と、前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する。
【００１３】
又、この目的の達成のため、開示の処理装置は、ネットワークを介し相互に接続された複数のノードの各々に設けられた処理装置であって、処理ユニットと、前記処理ユニット及び他の前記ノードから前記ネットワークを介し同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置とを有し、前記リダクション演算装置は、前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、データと前記演算器の演算結果を保持する記憶装置と、前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記同期が成立した複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する。
【００１４】
更に、この目的の達成のため、開示のコンピュータシステムは、ネットワークを介し接続された複数のノードを有するコンピュータシステムであって、前記ノードの各々は、処理ユニットと、前記処理ユニット及び他の前記ノードから前記ネットワークを介し同期信号とデータとの組が入力され、リダクション演算を行うリダクション演算装置とを有し、前記リダクション演算装置は、前記各組の同期信号の入力を待ち合わせ、前記各組の同期信号の同期成立後に、演算器に演算指示を出力し、リダクション演算のアルゴリズムにおける次ステージに対応して設定された送信ノード先に演算結果を出力するよう送信装置に指示する同期装置と、前記演算指示に応じて、前記同期が成立した組のデータ間で演算を行う前記演算器と、データと前記演算器の演算結果を保持する記憶装置と、前記同期装置で指定された送信ノード先に前記演算結果及び第２の同期信号を送信する前記送信装置と、受信した同期信号を前記同期装置に、受信したデータを前記記憶装置に送る受信装置とを有し、前記同期装置は、更に、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記同期が成立した複数組の演算タイプ又はデータタイプ間、又は前記複数組の演算タイプ及びデータタイプ間で不整合があるか否かの比較を行い、前記比較結果が不整合を示す場合に、前記演算結果の代わりに不整合を示す信号を前記設定された送信ノード先に送信するよう前記送信装置に指示し、前記比較結果が不整合を示さない場合に指定された演算を前記演算器に指示し、前記設定された送信ノード先に演算結果を出力するよう送信装置に指示する。
【発明の効果】
【００１５】
各組の同期信号及びデータの送信先をリダクション演算のアルゴリズムにおける次ステージに対応して設定し、リダクション演算を行うリダクション演算装置において、組内の演算タイプ又はデータタイプの不整合を検出し、演算制御するため、処理が完了せず、ハングアップ、もしくは誤った計算結果を返すことを防止でき、且つリダクション演算完了の処理時間の長期化も防止できる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態のコンピュータシステムのブロック図である。
【図２】図１のノード（処理装置）のブロック図である。
【図３】図１のバリア同期の説明図である。
【図４】図３において、４個のプロセスでのバタフライによるバリア同期の例の説明図である。
【図５】図２のリダクション演算装置のブロック図である。
【図６】図５のリダクション演算装置の第１の実施の形態のブロック図である。
【図７】図５及び図６のリダクション演算装置のパケットのフォーマットの説明図である。
【図８】図６のリダクション演算処理フロー図（その１）である。
【図９】図６のリダクション演算処理フロー図（その２）である。
【図１０】図１乃至図６のリダクション演算処理の説明図である。
【図１１】図６乃至図９のリダクション演算処理における不整合検出処理の説明図である。
【図１２】図５のリダクション演算処理の第２の実施の形態のブロック図である。
【図１３】図１３のリダクション演算装置のブロック図である。
【図１４】図１３のリダクション演算処理フロー図（その１）である。
【図１５】図１３のリダクション演算処理フロー図（その２）である。
【図１６】第３の実施の形態のパケットのフォーマットの説明図である。
【発明を実施するための形態】
【００１７】
以下、実施の形態の例を、コンピュータシステム、第１の実施の形態のリダクション演算装置の構成、第１の実施の形態のリダクション演算処理、第２の実施の形態のリダクション演算装置、第２の実施の形態のリダクション演算処理、第３の実施の形態のリダクション演算処理、他の実施の形態の順で説明するが、開示のコンピュータシステム、ノード、リダクション演算装置は、この実施の形態に限られない。
【００１８】
（コンピュータシステム）
図１は実施の形態のコンピュータシステムのブロック図である。図２は図１のノードのブロック図である。図１に示すように、コンピュータシステムは、複数のノード１と、これらのノード１を接続するネットワーク２とを含む。図１の実施の形態においては、４個のノード＃１〜＃４がコンピュータネットワーク２に接続される。ネットワーク２により接続された複数のノード１は、並列演算を実行する。ネットワーク２は、例えば、クロスバスイッチを利用できる。
【００１９】
図２に示すように、複数のノード１の各々は、演算処理ユニット（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３とメモリ４Ａとシステム制御部５とリダクション演算装置６と入出力装置４Ｂとを備える。システム制御部５はノード１の全体の動作を制御する。即ち、システム制御部５は、ＣＰＵ３、メモリ４Ａ、リダクション演算装置６、入出力装置４Ｂを制御する。ＣＰＵ３はシステム制御部５を介して、入出力装置４Ｂとの間で必要なデータの送受信を行う。即ち、入出力装置４Ｂはバリア同期のアルゴリズムと実行条件とを含む設定条件を、ＣＰＵ３に設定する。また、入出力装置４Ｂは、必要に応じて、ＣＰＵ３から出力されたデータを出力する。
【００２０】
ＣＰＵ３は、システム制御部５を介して、リダクション演算装置６に対してリダクション演算開始の信号を送信し、また、リダクション演算装置６からリダクション演算完了の信号を受信する。又、ＣＰＵ３は、入出力装置４Ｂから入力された設定条件に従って、リダクション演算の送信先、演算タイプ、データタイプをリダクション演算装置６に設定する。
【００２１】
リダクション演算装置８は、バリア同期を取りつつリダクション演算を行う。リダクション演算装置６は、設定条件に従って、ネットワーク２を介して、他のノード１のリダクション演算装置６との間で通信を行ない、当該通信に基づいて、バリア同期を含むリダクション演算を行なう。
【００２２】
更に、ＣＰＵ３は、システム制御部５を介して、メモリ４Ａとの間で、必要なデータの送受信を行う。ＣＰＵ３は、メモリ４Ａにデータを書き込み、また、メモリ４Ａからデータを読み出す。このデータは、後述するリダクション演算装置のリダクション演算に用いられるデータである。
【００２３】
ここで、リダクション演算装置６のバリア同期について簡単に説明する。図３は３つのプロセス＃０〜＃２のバリア同期の説明図である。図４は４個のプロセス＃０〜＃３の間において、バタフライによるバリア同期を行なう例を示す説明図である。
【００２４】
図３に示すように、バリア同期を行なう複数のプロセス＃０〜＃２は、その処理が同期をとるポイント（バリアポイントという）に到着した場合、自身のプロセスの処理を停止する。即ち、複数のプロセス＃０〜＃２自身がバリアポイントに到達した場合、複数のプロセス＃０〜＃２の各々は、他のプロセスがバリアポイントに到着するのを待ち合わせる。
【００２５】
バリア同期を行なう全てのプロセス＃０〜＃２がバリアポイントに到着した時点で（バリア同期が成立した時点という）、複数のプロセス＃０〜＃２の各々は、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【００２６】
このようなバリア同期を実現するアルゴリズムの一つに、バタフライ（Ｂｕｔｔｅｒｆｌｙ）がある。以下、バタフライにおいては、処理を複数のステージに分割し、ステージ毎に他のプロセスと信号の通信を行なう。この実施の形態においては、バリア同期のアルゴリズムとして、バタフライが用いられる。
【００２７】
図４は、４個のプロセス＃０〜＃３の間において、バタフライによるバリア同期を行なう例を示す。図４において、例えば、プロセス＃０を円の中に数字の０を付して表し、他のプロセス＃１〜＃３も同様に表す。ステージ番号を「ｋ」、自プロセス又は自ノードのプロセス番号をｉとすると、各々のステージにおけるバリアポイント到着の信号の送信先は、「ｉ ＸＯＲ ２＾（ｋ−１）」となる。ステージ数は、プロセス数Ｎが２のべき乗のとき、ｌｏｇ２（Ｎ）となる。
【００２８】
例えば、図４において、プロセス＃０に着目すると、以下のように送信先が予め定められる。即ち、ステージ＃１において、バリアポイント到着を示す信号の送信先はプロセス＃１である。ステージ＃２において、プロセス＃０からのバリアポイント到達を示す信号の受信元はプロセス＃１であり、プロセス＃０からのバリアポイント到達を示す信号の送信先はプロセス＃２である。
【００２９】
これらの信号の送信先及び受信元は、設定条件において、バリア同期のアルゴリズム及び実行条件つまりプロセスの構成が定まることにより、一意に定めることができる。この例においては、バリア同期のアルゴリズムはバタフライであり、実行条件は４個のプロセスであるので、前述したように定めることができる。
【００３０】
図４の例において、入出力装置４ＢからＣＰＵ３に入力される設定条件においては、バリア同期のアルゴリズムはバタフライとされ、実行条件は４個のプロセスとされる。これに加えて、実行条件として、当該演算つまりバリア同期におけるステージ数ｋと、各々のプロセス自身つまり自ノードのプロセス番号ｉも入力される。ステージ数ｋはステージ番号の最大値を示している。
【００３１】
なお、ＣＰＵ３への設定条件の入力は、これに限られない。例えば、いずれか１個のノード１がネットワーク２を介して、他のノード１に各々の設定条件を入力するようにしても良い。また、ネットワーク２に接続された管理用のコンピュータが、ネットワーク２を介して、全てのノード１に各々の設定条件を入力するようにしても良い。
【００３２】
各プロセスは、ステージ毎に他のプロセスとの間でバリアポイント到着の信号を通信し合う。例えば、図４の最初のステージ＃１において、各プロセスは、バリア同期ポイントに到着する。到着のタイミングは、各プロセスで異なる。この場合、各プロセスは、バタフライネットワーク上における次ステージの予め設定されたプロセスに信号を送る。バタフライネットワークは、図１に示すネットワーク２である。即ち、バタフライネットワークは、バタフライによりバリア同期を行う、図２に示すノード１が接続されたネットワークである。これは以下の図においても同じである。
【００３３】
次のステージ＃２において、各プロセスは、バタフライネットワークの前のステージ＃１の予め設定されたプロセスからの信号を待ち合わせる。各プロセスは、他のプロセスから信号を受信した場合、次のステージ＃３の予め設定されたプロセスに信号を送る。
【００３４】
最後のステージ＃３において、各プロセスは、前ステージ＃２の予め設定されたプロセスからの信号を待ち合わせる。各プロセスが他のプロセスからの信号を受けると、全てのプロセス＃０〜＃３がバリアポイントに到着した後にバリア同期が成立した事を知る。この後、各プロセスは、バリア同期が成立したので、次の処理を開始する。
【００３５】
（第１の実施の形態のリダクション演算装置の構成）
図５は第１の実施の形態のリダクション演算装置の構成図である。図６は図５の構成の詳細ブロック図である。図７は図５及び図６のパケットのフォーマットの説明図である。図５及び図６のリダクション演算装置６は、図１及び図２に示すコンピュータネットワークを構成するノード１に設けられる。
【００３６】
リダクション演算装置６は、バリア同期を取りつつリダクション演算を行う。図５に示すように、リダクション演算装置６は、リダクション演算部７と同期装置（以下「同期装置」という）８と受信装置１０と送信装置１２とを備える。同期装置８２は、制御部８０と複数の制御レジスタ８２とを備える。
【００３７】
受信装置１０は、ネットワーク２からのパケットを受信し、パケット内のデータをリダクション演算部７に転送し、パケット内の制御情報（同期信号、演算タイプ、データタイプ、送信宛先）を同期装置８の制御部８０に転送する。送信装置１２は、同期装置８の制御部８０のパケット送信指示に応じて、パケットをネットワーク１２に送信する。
【００３８】
同期装置８の制御部８０は、ＣＰＵ３から送信先とリダクション開始指示を受け、受信装置１０からパケット内の制御情報（同期信号、演算タイプ、データタイプ、送信宛先）を受ける。同期装置８の制御部８０は、複数の制御レジスタ８２を参照して、その参照結果に基づいて、バリア同期の成立を判定し、リダクション演算器７の記憶制御及び演算制御、送信装置１２の送信制御を行う。
【００３９】
同期装置８の複数の制御レジスタ８２の各々は、各ステージに対応し、データの同期と演算、送信に使用する。換言すれば、複数の制御レジスタ８２を備えることにより、各々の演算毎に同期信号を制御レジスタ８２に保持し、バリア同期を実行することが可能となる。従って、１組の演算がｎ個の第１の同期信号で構成される場合、同期装置８の制御部８０は、各々がｎ個の第１の同期信号で構成される複数の組について、各々、バリア同期を実行する。この場合、１個のノード１上で複数のプロセスが動作する。
【００４０】
リダクション演算部７は、受信装置１０からの他のノードのデータと、ＣＰＵ３からの入力データとを受ける。リダクション演算部７は、後述するように記憶装置と演算器とを含む。リダクション演算部７は、同期装置８からの記憶制御及び演算制御の指示に従い、記憶装置で各ステージのデータを記憶し、演算器で記憶したデータ間で指定された演算を行い、演算結果を出力する。
【００４１】
次に、リダクション演算処理手順を説明する。ノード１のＣＰＵ３は予め、制御レジスタ８２の宛先（Destination）に制御信号とデータの送信先を指定する。例えば、図４のように、バタフライのアルゴリズムに基づいて、送信先を指定する。リダクション演算開始時には、ノード１のＣＰＵ３は入力データとリダクション演算開始の指示をリダクション演算装置６に送る。本実施の形態では、ＣＰＵ３からのリダクション演算指示、及び前ステージからの制御信号で演算タイプ及びデータタイプを指定する。
【００４２】
リダクション演算装置６は始点の制御レジスタ８２の宛先（Destination）で指定された送信先に制御信号とデータを送る。制御信号とデータを受け取った受信元のリダクション演算装置６は、送信先で指定された制御レジスタの同期信号（Signal）を更新し、データをリダクション演算部７の記憶装置に書き込む。同期装置８が、各制御レジスタ８２を参照し、データの同期が成立したと判定すると、リダクション演算部７は、演算タイプで指定された演算を行い、演算結果と制御信号を宛先（Destination）で指定された送信先へ送る。
【００４３】
同期装置８の制御部８０は、制御レジスタ８２の同期信号（Signal）を用いて、同期成立を判定する。以降は、同様の処理を続け、終点の制御レジスタ８２で同期が成立すると、リダクション演算装置６は、演算結果を出力データレジスタに書き、リダクション演算完了をノードのＣＰＵ３に通知する。
【００４４】
このような構成において、本実施の形態では、ＣＰＵ３が、演算開始指示と演算データとともに、演算タイプ及びデータタイプを同期装置８に指定し、同期装置８の制御部８０が、複数の制御レジスタ８２に設定された演算タイプ及びデータタイプの一致、不一致を検出し、不一致を検出した場合に、全ノードに通知する。
【００４５】
全ノードに通知するため、不整合があってもハングアップ、誤った計算結果を返すことはなく、デバッグが容易になる。また、従来技術では、不整合の検出処理には、ノード間で演算タイプ、データタイプを演算データとは別に通信し、且つそれらの比較処理とが必要であり、オーバヘッドとなる。本実施の形態では、演算タイプ、データタイプの通信をリダクション演算データと合わせて通信することで通信時間を隠蔽でき、且つ比較処理をハードウェアで行なうため、検出処理がオーバヘッドとなることを防止できる。更に、ハードウェアの追加は、演算タイプ、データタイプの比較を行う比較器のみのため、コストの上昇は少ない。
【００４６】
図６により、図５のリダクション演算装置６を詳細に説明する。図６に示すように、リダクション演算部７は、複数の入力レジスタ７０−０〜７０−ｍとマルチプレクサ７２とスイッチ７３と記憶装置７４と演算器７５とデマルチプレクサ７６と複数の出力レジスタ７９−０〜７９−ｍとを有する。
【００４７】
同期装置８の複数の制御レジスタ８２−０〜８２−Ｎの各々は、同期信号の各組に対応する。複数の制御レジスタ８２−０〜８２−Ｎの各々は、シグナルレジスタ８４Ａと宛先レジスタ８４Ｂと演算タイプレジスタ８４Ｃとデータタイプレジスタ８４Ｄとを含む。なお、図６において、シグナルレジスタ８４Ａは符号Signalを付して表し、宛先レジスタ８４Ｂは符号Destination を付して表し、演算タイプレジスタ８４Ｃは符号ＯｐＴｙｐｅを付して表し、データタイプレジスタ８４Ｄは符号ＤａｔａＴｙｐｅを付して表す。
【００４８】
シグナルレジスタ８４Ａは、制御レジスタ８２−０〜８２−Ｎに対応するプロセス又はノードから同期信号を受信したか否かを示す情報を格納する。即ち、シグナルレジスタ８４Ａは、同期信号の待ち合わせ状況を示す情報を格納する。宛先レジスタ８４Ｂは、制御レジスタ８２−０〜８２−Ｎが同期信号を送信すべき宛先であるプロセス又はノードを示す情報を格納する。即ち、宛先レジスタ８４Ｂは、同期成立の後に同期信号の送信先を示す情報を格納する。
【００４９】
宛先レジスタ８４Ｂは、同期信号の送信先が他のノードである場合、送信先となる宛先ノードアドレスおよび制御レジスタ番号を格納する。宛先ノードアドレスは、ノードのネットワークアドレスであり、一意に定まる。制御レジスタ番号は、制御レジスタ８２−０〜８２−Ｎの番号であり、ノードにおいて一意に定まる。宛先ノードアドレスは、ノードに予め付与されたノード番号であっても良い。制御レジスタ番号は、制御レジスタ８２−０〜８２−Ｎに予め付与された番号又は組番号であっても良い。
【００５０】
宛先ノードアドレス及び制御レジスタ番号を指定することにより、１個のノードにおける１個の制御レジスタが定まる。宛先レジスタは、同期信号の送信先が自ノード１である場合、自プロセス又は自ノード１の同期装置８の制御レジスタ番号を格納する。
【００５１】
タイプレジスタ８４Ｃは、リダクション演算の演算タイプを格納する。演算タイプは、例えば、総和（ＳＵＭ），最大値演算（ＭＡＸ），最小値演算（ＭＩＮ）である。データタイプレジスタ８４Ｄは、リダクション演算のデータのタイプを格納する。データタイプは、例えば、整数（Ｉｎｔ）データか浮動小数点データか、倍精度か単精度か、バイト数等である。
【００５２】
受信装置１０は、ネットワーク２を介して他ノードと接続され、同期信号を含む他ノードからのパケットを受信する。図７に示すように、パケットは、演算タイプ、データタイプ、宛先（送信先アドレス、送信先制御レジスタ番号）及びデータのフォーマットを持つ。受信装置１０は、ネットワーク２を介して他のノードのリダクション演算装置６からパケットを受信した場合、受信装置１０は、受信したパケットに含まれる同期信号、演算タイプ、データタイプ、データ及び宛先の情報からを取り出し、同期信号、演算タイプ、データタイプ、及び宛先を同期装置８の制御部８０に送信する。
【００５３】
宛先は、同期信号の宛先となる宛先ノードアドレス及び制御レジスタの制御レジスタ番号である。この宛先により、取出された宛先ノードアドレスに対応するノード及び取出された制御レジスタ番号に対応する制御レジスタ８２−０〜８２−Ｎを定めることができる。又、受信装置１０は、パケットのデータをマルチプレクサ７２に出力する。
【００５４】
次に、リダクション演算部７を説明する。リダクション演算の第１の対象データは、ＣＰＵ３から、ライトデータとして入力データレジスタ７０−０〜７０−ｍに入力される。制御部８０のリードアドレスに対応する入力データレジスタ７０−０〜７０−ｍからリードデータ（ライトデータ）が読みだされ、マルチプレクサ７２に入力される。リダクション演算の第２の対象データは、ネットワーク２から受信装置１０を介してパケットから取出されて、マルチプレクサ７２に入力される。
【００５５】
一方、リダクション演算の結果は、デマルチプレクサ８４６から、ライトデータとして出力データレジスタ７９−０〜７９−ｍに出力され、リードデータとして出力データレジスタ７９−０〜７９−ｍからＣＰＵ３に出力される。また、リダクション演算の結果は、デマルチプレクサ８４６から送信装置１２に出力され、送信装置１２からネットワーク２へパケットとして送信される。
【００５６】
入力データレジスタ７０−０〜７０−ｍ及び出力データレジスタ７９−０〜７９−ｍは、複数設けられる。入力データレジスタ７０−０〜７０−ｍは、各々、制御レジスタ８２−０〜８２−Ｎと対応する。出力データレジスタ７９−０〜７９−ｍも同様である。
【００５７】
ライトデータを書き込むべき入力データレジスタ７０−０〜７０−ｍは、ＣＰＵ３からライトアドレスにより指定される。リードデータを読み出すべき入力データレジスタ７０−０〜７０−ｍは、制御部８０からのリードアドレスにより指定される。入力データレジスタ７０−０〜７０−ｍのリードアドレスは、例えば受信装置１０が受信したパケットにおける宛先が指示する制御レジスタ８２−０〜８２−Ｎに対応し、当該制御８２−０〜８２−Ｎの制御レジスタ番号に基づいて生成される。
【００５８】
ライトデータを書き込むべき出力データレジスタ７９−０〜７９−ｍは、制御部８０からのライトアドレスにより指定される。出力データレジスタ７９−０〜７９−ｍのライトアドレスは、当該ライトデータのリダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応し、当該制御レジスタ８２−０〜８２―Ｎの制御レジスタ番号に基づいて生成される。リードデータを読み出すべき出力データレジスタ８２−０〜８２−Ｎは、ＣＰＵ３からのリードアドレスにより指定される。
【００５９】
マルチプレクサ７２は、制御部８０からの入力部選択の指示に従って、入力データレジスタ７０−０〜７０ｍからのデータ、又は、受信装置１０からのデータを選択する。選択されたデータは、スイッチ７３を介して、記憶装置７４又は演算器７５に入力する。制御部８０は、受信装置１０から同期信号及び宛先が入力された場合には、受信装置１０のデータをマルチプレクサ８４２が選択し、これ以外の場合には、入力データレジスタ７０−０〜７０−ｍのリードデータをマルチプレクサ８４２が選択するように入力部選択指示を行う。
【００６０】
スイッチ７３は、制御部８０からの入出力部選択の指示に従って、マルチプレクサ７２又は演算器７５からの入力を、記憶装置７４又は演算器７５に入力する。制御部８０は、マルチプレクサ７２からデータが入力された場合には、マルチプレクサ８４２のデータを選択し、これ以外の場合には、演算器７５のデータを選択するようにスイッチ７３を制御する。また、制御部８０は、同期が成立した場合には、入力されたデータを演算器８４５に出力し、これ以外の場合には、入力されたデータを記憶装置８４４に出力するように、スイッチ７３を制御する。
【００６１】
記憶装置７４は、マルチプレクサ７２、スイッチ７３を介して入力されたデータを記憶する。即ち、記憶装置７４は、リダクション演算中のデータを保持する。記憶装置７４の記憶容量は、例えば、（制御レジスタ８２−０〜８２−Ｎの数）×（データのビット数）である。記憶装置７４は、制御部８０からライトアドレスで指定されたアドレスにリダクション演算中のデータを保持する。記憶装置７４のライトアドレスは、当該リダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応する。制御部８０は、当該制御レジスタ８２−０〜８２−Ｎの制御レジスタ番号に基づいて、ライトアドレスを生成する。
【００６２】
又、制御部８０は、リードアドレスにより、記憶装置７４に格納されたリダクション演算中のデータを、演算器７５に読み出す。記憶装置７４のリードアドレスは、当該リダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応する。制御部８０は、当該制御レジスタ８２−０〜８２−Ｎの制御レジスタ番号に基づいて、リードアドレスを生成する。
【００６３】
演算器７５は、同期が成立した場合、記憶装置７４で待ち合わせているデータと、マルチプレクサ７２を介して入力するパケットからのデータ又は先の演算結果との間で、制御部８０から指示された演算を行なう。即ち、演算器７５は、制御部８０からの演算指示に従って、所定の演算を実行して、その結果を、デマルチプレクサ７６に出力すると共に、スイッチ７３に出力する。
【００６４】
演算器７５は、例えば、加算部（ＡＤＤ）と論理和演算部（Ｌｏｇｉｃａｌ）と最大値算出部（ＭＡＸ）と最小値算出部（ＭＩＮ）とを備える。
【００６５】
演算器７５は、記憶装置７４から入力するデータ（第１データ）と、入力データレジスタ７０−０〜７０−ｍから入力するデータと、受信装置１０が受信したパケットのデータ又は演算器７５が前ステージで行なった演算結果（第２データ）との間で、指示された種類の演算を行なう。制御部８０は、演算の種類を示すタイプレジスタ８４Ｃの値に基づいて、演算指示を生成する。
【００６６】
デマルチプレクサ７６は、制御部８０からの出力部選択指示に従って、演算器７５からの入力を、出力データレジスタ７９−０〜７９−ｍ又は送信装置１２に出力する。制御部８０は、リダクション演算が完了する以前には、演算器７５からのデータを送信装置１２に出力し、これ以外の場合（リダクション演算が完了した場合）には、出力データレジスタ７９−０〜７９−ｍに出力するようにデマルチプレクサ７６を制御する。
【００６７】
又、制御部８０は、同期成立の後に、第２の同期信号の送信を送信装置１２に指示（図示「パケット送信指示」）すると共に、予め定められたリダクション演算をリダクション演算部８４に指示する。また、送信装置１２は、第２の同期信号送信の指示を受信した場合、第２の同期信号と共に、演算器７５におけるリダクション演算の結果をネットワーク２に送信する。
【００６８】
（第１の実施の形態のリダクション演算処理）  
図８及び図９は本実施の形態のリダクション演算処理フロー図である。
【００６９】
（Ｓ１）リダクション演算を実行する前に、ＣＰＵ３は、リダクション演算装置の同期装置９内の各制御レジスタ８２−０〜８２−Ｎの宛先（Destination）レジスタ８４Ｂに送信先を書き込む。即ち、ＣＰＵ３は、宛先レジスタ８４Ｂに、バタフライ（Butterfly）などのリダクション演算のアルゴリズムにより決定された次ステージに対応したノードアドレスと制御レジスタ番号を設定する。このノードアドレスとして、他ノードのみの、自ノードのみの場合がある事を書きこむ。
【００７０】
（Ｓ２）ＣＰＵ３はリダクション演算を開始するため、入力データを入力データレジスタ７０−０〜７０−ｍに、リダクション演算開始信号を同期装置８に送る。リダクション演算開始信号は、入力レジスタ番号と、最初のステージに対応した制御レジスタ番号と、演算タイプと、データタイプとを含む。
【００７１】
（Ｓ３）同期装置８の制御部８０はリダクション演算開始の信号を受けると、演算タイプ、データタイプをリダクション開始信号で指定された制御レジスタ番号の制御レジスタのタイプレジスタ（OpType）８４Ｃと、データタイプレジスタ（DataType）８４Ｄとに書き込む。
【００７２】
（Ｓ４）制御レジスタへの書き込み後、同期装置８の制御部８０はリダクション演算信号で指定された制御レジスタ８２−０〜８２−Ｎの宛先（Destination）レジスタ８４Ｂの値を読む。
【００７３】
（Ｓ５）制御部８０は、宛先（Destination）レジスタ８４Ｂが自ノードを指定しているか、他のノードを指定しているかを判定する。制御部８０は、宛先レジスタ８４Ｂが他ノードを指定している場合には、送信装置１２に対しデータとパケット送信指示信号を送る。送信装置１２に送るデータは、指定された制御レジスタが最初のステージの時は、入力データレジスタ７０−０の値である。又、指定された制御レジスタが後続のステージの時は、演算器７５からの演算結果である。制御部８０は、入力データレジスタ７０−０の値を送信装置１２に送る時は、演算器７５の演算指示にバイパスを指定する。図７で示したように、制御部８０が送るパケット送信指示信号は、送信先となるノードアドレス、送信先制御レジスタ番号、演算タイプ、データタイプである。送信装置１２はデータと上記送信指示信号の情報を基にパケット（図７参照）を作成し、ネットワーク２へ送信する。
【００７４】
（Ｓ６）制御部８０は、宛先レジスタ８４Ｂが、自身の制御レジスタを指定している場合には、自身の同期装置８に同期信号を送るため、宛先（Destination）レジスタ８４Ｂで指定された制御レジスタのシグナル（Signal）レジスタ８４Ａの値を読む。また、この時、制御部８０は、不整合を検出するため、演算タイプ（OpType）レジスタ８４Ｃとデータタイプ（DataType）レジスタ８４Ｄの値も読む。
【００７５】
（Ｓ７）制御部８０は、シグナルレジスタ８４Ａの値から同期成立か否かを判定する。シグナルレジスタ８４Ａに「１」が設定されている場合、制御部８０は、同期成立と判定する。又、制御部８０は、シグナルレジスタ８４Ａに「１」が設定されていないと、同期は成立していないと判定する。
【００７６】
（Ｓ８）制御部８０は、同期が成立していないと判定した場合には、シグナルレジスタ８４Ａに「１」を書き込み、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄに演算タイプ、データタイプを書き込む。演算タイプ、データタイプの値は、パケットの値又は前の制御レジスタの値である。即ち、直前に後述するステップＳ１６、Ｓ５，Ｓ６を実行している場合には、ステップＳ１６の値、もしくはＳ５で読み出した制御レジスタの演算タイプ、データタイプの値である。逆に、直前にステップＳ１０、Ｓ１１の処理をしている場合には、ステップＳ１０で受け取ったパケットの値である。
【００７７】
（Ｓ９）制御部８０は、データを記憶装置７４の制御レジスタに対応するアドレスに格納する。格納するデータは制御レジスタ８２−０が最初のステージである場合は、入力データレジスタ７０−０の値、後続のステージである場合は、前ステージの演算結果である。
【００７８】
（Ｓ１０）制御部８０は、パケットの受信を待ち合わせる。受信装置１０がネットワーク２からパケットを受信した場合、受信装置１０は受信したパケットを元にデータ、同期信号、宛先、演算タイプ、データタイプを取り出し、マルチプレクサ７２、同期装置８へ送信する。
【００７９】
（Ｓ１１）制御部８０は受信装置１０から信号を受け取けた場合、宛先で指定された制御レジスタのシグナルレジスタ８４ＡのSignal、演算タイプレジスタ８４ＣのOpType、データタイプレジスタ８４ＤのDataTypeを読む。そして、ステップＳ７に戻り、以降、同期成立まで、ステップＳ７〜Ｓ１１の処理を繰り返す。
【００８０】
（Ｓ１２）ステップＳ７の判定で、制御部８０は、同期が成立したと判定した場合、制御部８０は、演算タイプ、データタイプの不整合の検出を行う。不整合の検出は、制御レジスタ８２−０〜８２−ｍの演算タイプレジスタ８４ＣのOpType、データタイプレジスタ８４ＤのDataTypeと、演算タイプ、データタイプとの比較によって行う。演算タイプ、データタイプの値は、直前に後述するステップＳ１６、Ｓ５，Ｓ６を実行している場合には、ステップＳ１６もしくはＳ５で読み出した制御レジスタの演算タイプ、データタイプの値である。逆に、直前にステップＳ１０、Ｓ１１の処理をしている場合には、ステップＳ１０で受け取ったパケットの値である。制御部８０は、比較により、不一致、もしくは比較した値の中で不整合を示す値があれば、不整合が発生していると判定する。制御部８０は、比較により一致していれば、不整合は発生していないと判定する。
【００８１】
（Ｓ１３）不整合が発生していないと判定した場合には、演算を行なう。演算対象となるデータは、（１）制御レジスタが最初のステージの次ステージに対応している場合、入力データレジスタ７０−１の値、（２）制御レジスタがそれ以降のステージであり、同期成立の要因がパケットからの同期信号である場合には、パケットに含まれるデータ、（３）自身の同期装置からの同期信号である場合は、前ステージでの演算結果である。制御部８０の制御により、演算器７５は、これらの（１）〜（３）のいずれかのデータと、記憶装置７４内で同期が成立した制御レジスタに対応するアドレスに格納するデータとの間での演算を行なう。
【００８２】
（Ｓ１４）逆に、制御部８０は、不整合が発生したと判定した場合、制御レジスタ８２−０〜８２−ｍの演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄに不整合を示す値をライトする。
【００８３】
（Ｓ１５）制御部８０は、同期が成立した制御レジスタが最終ステージに対応しているかを判定する。
【００８４】
（Ｓ１６）制御部８０は、同期が成立した制御レジスタが最終ステージに対応していないと判定した場合、ステップＳ７でリードしたシグナルレジスタ８４Ａと同じ制御レジスタの宛先（Destination）レジスタ８４Ｂの値を読み、図８のステップＳ５に戻る。
【００８５】
（Ｓ１７）制御部８０は、同期が成立した制御レジスタが最終ステージに対応していると判定した場合、制御部８０は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値を基に、リダクション演算完了信号をＣＰＵ３に送信する。又、制御部８０は、演算器７５の演算結果を出力データレジスタ７９−０〜７９−ｍに格納する。リダクション演算完了信号は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値を基に作成されるため、不整合の有無の情報を持つ。即ち、制御部８０は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値が不整合を示している場合には、リダクション演算完了信号とともに、不整合をＣＰＵ３に通知する。
【００８６】
（Ｓ１８）ＣＰＵ３はリダクション演算完了の信号を受け取り、リダクション演算完了、もしくは不整合発生を検出する。
【００８７】
このように、制御部８０は、同期成立時に複数の演算データ（制御レジスタ）の演算タイプ及びデータタイプの整合性を判定するため、同期成立時の演算前に不整合を判定でき、演算処理の誤りやハングアップを未然に防止できる。実施の形態では、演算タイプとデータタイプとの両方の整合性を検出しているが、演算タイプとデータタイプのいずれかであっても良い。
【００８８】
図１０は、図５乃至図９のリダクション演算装置のバタフライによるリダクション演算処理における各ステージ間での同期信号の流れを示す。図１０において、図８及び図９で説明したものと同一のものは、同一の記号で示す。又、図１に示したように、４つのノード＃１、＃２、＃３、＃４がバタフライによるリダクション演算を行う例で説明する。
【００８９】
図１０において、各制御レジスタ８２−０〜８２−２は各ステージに対応し、データの同期と演算、送信に用いる。記憶装置７４は各ステージのデータを記憶し、演算器７５は記憶したデータ間で演算を行う。入力・出力データレジスタ７０−０，７９−０はリダクション演算の入力データとリダクション演算結果を保持する。
【００９０】
次にリダクション演算処理手順を以下に記す。各ノード＃１〜＃４のＣＰＵ３は、制御レジスタ８２−０の宛先（Destination）に制御信号とデータの送信先を指定する。図１０ではバタフライ（Butterfly）のアルゴリズムに基づいて送信先を指定する。リダクション演算開始時には、各ノードのＣＰＵ３は、入力データと、演算タイプ及びデータタイプを含むリダクション演算開始の指示とをリダクション演算装置６に送る。
【００９１】
リダクション演算装置６は始点の制御レジスタ(制御レジスタ８２−０)の宛先（Destination）で指定された送信先に、制御信号とデータを送る。制御信号とデータを受け取ったリダクション演算装置６は、送信先で指定された制御レジスタ８２−１のシグナル（Signal）を更新し、データを記憶装置７４に書き込む。
【００９２】
各制御レジスタでデータの同期が成立すると、演算器７５は、演算タイプで指定された演算を行い、演算結果と制御信号を宛先（Destination）で指定された送信先へ送る。同期の判定は、制御レジスタのシグナル（Signal）を用いる。以降は同様の処理を続け、終点の制御レジスタ(制御レジスタ８２−２)で同期が成立すると、演算結果を出力データレジスタ７９−０に書き込み、リダクション演算完了をノードのＣＰＵ３に通知する。
【００９３】
図１０において、ノード＃１に着目すると、以下のように同期信号リダクション及び演算対象のデータが流れる。例えば、ノード＃１は、演算対象のデータである入力データを受信した場合、リダクション演算開始信号の入力によりリダクション演算開始を指示される。これに応じて、ノード＃１は、ステージ＃１において、予め指示された宛先であるノード＃１及びノード＃２に、同期信号及び演算対象のデータを送信する。
【００９４】
ステージ＃２において、自己の同期信号及び演算対象のデータを受信したノード＃１は、予め指示されたノード＃２からの同期信号を待ち合わせ、また、受信した演算対象のデータを記憶装置７４及び演算器７５に保持する。ステージ＃２の同期信号及び演算対象のデータは、ノード＃２が入力データを受信した後に、同様にして、ノード＃２からノード＃１に到達する。
【００９５】
ノード＃２からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃２からの同期信号との待ち合わせつまり２つの信号の同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃２において、自己の演算対象のデータとノード＃２からの演算対象のデータとの間の演算を実行し、予め指示された宛先であるノード＃１及びノード＃３に、同期信号及び演算結果を送信する。この演算結果は、ノード＃１及びノード＃３において、演算対象のデータとして用いられる。
【００９６】
ステージ＃３において、自己の同期信号及び演算対象のデータを受信したノード＃１は、予め指示されたノード＃３からの同期信号を待ち合わせ、また、受信した演算対象のデータを記憶装置７４及び演算器７５に保持する。ステージ＃３の同期信号及び演算対象のデータは、ノード＃３が入力データを受信し、かつ、入力データを受信したノード＃４からの同期信号を受信した後に、同様にして、ノード＃３からノード＃１に到達する。
【００９７】
ノード＃３からの同期信号が到達した場合、ノード＃１において、自己の同期信号と、ノード＃３からの同期信号との同期が成立する。この同期が成立すると、ノード＃１は、ステージ＃３において、自己の演算対象のデータとノード＃３からの演算対象のデータとの間の演算を実行し、予め指示された出力データレジスタ７９−０に、演算結果を出力する。
【００９８】
この後、ノード＃１のリダクション演算装置６は、リダクション演算完了信号をＣＰＵ３に出力すると共に、出力データレジスタ７９−０の保持されたデータをリダクション演算結果としてＣＰＵ３に出力する。
【００９９】
尚、ノード＃２〜４においても、同様にして、ステージ＃３において、同期が成立し、リダクション演算完了信号とリダクション演算結果を出力する。これにより、バタフライによるリダクション演算が実行される。
【０１００】
図１１は、図１０のバタフライによるリダクション演算処理における不整合検出処理の説明図である。図１１において、図１０で示したものと同一のものは同一の記号で示してある。又、図１１においても、図１に示したように、４つのノード＃１、＃２、＃３、＃４がバタフライによるリダクション演算を行う例で説明する。
【０１０１】
各ノードのＣＰＵ３は演算タイプとデータタイプを指定したリダクション演算開始の指示と、入力データをリダクション演算装置６に送る。図１１の例では、ノード＃１〜＃３が、演算タイプとして、総和を求める計算（ＳＵＭ）を指定しており、ノード＃４では、最大値を求める計算(ＭＡＸ)を指定しているため、不整合が起きている。
【０１０２】
入力データと演算開始指示を受け取ったリダクション演算装置６は、入力データと制御信号を宛先（Destination）で指定された送信先に送る。制御信号にはノードから指定された演算タイプとデータタイプの情報が含まれている。リダクション演算装置６は、制御信号、データを受け取ると制御レジスタ８２−０のシグナル（Signal）レジスタを更新し、データを記憶装置に書き込む。
【０１０３】
リダクション演算装置６の制御部８０は、データの同期が成立すると、まず演算タイプのチェックを行う。ここで、制御部８０が、両者の演算タイプが等しくない、もしくは不整合を示す制御信号を受け取っていると判断した場合には、演算を行わず、不整合を示す制御信号を送る。終点の制御レジスタ８２−２の場合には、演算タイプの不整合をノードのＣＰＵ３に通知する。
【０１０４】
図１１では、ノード＃３とノード＃４の制御レジスタ８２−１で演算タイプが最大値検出（ＭＡＸ）と総和計算（ＳＵＭ）との不整合が起きており、ノード＃３、＃４の制御部８０が、不整合を示す信号を送信している。
【０１０５】
不整合を示す制御信号は全ノードの制御レジスタ８２−２に送られ、演算タイプの不整合が通知される。終点の制御レジスタ８２−２は、全ノードの始点の制御レジスタ８２−０に対して、ツリー状にネットワークが組まれているため、必ずどこかの制御レジスタで不整合が検出できる。
【０１０６】
データタイプも同様に制御レジスタでデータタイプのチェックを行い、両者が等しくない、もしくは不整合を示す制御信号を受け取っていれば、不整合を示す信号を送る。
【０１０７】
このように、ノード間で演算タイプ、データタイプの不整合を、リダクション演算装置が同期成立時に検出するため、不整合のある演算を未然に防止でき、処理が完了せずにハングアップとなることを防止でき、もしくは誤った計算結果を演算することを防止できる。
【０１０８】
又、リダクション演算装置で検出するため、ノード間でリダクション演算データとは別に演算タイプ、データタイプの通信を行い、不整合を検出する手間を省くことができる。このため、リダクション演算の処理時間の長期化を防止できる。
【０１０９】
（第２の実施の形態のリダクション演算装置の構成）
図１２は第２の実施の形態のリダクション演算処理の説明図である。図１２において、図５乃至図１１で説明したものと同一のものは、同一の記号で示してある。図１２は、３つのノード＃１、＃２、＃３が、図１０で説明したリダクション演算を実行する例を示す。
【０１１０】
バタフライ（Butterfly）アルゴリズムにおいては、ノード数が２のべき乗でない場合には、２のべき乗に切り上げた時の追加ノードが持つ制御レジスタをいずれかのノードに持たせる。図１２では、図１０のノード＃４の制御レジスタ８２−３をノード＃３が持つ。この制御レジスタ８２−３は、ノード＃４から制御信号を入力されないため、制御レジスタ８２−３のシグナルレジスタ８４Ａの値を既に制御信号を1つ受け取ったときの値に設定する。これによって、ノード＃３からの同期信号が制御レジスタ８２−３に入力された時点で、同期成立となる。またこの制御レジスタ８２−３は演算をしてはいけないため、後述するマスクレジスタを有効にする。
【０１１１】
これにより、３つのノード＃１、＃２、＃３を用いても、図１０と同様のリダクション演算処理を実行できる。
【０１１２】
図１３は図１２の第２の実施の形態のリダクション演算装置のブロック図である。図１３において、図６で説明したものと同一のものは同一の記号で示してある。図１３に示すように、リダクション演算装置６は、受信装置１０と同期装置８とリダクション演算部７と送信装置１２とを有する。
【０１１３】
リダクション演算部７は、複数の入力レジスタ７０−０〜７０−ｍとマルチプレクサ７２とスイッチ７３と記憶装置７４と演算器７５とデマルチプレクサ７６と複数の出力レジスタ７９−０〜７９−ｍとを有する。
【０１１４】
同期装置８の複数の制御レジスタ８２−０〜８２−Ｎの各々は、同期信号の各組に対応する。複数の制御レジスタ８２−０〜８２−Ｎの各々は、シグナルレジスタ８４Ａと宛先レジスタ８４Ｂと演算タイプレジスタ８４Ｃとデータタイプレジスタ８４Ｄとマスクレジスタ８４Ｅとを含む。なお、図１３において、シグナルレジスタ８４Ａは符号Signalを付して表し、宛先レジスタ８４Ｂは符号Destination を付して表し、演算タイプレジスタ８４Ｃは符号ＯｐＴｙｐｅを付して表し、データタイプレジスタ８４Ｄは符号ＤａｔａＴｙｐｅを付して表し、マスクレジスタ８４Ｅは符号Ｍａｓｋを付して表す。
【０１１５】
シグナルレジスタ８４Ａは、制御レジスタ８２−０〜８２−Ｎに対応するプロセス又はノードから同期信号を受信したか否かを示す情報を格納する。宛先レジスタ８４Ｂは、制御レジスタ８２−０〜８２−Ｎが同期信号を送信すべき宛先であるプロセス又はノードを示す情報を格納する。即ち、宛先レジスタ８４Ｂは、同期成立の後に同期信号の送信先を示す情報を格納する。
【０１１６】
宛先レジスタ８４Ｂは、同期信号の送信先が他のノードである場合、送信先となる宛先ノードアドレスおよび制御レジスタ番号を格納する。タイプレジスタ８４Ｃは、リダクション演算の演算タイプを格納する。演算タイプは、例えば、総和（ＳＵＭ），最大値演算（ＭＡＸ），最小値演算（ＭＩＮ）である。データタイプレジスタ８４Ｄは、リダクション演算のデータのタイプを格納する。データタイプは、例えば、整数（Ｉｎｔ）データか浮動小数点データか、倍精度か単精度か、バイト数等である。
【０１１７】
第２の実施の形態では、制御レジスタ８２−０〜８２−Ｎにマスクレジスタ８４Ｅを追加する。制御部８０は、マスクレジスタ８４Ｅが有効の時、同期が成立しても、不整合の検出、演算を行わない。即ち、図１２で説明したノード＃３の制御レジスタ８２−４のような、ノード数を２のべき乗に切り上げた時に追加される制御レジスタに対して、マスクレジスタ８４Ｅを有効にする。
【０１１８】
受信装置１０は、ネットワーク２を介して他ノードと接続され、同期信号を含む他ノードからのパケットを受信する。受信装置１０は、ネットワーク２を介して他のノードのリダクション演算装置６から図７で説明したパケットを受信した場合、受信装置１０は、受信したパケットに含まれる同期信号、演算タイプ、データタイプ、データ及び宛先の情報からを取り出し、同期信号、演算タイプ、データタイプ、及び宛先を同期装置８の制御部８０に送信する。
【０１１９】
宛先は、同期信号の宛先となる宛先ノードアドレス及び制御レジスタの制御レジスタ番号である。この宛先により、取出された宛先ノードアドレスに対応するノード及び取出された制御レジスタ番号に対応する制御レジスタ８２−０〜８２−Ｎを定めることができる。又、受信装置１０は、パケットのデータをマルチプレクサ７２に出力する。
【０１２０】
リダクション演算の第１の対象データは、ＣＰＵ３から、ライトデータとして入力データレジスタ７０−０〜７０−ｍに入力される。制御部８０のリードアドレスに対応する入力データレジスタ７０−０〜７０−ｍからリードデータ（ライトデータ）が読みだされ、マルチプレクサ７２に入力される。リダクション演算の第２の対象データは、ネットワーク２から受信装置１０を介してパケットから取出されて、マルチプレクサ７２に入力される。
【０１２１】
一方、リダクション演算の結果は、デマルチプレクサ８４６から、ライトデータとして出力データレジスタ７９−０〜７９−ｍに出力され、リードデータとして出力データレジスタ７９−０〜７９−ｍからＣＰＵ３に出力される。また、リダクション演算の結果は、デマルチプレクサ８４６から送信装置１２に出力され、送信装置１２からネットワーク２へパケットとして送信される。
【０１２２】
入力データレジスタ７０−０〜７０−ｍ及び出力データレジスタ７９−０〜７９−ｍは、複数設けられる。入力データレジスタ７０−０〜７０−ｍは、各々、制御レジスタ８２−０〜８２−Ｎと対応する。出力データレジスタ７９−０〜７９−ｍも同様である。
【０１２３】
ライトデータを書き込むべき入力データレジスタ７０−０〜７０−ｍは、ＣＰＵ３からライトアドレスにより指定される。リードデータを読み出すべき入力データレジスタ７０−０〜７０−ｍは、制御部８０からのリードアドレスにより指定される。入力データレジスタ７０−０〜７０−ｍのリードアドレスは、例えば受信装置１０が受信したパケットにおける宛先が指示する制御レジスタ８２−０〜８２−Ｎに対応し、当該制御８２−０〜８２−Ｎの制御レジスタ番号に基づいて生成される。
【０１２４】
ライトデータを書き込むべき出力データレジスタ７９−０〜７９−ｍは、制御部８０からのライトアドレスにより指定される。出力データレジスタ７９−０〜７９−ｍのライトアドレスは、当該ライトデータのリダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応し、当該制御レジスタ８２−０〜８２―Ｎの制御レジスタ番号に基づいて生成される。リードデータを読み出すべき出力データレジスタ８２−０〜８２−Ｎは、ＣＰＵ３からのリードアドレスにより指定される。
【０１２５】
マルチプレクサ７２は、制御部８０からの入力部選択の指示に従って、入力データレジスタ７０−０〜７０ｍからのデータ、又は、受信装置１０からのデータを選択する。選択されたデータは、スイッチ７３を介して、記憶装置７４又は演算器７５に入力する。制御部８０は、受信装置１０から同期信号及び宛先が入力された場合には、受信装置１０のデータをマルチプレクサ８４２が選択し、これ以外の場合には、入力データレジスタ７０−０〜７０−ｍのリードデータをマルチプレクサ８４２が選択するように入力部選択指示を行う。
【０１２６】
スイッチ７３は、制御部８０からの入出力部選択の指示に従って、マルチプレクサ７２又は演算器７５からの入力を、記憶装置７４又は演算器７５に入力する。制御部８０は、マルチプレクサ７２からデータが入力された場合には、マルチプレクサ８４２のデータを選択し、これ以外の場合には、演算器７５のデータを選択するようにスイッチ７３を制御する。また、制御部８０は、同期が成立した場合には、入力されたデータを演算器８４５に出力し、これ以外の場合には、入力されたデータを記憶装置８４４に出力するように、スイッチ７３を制御する。
【０１２７】
記憶装置７４は、マルチプレクサ７２、スイッチ７３を介して入力されたデータを記憶する。即ち、記憶装置７４は、リダクション演算中のデータを保持する。記憶装置７４は、制御部８０からライトアドレスで指定されたアドレスにリダクション演算中のデータを保持する。記憶装置７４のライトアドレスは、当該リダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応する。制御部８０は、当該制御レジスタ８２−０〜８２−Ｎの制御レジスタ番号に基づいて、ライトアドレスを生成する。
【０１２８】
又、制御部８０は、リードアドレスにより、記憶装置７４に格納されたリダクション演算中のデータを、演算器７５に読み出す。記憶装置７４のリードアドレスは、当該リダクション演算に用いられる制御レジスタ８２−０〜８２−Ｎに対応する。制御部８０は、当該制御レジスタ８２−０〜８２−Ｎの制御レジスタ番号に基づいて、リードアドレスを生成する。
【０１２９】
演算器７５は、同期が成立した場合、記憶装置７４で待ち合わせているデータと、マルチプレクサ７２を介して入力するパケットからのデータ又は先の演算結果との間で、制御部８０から指示された演算を行なう。即ち、演算器７５は、制御部８０からの演算指示に従って、所定の演算を実行して、その結果を、デマルチプレクサ７６に出力すると共に、スイッチ７３に出力する。
【０１３０】
演算器７５は、記憶装置７４から入力するデータ（第１データ）と、入力データレジスタ７０−０〜７０−ｍから入力するデータと、受信装置１０が受信したパケットのデータ又は演算器７５が前ステージで行なった演算結果（第２データ）との間で、指示された種類の演算を行なう。制御部８０は、演算の種類を示すタイプレジスタ８４Ｃの値に基づいて、演算指示を生成する。
【０１３１】
デマルチプレクサ７６は、制御部８０からの出力部選択指示に従って、演算器７５からの入力を、出力データレジスタ７９−０〜７９−ｍ又は送信装置１２に出力する。制御部８０は、リダクション演算が完了する以前には、演算器７５からのデータを送信装置１２に出力し、これ以外の場合（リダクション演算が完了した場合）には、出力データレジスタ７９−０〜７９−ｍに出力するようにデマルチプレクサ７６を制御する。
【０１３２】
又、制御部８０は、同期成立の後に、第２の同期信号の送信を送信装置１２に指示（図示「パケット送信指示」）すると共に、予め定められたリダクション演算をリダクション演算部８４に指示する。また、送信装置１２は、第２の同期信号送信の指示を受信した場合、第２の同期信号と共に、演算器７５におけるリダクション演算の結果をネットワーク２に送信する。
【０１３３】
（第２の実施の形態のリダクション演算処理）  
図１４及び図１５は第２の実施の形態のリダクション演算処理フロー図である。
【０１３４】
（Ｓ２１）リダクション演算を実行する前に、ＣＰＵ３は、リダクション演算装置の同期装置９内の各制御レジスタ８２−０〜８２−Ｎの宛先（Destination）レジスタ８４Ｂに送信先を書き込む。即ち、ＣＰＵ３は、宛先レジスタ８４Ｂに、バタフライ（Butterfly）などのリダクション演算のアルゴリズムにより決定された次ステージに対応したノードアドレスと制御レジスタ番号を設定する。このノードアドレスとして、他ノードのみの、自ノードのみの場合がある事を書きこむ。又、ＣＰＵ３は、リダクション演算装置の同期装置９内の各制御レジスタ８２−０〜８２−Ｎのシグナルレジスタ８４Ａ，マスクレジスタ８４Ｅに設定値を書き込む。
【０１３５】
（Ｓ２２）ＣＰＵ３はリダクション演算を開始するため、入力データを入力データレジスタ７０−０〜７０−ｍに、リダクション演算開始信号を同期装置８に送る。リダクション演算開始信号は、入力レジスタ番号と、最初のステージに対応した制御レジスタ番号と、演算タイプと、データタイプとを含む。
【０１３６】
（Ｓ２３）同期装置８の制御部８０はリダクション演算開始の信号を受けると、演算タイプ、データタイプをリダクション開始信号で指定された制御レジスタ番号の制御レジスタのタイプレジスタ（OpType）８４Ｃと、データタイプレジスタ（DataType）８４Ｄとに書き込む。
【０１３７】
（Ｓ２４）制御レジスタへの書き込み後、同期装置８の制御部８０はリダクション演算信号で指定された制御レジスタ８２−０〜８２−Ｎの宛先（Destination）レジスタ８４Ｂの値を読む。
【０１３８】
（Ｓ２５）制御部８０は、宛先（Destination）レジスタ８４Ｂが自ノードを指定しているか、他のノードを指定しているかを判定する。制御部８０は、宛先レジスタ８４Ｂが他ノードを指定している場合には、送信装置１２に対しデータとパケット送信指示信号を送る。送信装置１２に送るデータは、指定された制御レジスタが最初のステージの時は、入力データレジスタ７０−０の値である。又、指定された制御レジスタが後続のステージの時は、演算器７５からの演算結果である。制御部８０は、入力データレジスタ７０−０の値を送信装置１２に送る時は、演算器７５の演算指示にバイパスを指定する。図７で示したように、制御部８０が送るパケット送信指示信号は、送信先となるノードアドレス、送信先制御レジスタ番号、演算タイプ、データタイプである。送信装置１２はデータと上記送信指示信号の情報を基にパケット（図７参照）を作成し、ネットワーク２へ送信する。
【０１３９】
（Ｓ２６）制御部８０は、宛先レジスタ８４Ｂが、自身の制御レジスタを指定している場合には、自身の同期装置８に同期信号を送るため、宛先（Destination）レジスタ８４Ｂで指定された制御レジスタのシグナル（Signal）レジスタ８４Ａの値を読む。また、この時、制御部８０は、不整合を検出するため、演算タイプ（OpType）レジスタ８４Ｃとデータタイプ（DataType）レジスタ８４Ｄの値も読む。
【０１４０】
（Ｓ２７）制御部８０は、シグナルレジスタ８４Ａの値から同期成立か否かを判定する。シグナルレジスタ８４Ａに「１」が設定されている場合、制御部８０は、同期成立と判定する。又、制御部８０は、シグナルレジスタ８４Ａに「１」が設定されていないと、同期は成立していないと判定する。
【０１４１】
（Ｓ２８）制御部８０は、同期が成立していないと判定した場合には、シグナルレジスタ８４Ａに「１」を書き込み、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄに演算タイプ、データタイプを書き込む。演算タイプ、データタイプの値は、パケットの値又は前の制御レジスタの値である。即ち、直前に後述するステップＳ３７、Ｓ２５，Ｓ２６を実行している場合には、ステップＳ３７の値、もしくはＳ２５で読み出した制御レジスタの演算タイプ、データタイプの値である。逆に、直前にステップＳ３０、Ｓ３１の処理をしている場合には、ステップＳ３０で受け取ったパケットの値である。
【０１４２】
（Ｓ２９）制御部８０は、データを記憶装置７４の制御レジスタに対応するアドレスに格納する。格納するデータは制御レジスタ８２−０が最初のステージである場合は、入力データレジスタ７０−０の値、後続のステージである場合は、前ステージの演算結果である。
【０１４３】
（Ｓ３０）制御部８０は、パケットの受信を待ち合わせる。受信装置１０がネットワーク２からパケットを受信した場合、受信装置１０は受信したパケットを元にデータ、同期信号、宛先、演算タイプ、データタイプを取り出し、マルチプレクサ７２、同期装置８へ送信する。
【０１４４】
（Ｓ３１）制御部８０は受信装置１０から信号を受け取った場合、宛先で指定された制御レジスタのシグナルレジスタ８４ＡのSignal、演算タイプレジスタ８４ＣのOpType、データタイプレジスタ８４ＤのDataTypeを読む。そして、ステップＳ２７に戻り、以降、同期成立まで、ステップＳ２７〜Ｓ３１の処理を繰り返す。
【０１４５】
（Ｓ３２）ステップＳ２７の判定で、制御部８０は、同期が成立したと判定した場合、制御部８０は、制御レジスタ８２−０〜８２−ｍのマスクレジスタ８４Ｅの値を判定する。前述のように、マスクレジスタ８４Ｅが有効(値｛１｝)の時、同期が成立しても、不整合の検出、演算を行わないために設けられている。即ち、図１２で説明したノード＃３の制御レジスタ８２−４のような、ノード数を２のべき乗に切り上げた時に追加される制御レジスタに対して、ステップＳ２１でマスクレジスタ８４Ｅを有効に設定する。制御部８０は、マスクレジスタ８４Ｅの値が「１」（有効）であると判断した制御レジスタに対し、ステップＳ３６に進む。
【０１４６】
（Ｓ３３）一方、制御部８０は、マスクレジスタ８４Ｅの値が「１」（有効）であると判断した制御レジスタに対し、演算タイプ、データタイプの不整合の検出を行う。不整合の検出は、制御レジスタ８２−０〜８２−ｍの演算タイプレジスタ８４ＣのOpType、データタイプレジスタ８４ＤのDataTypeと、演算タイプ、データタイプとの比較によって行う。演算タイプ、データタイプの値は、直前に後述するステップＳ３７、Ｓ２５，Ｓ２６を実行している場合には、ステップＳ３７もしくはＳ２５で読み出した制御レジスタの演算タイプ、データタイプの値である。逆に、直前にステップＳ３０、Ｓ３１の処理をしている場合には、ステップＳ３０で受け取ったパケットの値である。制御部８０は、比較により、不一致、もしくは比較した値の中で不整合を示す値があれば、不整合が発生していると判定する。制御部８０は、比較により一致していれば、不整合は発生していないと判定する。
【０１４７】
（Ｓ３４）不整合が発生していないと判定した場合には、演算を行なう。演算対象となるデータは、（１）制御レジスタが最初のステージの次ステージに対応している場合、入力データレジスタ７０−１の値、（２）制御レジスタがそれ以降のステージであり、同期成立の要因がパケットからの同期信号である場合には、パケットに含まれるデータ、（３）自身の同期装置からの同期信号である場合は、前ステージでの演算結果である。制御部８０の制御により、演算器７５は、これらの（１）〜（３）のいずれかのデータと、記憶装置７４内で同期が成立した制御レジスタに対応するアドレスに格納するデータとの間での演算を行なう。
【０１４８】
（Ｓ３５）逆に、制御部８０は、不整合が発生したと判定した場合、制御レジスタ８２−０〜８２−ｍの演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄに不整合を示す値をライトする。
【０１４９】
（Ｓ３６）制御部８０は、同期が成立した制御レジスタが最終ステージに対応しているかを判定する。
【０１５０】
（Ｓ３７）制御部８０は、同期が成立した制御レジスタが最終ステージに対応していないと判定した場合、ステップＳ２７でリードしたシグナルレジスタ８４Ａと同じ制御レジスタの宛先（Destination）レジスタ８４Ｂの値を読み、図１４のステップＳ２５に戻る。
【０１５１】
（Ｓ３８）制御部８０は、同期が成立した制御レジスタが最終ステージに対応していると判定した場合、制御部８０は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値を基に、リダクション演算完了信号をＣＰＵ３に送信する。又、制御部８０は、演算器７５の演算結果を出力データレジスタ７９−０〜７９−ｍに格納する。リダクション演算完了信号は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値を基に作成されるため、不整合の有無の情報を持つ。即ち、制御部８０は、演算タイプレジスタ８４Ｃ、データタイプレジスタ８４Ｄの値が不整合を示している場合には、リダクション演算完了信号とともに、不整合をＣＰＵ３に通知する。
【０１５２】
（Ｓ３９）ＣＰＵ３はリダクション演算完了の信号を受け取り、リダクション演算完了、もしくは不整合発生を検出する。
【０１５３】
このように、制御部８０は、同期成立時に複数の演算データ（制御レジスタ）の演算タイプ及びデータタイプの整合性を判定するため、同期成立時の演算前に不整合を判定でき、演算処理の誤りやハングアップを未然に防止できる。実施の形態では、演算タイプとデータタイプとの両方の整合性を検出しているが、演算タイプとデータタイプのいずれかであっても良い。
【０１５４】
又、１の処理でノード数が２のべき乗でない時は、ノード数を２のべき乗に切り上げた時の追加ノードが持つ制御レジスタを他のノードに持たせる。この制御レジスタ８２−３のマスクレジスタ８４Ｅは「１」に、シグナル（Signal）レジスタ８４Ａは「１」に設定する。シグナルレジスタ８４Ａを「１」に設定する理由は、この制御レジスタ８２−３が１つの同期信号しか受け取らないように制御するためである。シグナルレジスタ８４Ａの値が「１」になった後、マスクレジスタ８４Ｅの値の判定を行う。マスクレジスタ８４Ｅの値が「１」であれば、不整合の検出、演算処理を行なわない。このため、１の処理でノード数が２のべき乗でない時は、ノード数を２のべき乗に切り上げた時の追加ノードが持つ制御レジスタを他のノードに持たせても、不整合の検出が可能となる。
【０１５５】
（第３の実施の形態のリダクション演算処理）
図１６は第３の実施の形態のリダクション演算処理の説明図である。図１６は図５乃至図６におけるパケットフォーマットの変形例を示す。図１６に示すように、パケットフォーマットは、送信先となるノードアドレス、送信先制御レジスタ番号、演算タイプ、データタイプを有する。更に、第３の実施の形態では、パケットフォーマットにフィールドを追加し、追加フィールドに不整合が発生したノードアドレス、不整合発生制御レジスタ番号を通知する欄を設けた。
【０１５６】
第３の実施の形態において、ノードの構成は、図２で説明した構成と同じである。又、リダクション演算装置の構成は、図６で説明した構成と同一である。
【０１５７】
制御部８０は、図９の処理フローのステップＳ１２において、演算タイプとデータタイプの値の不整合を検出した場合に、図１６のパケットの追加フィールドの不整合発生ノードアドレスと、不整合発生制御レジスタ番号に、自ノードのアドレスとリードした制御レジスタ番号の値を設定する。
【０１５８】
また、第１の実施の形態の図９の処理フローのステップＳ１７において、不整合が発生している場合には、制御部８０が、図１６のパケットの追加フィールドの値を出力レジスタに書きこみ、ＣＰＵ３に、不整合が発生したノードアドレスと、制御レジスタ番号の通知を行う。その他の処理フローは第１の実施の形態の図８及び図９と同一である。
【０１５９】
このように、リダクション演算装置が不整合の通知の際、不整合が発生したノード、制御レジスタ番号を共に通知するため、デバッグが容易となる。
【０１６０】
（他の実施の形態）
前述の実施の形態では、並列処理のバリア同期として、バタフライアルゴリズムを例に説明したが、ペアワイズエクスチェンウィズリカーシブダブリング（Ｐａｉｒ  Ｗｉｓｅ  ｅｘｃｈａｎｇｅ  ｗｉｔｈ  Ｒｅｃｕｒｓｉｖｅ  Ｄｏｕｂｌｉｎｇ）によるアルゴリズム等、他のアルゴリズムを適用できる。
【０１６１】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【０１６２】
以上の実施の形態１〜３を含む実施形態に関し、更に以下の付記を開示する。
【０１６３】
（付記１）
複数の組の同期信号とデータが入力され、前記各組の同期信号及びデータの送信先をリダクション演算のアルゴリズムにおける次ステージに対応して設定し、リダクション演算を行うリダクション演算装置において、前記各組に対し複数個の同期信号の入力を待ち合わせ、同期成立後に、演算指示と、ｍ（ｍ＞１で整数）個の送信先に演算結果と同期信号の送信先とを出力する同期装置と、前記同期が成立した組のｎ個のデータ間で演算を行う演算器と、データと演算結果を保持する記憶装置と、前記同期装置で指定された送信先に前記データ及び同期信号を送信する送信装置と、受信した同期信号と宛先を前記同期装置に、受信したデータを記憶装置に送る受信装置とを有し、前記同期装置は、前記同期信号と、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記ｎ個の演算タイプ又はデータタイプ間で比較を行い、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を前記ｍ個の送信先に送り、前記比較結果が良好な場合に前記指定された演算を実行することを特徴としたリダクション演算装置。
【０１６４】
（付記２）
付記１のリダクション演算装置において、同期装置の各組ごとにマスクレジスタを設け、前記同期装置は、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴としたリダクション演算装置。
【０１６５】
（付記３）
付記１のリダクション演算装置において、前記同期装置は、前記送信装置を介し、前記不整合を示す信号と前記不整合が発生した同期装置の番号を送ることを特徴としたリダクション演算装置。
【０１６６】
（付記４）
付記１のリダクション演算装置において、前記同期装置は、複数の組の同期信号と前記送信先と前記演算タイプと前記データタイプとのいずれか一方とを格納する複数の制御レジスタと、前記受信した同期信号に基づき、前記同期成立を判定し、前記同期成立後、前記受信した演算タイプと前記データタイプとのいずれか一方と前記制御制御レジスタに格納された前記演算タイプと前記データタイプとのいずれか一方と比較し、不整合を検出する制御部とを有することを特徴とするリダクション演算装置。
【０１６７】
（付記５）
付記２のリダクション演算装置において、前記同期装置は、前記同期成立後に、前記マスクレジスタを参照し、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴としたリダクション演算装置。
【０１６８】
（付記６）
付記１のリダクション演算装置において、前記同期装置は、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を少なくとも前記入力データを入力した送信先に送信することを特徴とするリダクション演算装置。
【０１６９】
（付記７）
処理ユニットと、前記処理ユニット及びネットワークを介し複数の組の同期信号とデータが入力され、前記各組の同期信号及びデータの送信先をリダクション演算のアルゴリズムにおける次ステージに対応して設定し、リダクション演算を行うリダクション演算装置とを有し、前記リダクション演算装置は、前記各組に対し複数個の同期信号の入力を待ち合わせ、同期成立後に、演算指示と、ｍ（ｍ＞１で整数）個の送信先に演算結果と同期信号の送信先とを出力する同期装置と、前記同期が成立した組のｎ個のデータ間で演算を行う演算器と、データと演算結果を保持する記憶装置と、前記同期装置で指定された送信先に前記データ及び同期信号を送信する送信装置と、受信した同期信号と宛先を前記同期装置に、受信したデータを記憶装置に送る受信装置とを有し、前記同期装置は、前記同期信号と、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記ｎ個の演算タイプ又はデータタイプ間で比較を行い、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を前記ｍ個の送信先に送り、前記比較結果が良好な場合に前記指定された演算を実行することを特徴とした処理装置。
【０１７０】
（付記８）
付記７の処理装置において、前記リダクション演算装置は、前記同期装置の各組ごとにマスクレジスタを有し、前記同期装置は、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴とした処理装置。
【０１７１】
（付記９）
付記７の処理装置において、前記同期装置は、前記送信装置を介し、前記不整合を示す信号と前記不整合が発生した同期装置の番号を送ることを特徴とした処理装置。
【０１７２】
（付記１０）
付記７の処理装置において、前記同期装置は、複数の組の同期信号と前記送信先と前記演算タイプと前記データタイプとのいずれか一方とを格納する複数の制御レジスタと、前記受信した同期信号に基づき、前記同期成立を判定し、前記同期成立後、前記受信した演算タイプと前記データタイプとのいずれか一方と前記制御制御レジスタに格納された前記演算タイプと前記データタイプとのいずれか一方と比較し、不整合を検出する制御部とを有することを特徴とする処理装置。
【０１７３】
（付記１１）
付記８の処理装置において、前記同期装置は、前記同期成立後に、前記マスクレジスタを参照し、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴とした処理装置。
【０１７４】
（付記１２）
付記７の処理装置において、前記同期装置は、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を少なくとも前記入力データを入力した送信先に送信することを特徴とする処理装置。
【０１７５】
（付記１３）
ネットワークを介し接続された複数の処理装置を有するコンピュータシステムにおいて、前記処理装置の各々は、処理ユニットと、前記処理ユニット及びネットワークを介し複数の組の同期信号とデータが入力され、前記各組の同期信号及びデータの送信先をリダクション演算のアルゴリズムにおける次ステージに対応して設定し、リダクション演算を行うリダクション演算装置とを有し、前記リダクション演算装置は、前記各組に対し複数個の同期信号の入力を待ち合わせ、同期成立後に、演算指示と、ｍ（ｍ＞１で整数）個の送信先に演算結果と同期信号の送信先とを出力する同期装置と、前記同期が成立した組のｎ個のデータ間で演算を行う演算器と、データと演算結果を保持する記憶装置と、前記同期装置で指定された送信先に前記データ及び同期信号を送信する送信装置と、受信した同期信号と宛先を前記同期装置に、受信したデータを記憶装置に送る受信装置とを有し、前記同期装置は、前記同期信号と、少なくとも演算タイプ及びデータタイプのいずれかを受信し、前記同期成立後、前記ｎ個の演算タイプ又はデータタイプ間で比較を行い、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を前記ｍ個の送信先に送り、前記比較結果が良好な場合に前記指定された演算を実行することを特徴としたコンピュータシステム。
【０１７６】
（付記１４）
付記１３のコンピュータシステムにおいて、前記リダクション演算装置は、前記同期装置の各組ごとにマスクレジスタを有し、前記同期装置は、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴としたコンピュータシステム。
【０１７７】
（付記１５）
付記１３のコンピュータシステムにおいて、前記同期装置は、前記送信装置を介し、前記不整合を示す信号と前記不整合が発生した同期装置の番号を送ることを特徴としたコンピュータシステム。
【０１７８】
（付記１６）
付記１３のコンピュータシステムにおいて、前記同期装置は、複数の組の同期信号と前記送信先と前記演算タイプと前記データタイプとのいずれか一方とを格納する複数の制御レジスタと、前記受信した同期信号に基づき、前記同期成立を判定し、前記同期成立後、前記受信した演算タイプと前記データタイプとのいずれか一方と前記制御制御レジスタに格納された前記演算タイプと前記データタイプとのいずれか一方と比較し、不整合を検出する制御部とを有することを特徴とするコンピュータシステム。
【０１７９】
（付記１７）
付記１４のコンピュータシステムにおいて、前記同期装置は、前記同期成立後に、前記マスクレジスタを参照し、前記マスクレジスタが有効な値を示す場合は、前記演算タイプ又はデータタイプの比較と、前記演算との実行を禁止することを特徴としたコンピュータシステム。
【０１８０】
（付記１８）
付記１３のコンピュータシステムにおいて、前記同期装置は、前記比較結果が良好でない場合に、前記演算結果の代わりに不整合を示す信号を少なくとも前記入力データを入力した送信先に送信することを特徴とするコンピュータシステム。
【産業上の利用可能性】
【０１８１】
各組の同期信号及びデータの送信先をリダクション演算のアルゴリズムにおける次ステージに対応して設定し、リダクション演算を行うリダクション演算装置において、組内の演算タイプ又はデータタイプの不整合を検出し、演算制御するため、処理が完了せず、ハングアップ、もしくは誤った計算結果を返すことを防止でき、且つリダクション演算完了の処理時間の長期化も防止できる。
【符号の説明】
【０１８２】
１  ノード（処理装置）
２  ネットワーク
３  処理ユニット（ＣＰＵ）
４Ａ  メモリ
４Ｂ  入出力装置
５  システム制御装置
６  リダクション演算装置
７  リダクション演算部
８  同期装置
１０  受信装置
１２  送信装置
７０−０〜７０−ｍ  入力データレジスタ
７２  マルチプレクサ
７３  スイッチ
７４  記憶装置
７５  演算器
７６  デマルチプレクサ
７９−０〜７９−ｍ  出力データレジスタ
８０  制御部
８２−０〜８２−Ｎ  制御レジスタ
８４Ｃ  演算タイプレジスタ
８４Ｄ  データタイプレジスタ
【図１】
0005664039.tif 000002
【図２】
0005664039.tif 000003
【図３】
0005664039.tif 000004
【図４】
0005664039.tif 000005
【図５】
0005664039.tif 000006
【図６】
0005664039.tif 000007
【図７】
0005664039.tif 000008
【図８】
0005664039.tif 000009
【図９】
0005664039.tif 000010
【図１０】
0005664039.tif 000011
【図１１】
0005664039.tif 000012
【図１２】
0005664039.tif 000013
【図１３】
0005664039.tif 000014
【図１４】
0005664039.tif 000015
【図１５】
0005664039.tif 000016
【図１６】
0005664039.tif 000017