(57)【特許請求の範囲】
【請求項１】
各々がデータを有する複数の葉ノードと、自ノードに接続された前記葉ノードのデータを用いて所定の演算を行なう１以上の中継ノードと、自ノードに接続された前記葉ノードのデータと前記中継ノードによる前記所定の演算の演算結果とを用いて前記所定の演算を行なうルートノードと、をそなえる情報処理システムの制御プログラムであって、
前記中継ノードのプロセッサに、前記中継ノードのルートノード側に接続された上流ノードへ前記演算結果を送信するための所定の指示を、前記中継ノードにおける前記所定の演算の実行前にキューに設定する処理を実行させ、
前記中継ノードに接続された前記葉ノードに、前記葉ノードが有するデータを含む前記中継ノードへの指示を生成させ、生成した前記指示を前記中継ノードへ送信する処理を実行させ、
前記中継ノードのインタフェース部に、前記葉ノードから受信した前記指示に含まれる前記データに基づき前記所定の指示に含まれる演算用データに対して前記所定の演算を行なう処理を実行させるためのものであり、
前記所定の指示に含まれる前記演算用データは、前記中継ノードにおける前記所定の演算が完了するときには、前記演算結果となるものである、
ことを特徴とする、情報処理システムの制御プログラム。
【請求項２】
前記インタフェース部に、
前記中継ノードに接続された各葉ノードから受信した前記指示に基づく前記所定の演算が完了するまでは、前記所定の指示の送信を保留し、
前記各葉ノードから受信した前記指示に基づく前記所定の演算が完了すると、前記所定の指示を前記上流ノードへ送信する処理を実行させることを特徴とする、請求項１記載の情報処理システムの制御プログラム。
【請求項３】
前記インタフェース部に、
前記指示を受信すると前記所定の指示に含まれる前記演算用データを前記キューから読み出し、
読み出した前記演算用データに対して前記指示に含まれる前記データを用いた前記所定の演算を行ない、
前記所定の演算を行なった前記演算用データを前記キューに設定された前記所定の指示に書き込む処理を実行させることを特徴とする、請求項１又は請求項２記載の情報処理システムの制御プログラム。
【請求項４】
前記プロセッサに、前記中継ノードにおける前記所定の演算の実行前に前記所定の指示を前記キューに設定すると、前記所定の指示のアドレスに関する情報を前記インタフェース部を介して前記葉ノードへ送信する処理を実行させることを特徴とする、請求項１〜３のいずれか１項記載の情報処理システムの制御プログラム。
【請求項５】
各々がデータを有する複数の葉ノードのうちの自ノードに接続された前記葉ノードのデータを用いて所定の演算を行ない、前記所定の演算の演算結果をルートノードへ送信する中継ノードとしての情報処理装置であって、
前記情報処理装置のルートノード側に接続された上流ノードへの指示を格納するキューと、
前記上流ノードへ前記演算結果を送信するための所定の指示を、前記情報処理装置における前記所定の演算の実行前に前記キューに設定するプロセッサと、
前記葉ノードから受信した指示に含まれる前記葉ノードが有するデータに基づき、前記所定の指示に含まれる演算用データに対して前記所定の演算を行なうインタフェース部と、をそなえるものであり、
前記所定の指示に含まれる前記演算用データは、前記中継ノードにおける前記所定の演算が完了するときには、前記演算結果となるものである、
ことを特徴とする、情報処理装置。
【請求項６】
各々がデータを有する複数の葉ノードと、
自ノードに接続された前記葉ノードのデータを用いて所定の演算を行なう１以上の中継ノードと、
自ノードに接続された前記葉ノードのデータと前記中継ノードによる前記所定の演算の演算結果とを用いて前記所定の演算を行なうルートノードと、をそなえ、
前記中継ノードは、前記中継ノードのルートノード側に接続された上流ノードへ前記演算結果を送信するための所定の指示を、前記中継ノードにおける前記所定の演算の実行前にキューに設定するプロセッサをそなえ、
前記中継ノードに接続された前記葉ノードは、前記葉ノードが有するデータを含む前記中継ノードへの指示を生成して、生成した前記指示を前記中継ノードへ送信し、
前記中継ノードは、前記葉ノードから受信した前記指示に含まれる前記データに基づき前記所定の指示に含まれる演算用データに対して前記所定の演算を行なうインタフェース部をさらにそなえるものであり、
前記所定の指示に含まれる前記演算用データは、前記中継ノードにおける前記所定の演算が完了するときには、前記演算結果となるものである、
ことを特徴とする、情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムの制御プログラム，情報処理装置，及び情報処理システム
に関する。
【背景技術】
【０００２】
複数のノード（情報処理装置）により並列演算を行なう並列計算機（情報処理）システムでは、ＭＰＩ（Message Passing Interface）等の通信ライブラリが利用されることがある。通信ライブラリは、複数のノード間でデータの送受信を行なうための集団通信等、ノードの通信に関する機能を提供するライブラリである。
【０００３】
通信ライブラリが提供する集団通信の一つとしてリダクション演算が知られている。リダクション演算は、複数のノード（葉ノード）の持つデータを用いて特定の演算が行なわれた結果を１つのノード（ルート（root）ノード）に集約する操作である。
【０００４】
リダクション演算には複数の実装態様があるが、その一つとして図１７に例示するような、中継ノードで演算の途中結果を求めながらルートノードに結果を集約する手法がある。図１７に示す手法によれば、ノードを多数そなえる大規模なシステムであっても、ルートノードに通信が集中することによる全体の処理時間の増加を抑えることができるという利点がある。
【０００５】
なお、図１７の例では、葉ノードＡ〜ＤはルートノードＲ又は中継ノードＥ〜Ｇへデータを送信する（タイミングｔ１，矢印（１）参照）。ルートノードＲ又は各中継ノードＥ〜Ｇは送信されたデータの受信完了を確認し、受信したデータに対して指定された演算を行なう。演算が完了したら、中継ノードＥはそのデータをルートノードＲへ、中継ノードＧは次の中継ノードＦへ送信する（タイミングｔ２，矢印（２）参照）。また、中継ノードＦは葉ノードＣ及び中継ノードＧから受信したデータに対して指定された演算を行なった後、そのデータをルートノードＲへ送信する（タイミングｔ３，矢印（３）参照）。
【０００６】
また、ＭＰＩによるデータの送受信の手法としてノンブロッキング通信も知られている。ノンブロッキング通信では、ノードのプロセッサが通信処理を開始した時点で通信関数から復帰するため、通信が完了するまでの間に当該通信処理に他の演算処理をオーバーラップさせることができる。ノンブロッキング通信では、通信処理を行なうノードが適切なタイミングで通信処理の完了確認を行なう。
【０００７】
ところで、特定の処理の高速化に寄与する技術としてＡＲＭＷ（Atomic Read Modify Write）操作及びハードウェアオフロードがある。
【０００８】
ＡＲＭＷ操作とは、一連の処理をアトミックに（アトミック性を保証して）行なう操作である。一連の処理としては例えば以下に示すものが挙げられる。
・リモートノードのバッファ領域（メモリ領域）からのデータの読み出し（Read）。
・読み出したデータ（リモート側領域データ）に対し特定の演算を行なうことによるリモート側領域データの書き換え（Modify）。
・当該バッファ領域への書き換え後のデータの書き込み（Write）。
【０００９】
リモート側領域データへの特定の演算には、ＡＲＭＷ操作の指示（ＡＲＭＷ指示）の発行元のノード（ローカルノード）が持つデータ（ローカル側領域データ）を用いることができる。このローカル側領域データは、図１８に例示するようにＡＲＭＷ指示に直接記述されて指定される。なお、図１８に示すＡＲＭＷ指示例において、指示の種類は当該ＡＲＭＷ指示により実行される一連の処理に関する情報であり、リモート側領域データのアドレス情報は例えば操作対象のリモート側領域データのアドレスに対応付けられた値である。また、リモートノードの座標はシステム内におけるリモートノードの位置に関する情報である。
【００１０】
ハードウェアオフロードとは、通常はＣＰＵ（Central Processing Unit）が行なう処理をＮＩＣ（Network Interface Card）等のハードウェアに実行させることで、ＣＰＵ負荷を軽減させる技術である。なお、ハードウェアオフロードには、上述したＡＲＭＷ操作を実行する機能や、或る処理の完了を契機として予め用意された特定の指示を自動送信する機能を持たせることもできる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００６−２７７６３５号公報
【特許文献２】特開２０１２−２５２５９１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
中継ノードを経由して実装されるノンブロッキングなリダクション演算では、以下の点が性能面でのネックとなる。
【００１３】
図１７を参照して説明したように、中継ノード及びルートノードではそれぞれ以下の処理が行なわれる。
【００１４】
［中継ノード］
１．演算に用いるデータの受信完了を確認。
２．演算を実行。
３．次のノードへデータを送信。
【００１５】
［ルートノード］
１．演算に用いるデータの受信完了を確認。
２．演算を実行。
【００１６】
中継ノードでの処理１〜２間及び処理２〜３間並びにルートノードでの処理１〜２間（図１９の符号Ａで示す矢印参照）では、いずれもＣＰＵが次の処理の実行指示を行なうことになる。このように、図１９の符号Ａで示す矢印の区間は、ＣＰＵが解放されず並列演算の性能面でのオーバーヘッドとなり得る。
【００１７】
また、中継ノード及びルートノードでの各操作（図１９の符号Ｂで示す各ボックス参照）は全てＣＰＵの処理により行なわれる。従って、これらの処理が実行されている間はＣＰＵが他の演算をオーバーラップさせることができず、オーバーラップの可能時間が制限され、並列演算の性能を向上させることが難しい。
【００１８】
そこで、上述したＡＲＭＷ操作及びハードウェアオフロードを以下のように組み合わせることで、性能面の改善を図ることも考えられる。
【００１９】
（Ａ）  ＡＲＭＷ操作を用いてデータの受信完了から演算までの処理を突き放しで行なうようにすることで、中継ノードやルートノードでの処理１〜２間のオーバーヘッドを削減する。
【００２０】
（Ｂ）  ハードウェアオフロード機能を有するＮＩＣにＡＲＭＷ操作を実行する機能を持たせることで、ＡＲＭＷ操作中のＣＰＵ処理を不要とし、ＮＩＣによるＡＲＭＷ操作中にＣＰＵによって他の演算をオーバーラップさせることを可能とする。
【００２１】
（Ｃ）  （Ｂ）のＮＩＣに特定の処理の完了を契機として次の指示を読み出して送信する機能を持たせることで、中継ノードにおける処理２〜３間のオーバーヘッドを削減する。
【００２２】
しかしながら、ＮＩＣによる次の指示の自動送信機能は、中継ノード経由型のノンブロッキングなリダクション演算で利用されるＡＲＭＷ操作と組み合わせることが難しい。なぜなら、自動送信機能で送信できるのは事前に用意された指示のみであるため、中継ノードではＮＩＣによるＡＲＭＷ操作が開始される前に指示キューに次のノード宛のＡＲＭＷ指示が設定される必要がある。換言すれば、次のノード宛のＡＲＭＷ指示は、図１８に示すように指示自体に演算用データが記述されるため、中継ノードにおける次のノード宛のＡＲＭＷ指示の作成時点、例えば指示キューへの設定時点でその演算用データが確定している必要がある。しかし、この演算用データは当該中継ノードのＮＩＣによるＡＲＭＷ操作の過程（集計の完了）で初めて得られるものであり、ＮＩＣによるＡＲＭＷ操作の開始前に演算用データを予めＡＲＭＷ指示に設定しておくことができないのである。
【００２３】
以上のように、中継ノードでのＡＲＭＷ操作と中継ノードのＮＩＣによる自動送信機能とを組み合わせることが困難であるため、上記（Ａ）〜（Ｃ）の全ての組み合わせによる性能面の改善を図ることが難しい。
【００２４】
１つの側面では、本発明は、複数の情報処理装置をそなえる情報処理システムにおける並列演算の性能向上を図ることを目的とする。
【課題を解決するための手段】
【００２５】
１つの態様では、本件の情報処理システムの制御プログラムは、各々がデータを有する複数の葉ノードと、自ノードに接続された前記葉ノードのデータを用いて所定の演算を行なう１以上の中継ノードと、自ノードに接続された前記葉ノードのデータと前記中継ノードによる前記所定の演算の演算結果とを用いて前記所定の演算を行なうルートノードと、をそなえる情報処理システムの制御プログラムである。この制御プログラムは、前記中継ノードのプロセッサに、前記中継ノードのルートノード側に接続された上流ノードへ前記演算結果を送信するための所定の指示を、前記中継ノードにおける前記所定の演算の実行前にキューに設定する処理を実行させる。また、この制御プログラムは、前記中継ノードに接続された前記葉ノードに、前記葉ノードが有するデータを含む前記中継ノードへの指示を生成させ、生成した前記指示を前記中継ノードへ送信する処理を実行させる。さらに、この制御プログラムは、前記中継ノードのインタフェース部に、前記葉ノードから受信した前記指示に含まれる前記データに基づき前記所定の指示に含まれる演算用データに対して前記所定の演算を行なう処理を実行させるためのものであり、前記所定の指示に含まれる前記演算用データは、前記中継ノードにおける前記所定の演算が完了するときには、前記演算結果となるものである。
【発明の効果】
【００２６】
１つの側面では、複数の情報処理装置をそなえる情報処理システムにおける並列演算の性能向上を図ることができる。
【図面の簡単な説明】
【００２７】
【図１】一実施形態の一例としての並列計算機システムの構成例を示す図である。
【図２】図１に示すノードのハードウェア構成例を示す図である。
【図３】図１に示すノードの機能構成例を示す図である。
【図４】一実施形態に係るリダクション演算におけるノードの関係の一例を示す図である。
【図５】事前設定フェーズにおけるノードの動作例を示す図である。
【図６】事前設定フェーズにおけるノードの動作例を示す図である。
【図７】事前設定フェーズにおけるノードの動作例を示す図である。
【図８】演算フェーズにおけるノードの動作例を示す図である。
【図９】演算フェーズにおけるノードの動作例を示す図である。
【図１０】一実施形態に係る並列計算機システムの動作例を説明するフローチャートである。
【図１１】一実施形態に係るルートノードの事前設定フェーズにおける動作例を説明するフローチャートである。
【図１２】一実施形態に係る中継ノードの事前設定フェーズにおける動作例を説明するフローチャートである。
【図１３】一実施形態に係る葉ノードの事前設定フェーズにおける動作例を説明するフローチャートである。
【図１４】一実施形態に係る葉ノードの演算フェーズにおける動作例を説明するフローチャートである。
【図１５】一実施形態に係る中継ノードの演算フェーズにおける動作例を説明するフローチャートである。
【図１６】一実施形態に係るルートノードの演算フェーズにおける動作例を説明するフローチャートである。
【図１７】並列計算機システムにおける中継ノードを利用したリダクション演算の一例を示す図である。
【図１８】ＡＲＭＷ指示の一例を示す図である。
【図１９】リダクション演算を行なう中継ノード及びルートノードの処理を説明するための図である。
【発明を実施するための形態】
【００２８】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００２９】
〔１〕一実施形態
図１は一実施形態の一例としての並列計算機システム１の構成例を示す図である。図１に示すように、並列計算機（情報処理）システム１は複数（図１の例では９つ）のノード２−１〜２−９（以下の説明において複数のノード２−１〜２−９を区別しない場合には単にノード２という）をそなえる。
【００３０】
並列計算機システム１は、複数のノード２をバス１ａ等のネットワークにより相互に通信可能に接続して形成されたシステムである。バス１ａとしては、イーサネット（Ethernet；登録商標），インフィニバンド（InfiniBand)，ミリネット（Myrinet）等の高速なバスアーキテクチャに対応したメタルケーブル又は光ケーブル等が挙げられる。
【００３１】
なお、図１の例では説明の簡略化のため少数（９つ）のノード２を示しているが、並列計算機システム１にそなえられるノード２はこの程度の数に限定されるものではない。例えば大規模な並列計算機システム１には数千〜数万、或いはそれ以上のノード２がそなえられてもよい。また、ノード数に応じて、並列計算機システム１は、１つの筐体又は１つのラック内の複数のノード２により実現されてもよいし、各々が複数のノード２をそなえるラックを複数結合した大規模なシステムであってもよい。さらに、図１の例ではノード２の接続形態が２次元のメッシュ構造であるものとしたが、２次元のトーラス構造，３次元のメッシュ又はトーラス構造，或いはこれら２次元又は３次元のメッシュ及びトーラス構造の組み合わせ等であってもよい。
【００３２】
また、並列計算機システム１は、図示しないネットワークを介してユーザからアクセス可能とすることができる。例えばユーザ端末はＳＳＨ（Secure Shell）やＴｅｌｎｅｔ（Teletype Network）等の既知の種々の手法により並列計算機システム１にアクセスを行ない、ノード２にユーザプログラムを実行させることができる。
【００３３】
ここで、並列計算機システム１がそなえるノード２には、後述するリダクション演算を実行する計算ノード（葉ノード，中継ノード，ルートノード等）とともに、ユーザプログラムの実行を計算ノードに指示するログインノードが含まれてもよい。例えばユーザ端末は、ＳＳＨ接続等により並列計算機システム１のログインノードに乗り込み、そこでユーザプログラム実行用のコマンドを入力することでログインノードにユーザプログラムを実行させることができる。或いは、ユーザ端末は、計算ノードに直接乗り込んでユーザプログラムを実行させてもよい。
【００３４】
なお、このユーザプログラムには、通信用データやバッファの用意、ノンブロッキング通信関数の呼び出し、その他の演算処理、ノンブロッキング通信関数の呼び出しに対応する完了確認関数の呼び出し、等の種々の処理が含まれてよい（記述されてよい）。ユーザプログラムにより実行されるこれらの処理の詳細は、後述する。
【００３５】
図２は図１に示すノード（情報処理装置）２のハードウェア構成例を示す図である。ノード２は、図２に示すように、例示的にＣＰＵ２１，メモリ２２，及びＮＩＣ２３をそなえることができる。
【００３６】
ＣＰＵ２１は、種々の制御や演算を行なう演算処理装置（プロセッサ）の一例である。ＣＰＵ２１は、メモリ２２及びＮＩＣ２３と接続され、メモリ２２又は図示しないＲＯＭ（Read Only Memory）等の記憶装置に格納されたプログラムを実行することにより、種々の機能を実現することができる。
【００３７】
例えばＣＰＵ２１は、メモリ２２に格納されたＭＰＩ等の通信ライブラリを用い、各種通信、例えば他のノード２と協調して並列計算機システム１におけるリダクション演算等の集団通信を実現することができる。
【００３８】
一例としてリダクション演算では、ＣＰＵ２１は、並列計算機システム１の使用者が設定したルートノード及び複数の葉ノードを特定（指定）する情報に基づき、葉ノードからルートノードへのリダクション演算で用いる中継ノードの決定を行なう。この決定を行なうＣＰＵ２１は、例えば指定されたルートノード及び葉ノードの内の少なくとも１つのノード２のＣＰＵ２１等、複数のノード２内の任意のノード２のＣＰＵ２１となる。また、葉ノードのＣＰＵ２１は、使用者が設定した演算に用いるデータをメモリ２２に保存し、他の葉ノードのＣＰＵ２１と同時にリダクション演算を開始する。
【００３９】
ここで、一実施形態においては、リダクション演算を実行するノード２のＮＩＣ２３が動作主体となって演算を行なう。
【００４０】
このため、ノード２のＣＰＵ２１は、リダクション演算の事前準備を行なう事前設定フェーズにおいては、各ノード２へのリダクション演算のために事前の設定処理等を行なう。一方、リダクション演算を行なう演算フェーズでは、葉ノードのＣＰＵ２１がＮＩＣ２３にリダクション演算の開始を指示するだけでよい。なお、リダクション演算の開始を指示された葉ノードのＮＩＣ２３は、メモリ２２内のＡＲＭＷ指示データ（演算用データを含む）を次のノード（中継ノード又はルートノード）へ送信する。
【００４１】
ＣＰＵ２１による事前設定フェーズ及び演算フェーズにおける処理については、後述する。
【００４２】
メモリ２２は、種々のデータやプログラムを格納する記憶装置である。ＣＰＵ２１は、プログラムを実行する際に、メモリ２２にデータやプログラムを格納し展開する。なお、メモリ２２としては、ＲＡＭ（Random Access Memory）、例えばＤＲＡＭ（Dynamic RAM）等の揮発性メモリを用いたモジュールが挙げられる。
【００４３】
ＮＩＣ２３は、他のノード２との間の主に有線による接続及び通信の制御等を行なう通信インタフェースである。例えばＮＩＣ２３は、ＬＡＮ（Local Area Network），インフィニバンド，ミリネット等に対応した複数のポートをそなえ、バス１ａを介してポートに接続された他のノード２に対するデータ（パケット）の送受信を行なうことができる。
【００４４】
また、ＮＩＣ２３は、演算フェーズにおいてハードウェアオフロードによるＡＲＭＷ操作を含む種々の処理を実行する。例えばＮＩＣ２３は、リモートノードへのデータの送信、リモートノードにおけるデータの受信、リモートノードにおける演算の実行という一連の処理をＡＲＭＷ操作により実行することができる。
【００４５】
上述したＮＩＣ２３の機能の一部又は全部は、図２に例示する処理部２３ａにより実現することができる。処理部２３ａとしては、例えばメモリ２３ｂに格納されたファームウェアを実行するＣＰＵやＭＰＵ（Micro Processing Unit）等の演算処理装置とすることができる。メモリ２３ｂは演算フェーズにおけるＮＩＣ２３の機能を実現するためのファームウェアを格納する記憶装置である。メモリ２３ｂとしては種々のＲＯＭやフラッシュメモリ等の不揮発性メモリが挙げられる。
【００４６】
なお、演算処理装置に代えて処理部２３ａには論理回路、例えばＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field-Programmable Gate Array）等の種々の集積回路（ＩＣ；Integrated Circuit）が用いられてもよい。この場合、メモリ２３ｂは当該集積回路内に実装されてもよい。一例として、ＮＩＣ２３がＩＣＣ（Interconnect Controller）等のノード２におけるインターコネクトの制御を行なうＬＳＩ（Large Scale Integration）によって実現されてもよい。
【００４７】
上述したノード２のハードウェア構成は例示であり、ノード２内でのハードウェアの増減（例えば任意のブロックの追加や省略），分割，任意の組み合わせでの統合，バスの追加又は省略等は適宜行なわれてもよい。
【００４８】
〔１−１〕ノードの構成例
次に、図３〜図９を参照しながら、一実施形態に係るノード２の構成例について説明する。
【００４９】
図３は図１に示すノード２の機能構成例を示す図である。ノード２のメモリ２２は、その記憶領域内に送信指示キュー（ＴＯＱ；Transmission Order Queue）２２ａ及び受信通知キュー（ＭＲＱ；Message Receive Queue）２２ｂをそなえることができる。ＴＯＱ２２ａは送信指示を格納するために用いられ、ＭＲＱ２２ｂは受信完了通知等を格納するために用いられるキューである。
【００５０】
なお、ＴＯＱ２２ａは一実施形態に係るＡＲＭＷ指示を格納するための専用のキューとすることができる。また、ＴＯＱ２２ａ及びＭＲＱ２２ｂはいずれも複数設けられて（確保されて）もよい。さらに、ノード２がメモリ２２内に予め複数のキューを用意し、リダクション演算を行なう際にこれらのキューがＴＯＱ２２ａ及びＭＲＱ２２ｂとして用いられてもよい。
【００５１】
ノード２のＣＰＵ２１及びＮＩＣ２３は、ノンブロッキングなリダクション演算を行なう際の計算ノードとしての自ノード２の役割（ルートノード，中継ノード，又は葉ノード）に応じたノード処理部をそなえる。
【００５２】
例えばＣＰＵ２１は、ルートノード処理部２１０、中継ノード処理部２１２、及び葉ノード処理部２１４をそなえることができ、ＮＩＣ２３は、ルートノード処理部２３０、中継ノード処理部２３２、及び葉ノード処理部２３４をそなえることができる。並列計算機システム１においては自ノード２の役割が変化し得る（固定されない）ため、各ノード２のＣＰＵ２１及びＮＩＣ２３はこれら全てのノード処理部の機能をそなえ、自ノード２の役割に応じて使用するノード処理部を選択することが好ましい。
【００５３】
以下、事前設定フェーズ及び演算フェーズのそれぞれの場面における、ルートノード、中継ノード、葉ノード（以下、これらに符号２ａ、２ｂ、２ｃを付加して表記する）の各々のノード処理部の動作について説明する。
【００５４】
なお、以下の説明において、リダクション演算を行なう並列計算機システム１は図４に例示するノード２をそなえるものとする。図４において、ノードＡ〜Ｄは各々がデータを有する複数の葉ノード２ｃであり、ノードＥ〜Ｇは自ノード２ｂに接続された葉ノード２ｃのデータを用いて所定の演算を行なう１以上の中継ノード２ｂである。また、ノードＲは自ノード２ａに接続された葉ノード２ｃのデータと、中継ノード２ｂによる所定の演算の演算結果とを用いて所定の演算を行なうルートノード２ａである。なお、リダクション演算を行なうノード２において、ルートノード２ａ側を上流、葉ノード２ｃ側を下流とする。
【００５５】
以下の説明において、ルートノード２ａ及び葉ノード２ｃ並びに葉ノード２ｃに設定される演算用データは、並列計算機システム１にノンブロッキングなリダクション演算を実行させるユーザプログラムによって予め指定されているものとする。また、中継ノード２ｂはルートノード２ａ等により図１に示す並列計算機システム１の中から選択される。
【００５６】
〔１−１−１〕事前設定フェーズ
図５〜図７は事前設定フェーズにおけるノード２の動作例を示す図である。事前設定フェーズでは、ルートノード２ａ，中継ノード２ｂ，葉ノード２ｃは、それぞれ以下の動作を行なう。
【００５７】
＜ルートノード２ａ＞
ルートノード２ａのＣＰＵ２１のルートノード処理部２１０は、リダクション演算の事前設定（初期化処理）において、ランダムアクセスバッファ（ＲＢ；Random Access Buffer）２２ｃをメモリ２２上に確保する（図５の符号（ｉ）参照）。ＲＢ２２ｃは、リダクション演算結果を書き込むための集計用のバッファとして用いられる。
【００５８】
また、ルートノード処理部２１０は、集計用のＲＢ２２ｃのアドレスを自ノード２２ａと直接通信を行なう下流のノード２つまり葉ノード２ｃ側に接続されたノード２へ送信するようにＮＩＣ２３に指示する（図５の矢印（ii）参照）。
【００５９】
ＮＩＣ２３のルートノード処理部２３０は、ＣＰＵ２１からの指示に応じて、自ノード２ａと直接通信を行なう中継ノード２ｂ及び葉ノード２ｃへＲＢ２２ｃのアドレスの情報を送信する（図５の矢印（iii）参照）。
【００６０】
ところで、ＭＰＩのノンブロッキング通信では、ユーザプログラムにより、ノンブロッキング通信関数が呼び出された後で完了確認のために完了確認関数が呼び出される。このとき、どのノンブロッキング通信の完了確認を行なうのかを識別するために、識別用の情報である“request”が利用される。例えばノンブロッキング通信関数が呼び出される際には、“request”が引数の一つとして指定される。通信関数内では、例えば以下の情報を含む“request”用の情報がセットされる。
【００６１】
・この“request”が作られたのが集団通信におけるルートノード２ａ側か否かを示すフラグ。
・通信が完了したか否かを示すフラグ。
・この通信の完了を確認するために受信通知キューから読み出す完了通知の数。
【００６２】
そこで、ＣＰＵ２１のルートノード処理部２１０は、ノンブロッキングなリダクション演算の初期化処理の際に、“request”の情報として以下の値をセットすればよい。
【００６３】
・集団通信のルートノードフラグ  ：TRUE
・メモリ通信完了フラグ          ：FALSE
・読み出す完了通知の数          ：ルートノード２ａと直接通信するノードの数
【００６４】
なお、ルートノード処理部２１０（ＣＰＵ２１）は、ノンブロッキングなリダクション演算関数を呼び出し、内部の初期化処理が終わった時点で関数の呼び出し元に復帰する。
【００６５】
＜中継ノード２ｂ＞
ルートノード２ａと直接通信する中継ノード２ｂでは、ＣＰＵ２１の中継ノード処理部２１２が、上流のノード２つまりルートノード２ａへ送信するための集計用ＡＲＭＷ指示を作成し、ＴＯＱ２２ａに設定する（図５の符号（iv）参照）。
【００６６】
具体的には、中継ノード処理部２１２は、自ノード２ｂを経由するノード数（自ノード２と直接通信を行なう下流のノード数）から１を減じた数のＮＯＰ（No Operation）指示を作成し、メモリ２２のＴＯＱ２２ａに設定する（図６の符号（iv−１）参照）。また、中継ノード処理部２１２は、図５の矢印（ii）及び（iii）でルートノード２ａから送信されたアドレスを参照し、ルートノード２ａ上の集計用ＲＢ２２ｃを対象とする集計用ＡＲＭＷ指示を作成する。そして、中継ノード処理部２１２は、作成した集計用ＡＲＭＷ指示をＮＯＰ指示に続けてＴＯＱ２２ａに設定する（図６の符号（iv−２）参照）。集計用ＡＲＭＷ指示とは、下流の葉ノード２ｃからのＡＲＭＷ操作（リダクション演算）の結果を集計し、上流の中継ノード２ｂ又はルートノード２ａへ送信するためのＡＲＭＷ指示である。換言すれば、集計用ＡＲＭＷ指示を実行するノード２は、自ノード２よりも下流のノード２（葉ノード２ｃ）のリダクション演算結果を集計して上流のノード２へ出力するのである。
【００６７】
なお、ＮＯＰ指示は何も処理を行なわないことを意味する指示である。ハードウェアオフロードでは、特定の指示の自動送信機能を利用する際に、その指示の前に複数のＮＯＰ指示を用意しておくことで、複数のＮＯＰ指示が完了した後にその特定の指示を自動送信させることが可能である。一実施形態に係る中継ノード２ｂは、この仕組みを利用して、ＴＯＱ２２ａに自ノード２ｂを経由するノード数−１の数のＮＯＰ指示と、集計用ＡＲＭＷ指示とを登録するのである。
【００６８】
これにより、中継ノード２ｂ（ＮＩＣ２３の中継ノード処理部２３２）は、自ノード２ｂを経由するノード数−１の数のＮＯＰ指示が完了した後に、ＮＯＰ指示の後ろに登録された集計用ＡＲＭＷ指示を送信することができる。
【００６９】
なお、自ノード２ｂを経由するノード数が１である場合、中継ノード処理部２１２はＮＯＰ指示を作成せずに集計用ＡＲＭＷ指示のみを作成してよい。
【００７０】
ここで、図６の符号（iv−２）において作成される集計用ＡＲＭＷ指示は、リモート側の情報にルートノード２ａの情報（ＲＢ２２ｃのアドレスに関する情報等）が設定される。一方、上述のようにローカル側領域データ（図１８参照）には、この時点で演算に用いられる正しい値を設定することができない。そこで、中継ノード処理部２３２は、作成する集計用ＡＲＭＷ指示のローカル側領域データとして、仮のデータ（ダミーデータ）を設定する。仮のデータは、リダクション演算の演算結果に影響を与えないデータであり、リダクション演算の演算内容に応じて決定される。例えばリダクション演算が加算であれば仮のデータは“０”、リダクション演算が乗算であれば仮のデータは“１”のようになる。
【００７１】
また、中継ノード処理部２１２は、自ノード２ｂのＴＯＱ２２ａに設定された集計用ＡＲＭＷ指示のアドレスを自ノード２ｂと直接通信を行なう下流のノード２（中継ノード２ｂ及び葉ノード２ｃ）へ送信するようにＮＩＣ２３に指示する（図６の矢印（ｖ）参照）。
【００７２】
ＮＩＣ２３の中継ノード処理部２３２は、ＣＰＵ２１からの指示に応じて、自ノード２ｂと直接通信を行なう中継ノード２ｂ及び葉ノード２ｃへ集計用ＡＲＭＷ指示のアドレスの情報を送信する（図６の矢印（vi）参照）。
【００７３】
なお、ルートノード２ａと直接通信しない中継ノード２ｂも、基本的にルートノード２ａと直接通信する中継ノード２ｂと同様の動作を行なう。ルートノード２ａと直接通信しない中継ノード２ｂ（図６の例では紙面左側のノード２）は、その上流のノード２も中継ノード２ｂとなる。
【００７４】
ルートノード２ａと直接通信しない場合、中継ノード処理部２１２は、図６の矢印（vi）で上流の中継ノード２ｂから送信された当該上流の中継ノード２ｂの集計用ＡＲＭＷ指示のアドレスを参照し、当該集計用ＡＲＭＷ指示を対象とする集計用ＡＲＭＷ指示を作成すればよい。このときのＴＯＱ２２ａ（図６の符号（vii）参照）も、図６の紙面右側の中継ノード２ｂのＴＯＱ２２ａのように０以上のＮＯＰ指示に続けて集計用ＡＲＭＷ指示が設定されることになる。
【００７５】
なお、中継ノード２ｂが上流の中継ノード２ｂの集計用ＡＲＭＷ指示を対象とする集計用ＡＲＭＷ指示を作成する場合においても、作成する集計用ＡＲＭＷ指示のローカル側領域データには仮のデータが設定される。
【００７６】
ここで、ＣＰＵ２１の中継ノード処理部２１２は、ノンブロッキングなリダクション演算の初期化処理の際に、“request”の情報を作成しなくてよい。ユーザプログラムからは、ルートノード２ａ及び葉ノード２ｃでの完了確認だけ行なえればよいためである。
【００７７】
なお、中継ノード処理部２１２（ＣＰＵ２１）は、ノンブロッキングなリダクション演算関数を呼び出し、内部の初期化処理が終わった時点で関数の呼び出し元に復帰する。
【００７８】
以上のように、中継ノード２ｂのＣＰＵ２１は、上流のノード２へ演算結果を送信するための所定の指示を、中継ノード２ｂにおける所定の演算の実行前にＴＯＱ２２ａに設定するプロセッサの一例であるといえる。
【００７９】
＜葉ノード２ｃ＞
葉ノード２ｃでは、ＣＰＵ２１の葉ノード処理部２１４が、上流のノード２（ルートノード２ａ又は中継ノード２ｂ）に送信するためのＡＲＭＷ指示を作成し、ＴＯＱ２２ａに設定する（図５の符号（iv），図６の符号（vii），図７の符号（viii）参照）。
【００８０】
具体的には、ルートノード２ａと直接通信を行なう葉ノード２ｃでは、葉ノード処理部２１４が、図５の矢印（ii）及び（iii）でルートノード２ａから送信されたアドレスを参照し、ルートノード２ａ上の集計用ＲＢ２２ｃを対象とするＡＲＭＷ指示を作成する。そして、葉ノード処理部２１４は、作成したＡＲＭＷ指示をＴＯＱ２２ａに設定する（図５の符号（iv），図７の符号（viii）参照）。
【００８１】
一方、中継ノード２ｂと直接通信を行なう葉ノード２ｃでは、葉ノード処理部２１４が、図６の矢印（ｖ）及び（vi）で中継ノード２ｂから送信されたアドレスを参照し、中継ノード２ｂ上の集計用ＡＲＭＷ指示を書き換えるためのＡＲＭＷ指示を作成する。そして、葉ノード処理部２１４は、作成したＡＲＭＷ指示をＴＯＱ２２ａに設定する（図６の符号（vii），図７の符号（viii）参照）。
【００８２】
なお、図７の符号（viii）において作成されるＡＲＭＷ指示は、リモート側の情報にルートノード２ａの情報（ＲＢ２２ｃのアドレスに関する情報）又は中継ノード２ｂの情報（集計用ＡＲＭＷ指示のアドレスに関する情報等）が設定される。また、ローカル側領域データ（図１８参照）には、リダクション演算において自ノード２ｃに割り当てられる演算用データが設定される。この演算用データは、並列計算機システム１の使用者により事前にルートノード２ａ及び複数の葉ノード２ｃが特定（指定）される際に、葉ノード２ｃのメモリ２２に設定されてもよいし、リダクション演算の初期化処理の過程でルートノード２ａ（及び中継ノード２ｂ）を介して葉ノード２ｃが受信してもよい。
【００８３】
ここで、ＣＰＵ２１の葉ノード処理部２１４は、ノンブロッキングなリダクション演算の初期化処理の際に、“request”の情報として次の値をセットすればよい。
【００８４】
・集団通信のルートノードフラグ  ：FALSE
・メモリ通信完了フラグ          ：FALSE
・読み出す完了通知の数          ：1
【００８５】
以上により、ルートノード２ａ，中継ノード２ｂ，及び葉ノード２ｃによる事前設定フェーズの処理が終了する。
【００８６】
〔１−１−２〕演算フェーズ
図８及び図９は演算フェーズにおけるノード２の動作例を示す図である。演算フェーズでは、ルートノード２ａ，中継ノード２ｂ，葉ノード２ｃは、それぞれ以下の動作を行なう。
【００８７】
＜葉ノード２ｃ＞
事前設定フェーズにおいて葉ノード２ｃの処理が完了すると、演算フェーズが開始する。演算フェーズでは、葉ノード２ｃのＣＰＵ２１（葉ノード処理部２１４）がＮＩＣ２３に対してＴＯＱ２２ａの読み出しを指示する（図８，図９の矢印（Ｉ）参照）。なお、並列計算機システム１におけるこれ以降の演算フェーズの処理は、ルートノード２ａのＲＢ２２ｃに最終的なリダクション演算結果が書き込まれるまで、ＮＩＣ２３により行なわれる。
【００８８】
ＮＩＣ２３の葉ノード処理部２３４は、ＣＰＵ２１からの指示に応じて、ＴＯＱ２２ａの読み出しポインタが示す位置（例えばＴＯＱ２２ａの先頭）からＡＲＭＷ指示を読み出す（図８，図９の矢印（II）参照）。そして、葉ノード処理部２３４は、上流のノード２（中継ノード２ｂ又はルートノード２ａ）に対して読み出したＡＲＭＷ指示を送信する（図８の矢印（III），図９の矢印（VIII）参照）。
【００８９】
なお、葉ノード処理部２１４（ＣＰＵ２１）は、ノンブロッキングなリダクション演算関数を呼び出し、内部の初期化処理が終わった後、演算フェーズの起点となるＡＲＭＷ指示の送信が完了した時点で関数の呼び出し元に復帰する。
【００９０】
以上のように、葉ノード２ｃのＣＰＵ２１（葉ノード処理部２１４）は、葉ノード２ｃが有するデータを含む中継ノード２ｂへの指示を生成して、生成した指示を中継ノード２ｂへ送信するのである。
【００９１】
＜中継ノード２ｂ＞
中継ノード２ｂのＮＩＣ２３（中継ノード処理部２３２）は、下流のノード２（中継ノード２ｂ又は葉ノード２ｃ）から自ノード２ｂを対象としたＡＲＭＷ指示を受信すると、ＡＲＭＷ指示で指定された集計用ＡＲＭＷ指示をＡＲＭＷ操作で書き換える（図８の矢印（IV）参照）。
【００９２】
具体的には、中継ノード処理部２３２は、受信したＡＲＭＷ指示で指定された自ノード２ｂのＴＯＱ２２ａ内の集計用ＡＲＭＷ指示におけるローカル側領域データ（演算用データ）を読み出す。そして、中継ノード処理部２３２は、読み出した演算用データに対して、受信したＡＲＭＷ指示に記述された演算用データを用いた所定の演算を行ない、演算結果をＴＯＱ２２ａ内の集計用ＡＲＭＷ指示に書き込むことで、ＡＲＭＷ操作を完了する。
【００９３】
中継ノード処理部２３２は、ＡＲＭＷ操作が完了すると、ＭＲＱ２２ｂに完了通知を設定（登録）する（図８の矢印（Ｖ）参照）。なお、完了通知には、何の処理に関する完了の通知であるのかを識別する値等、通信種類を識別する情報が設定されてよい。
【００９４】
また、中継ノード処理部２３２は、完了通知をＭＲＱ２２ｂに設定すると、ＴＯＱ２２ａから指示を読み出し、読み出した指示に応じた処理を行なう（図８の矢印（VI）参照）。なお、ＴＯＱ２２ａの読出位置はポインタによって指定される。
【００９５】
このとき中継ノード処理部２３２がＴＯＱ２２ａから読み出す指示は、最後の集計用ＡＲＭＷ操作が完了したとき以外ではＮＯＰ指示であり、自ノード２ｂを経由するノード２のうちの最後のノード２からのＡＲＭＷ操作が完了するまでは、矢印（VI）において処理を行なわない。
【００９６】
一方、最後のＡＲＭＷ操作が完了したとき、ＴＯＱ２２ａの読出ポインタは集計用ＡＲＭＷ指示を示すことになる。このとき、中継ノード処理部２３２は、ＴＯＱ２２ａから集計用ＡＲＭＷ指示を読み出し、読み出した集計用ＡＲＭＷ指示を上流のノード２へ送信する（図８の矢印（VII）参照）。従って、中継ノード２ｂを利用する全ての葉ノード２ｃから要求されたＡＲＭＷ操作の完了通知がＭＲＱ２２ｂに積まれたときに、当該中継ノード２ｂのＮＩＣ２３は、ＴＯＱ２２ａから集計用ＡＲＭＷ指示を読み出し、上流のノード２に送信するのである。
【００９７】
このように、中継ノード２ｂのＮＩＣ２３は、葉ノード２ｃから受信した指示（ＡＲＭＷ指示）に含まれるデータに基づき所定の指示（集計用ＡＲＭＷ指示）に含まれる演算結果に対して所定の演算を行なうインタフェース部の一例であるといえる。このとき、ＮＩＣ２３は、葉ノード２ｃから受信した指示（ＡＲＭＷ指示）に従ってＴＯＱ２２ａ内の集計用ＡＲＭＷ指示に対し、ＡＲＭＷ操作を行なうのである。
【００９８】
また、このインタフェース部の一例としてのＮＩＣ２３は、下流に接続された全てのノード２からのＡＲＭＷ操作が完了するまではＴＯＱ２２ａに積まれた指示の送信を保留し、全てのＡＲＭＷ操作の完了を契機として、保留していた指示を読み出し、上流のノード２へ送信するのである。
【００９９】
＜ルートノード２ａ＞
ルートノード２ａのＮＩＣ２３（ルートノード処理部２３０）は、下流のノード２（中継ノード２ｂ又は葉ノード２ｃ）から自ノード２ａを対象としたＡＲＭＷ指示を受信すると、ＲＢ２２ｃをＡＲＭＷ操作で書き換える（図９の矢印（IX）参照）。
【０１００】
具体的には、ルートノード処理部２３０は、受信したＡＲＭＷ指示で指定された自ノード２ａのＲＢ２２ｃにおける演算用データを読み出す。そして、ルートノード処理部２３０は、読み出した演算用データに対して、受信したＡＲＭＷ指示に記述された演算用データを用いた所定の演算を行ない、演算結果をＲＢ２２ｃに書き込むことで、ＡＲＭＷ操作を完了する。
【０１０１】
なお、ルートノード２ａは処理の完了後に次のノード２に指示を送信する必要がないため、一般的なＡＲＭＷ操作と同様に、ＡＲＭＷ操作の書き換えの対象領域はルートノード２ａのＲＢ２２ｃとすることができるのである。
【０１０２】
ルートノード処理部２３０は、ＡＲＭＷ操作が完了すると、ＭＲＱ２２ｂに完了通知を設定（登録）する（図９の矢印（Ｘ）参照）。
【０１０３】
以上により、ルートノード２ａ，中継ノード２ｂ，及び葉ノード２ｃによる演算フェーズの処理が終了する。
【０１０４】
〔１−１−３〕完了確認処理
次に、並列計算機システム１におけるノンブロッキングなリダクション演算の完了確認処理について説明する。
【０１０５】
ＭＰＩのノンブロッキング通信の完了確認は、完了確認関数を用いて行なわれる。ノード２（ユーザプログラムで指定されたルートノード２ａ及び葉ノード２ｃ）は、完了確認関数を呼び出す際に、完了確認対象のノンブロッキング通信関数を呼び出すときに指定した“request”を引数の一つとして指定する。
【０１０６】
ＭＲＱ２２ｂに登録される完了通知にも上述のように通信種類を識別する情報が含まれているため、完了確認関数では、“request”に含まれる情報と完了通知に含まれる情報とに基づき、ルートノード２ａ側、葉ノード２ｃ側それぞれに応じた確認処理が行なわれる。
【０１０７】
ユーザプログラムが当該演算の完了確認を目的として完了確認関数を呼ぶと、リダクション演算のルートノード２ａ及び葉ノード２ｃではそれぞれ以下の処理が行なわれる。なお、ユーザプログラムは、この完了確認関数を呼び出す際にノンブロッキングなリダクション演算関数を呼び出す際に指定した“request”を、引数の一つとして指定する。
【０１０８】
ルートノード２ａ側の処理が完了するのは、ルートノード２ａのＲＢ２２ｃにリダクション演算の最終結果が書き込まれたとき、換言すればルートノード２ａに対して要求されたＡＲＭＷ操作の数だけＭＲＱ２２ｂに完了通知が登録されたときである。このため、ルートノード２ａ側の完了確認としては、ＣＰＵ２１が所定の数の完了通知がＭＲＱ２２ｂに登録されたか否かを確認することになる。
【０１０９】
例えばルートノード２ａのＣＰＵ２１は、以下の手順で完了確認を行なうことができる。
【０１１０】
（１）  集団通信のルートノードフラグの値を確認し、TRUEであれば（２）以降の処理を行なう。
【０１１１】
（２）  ＭＲＱ２２ｂから完了通知を読み出す。
【０１１２】
（３）  読み出した完了通知に含まれる情報から、ノンブロッキングなリダクション演算に関連する完了通知であることが識別された場合、“request”内に記録されている「読み出す完了通知の数」を１つ減算する。
【０１１３】
（４）  （３）の処理の結果、読み出す完了通知の数が０になると、通信完了フラグの値をTRUEにして、関数の呼び出し元に復帰する。一方、読み出す完了通知の数が０以外であれば（２）に戻る。
【０１１４】
一方、葉ノード２ｃ側は、上述のように事前設定フェーズでの初期化処理が完了し演算フェーズでのＡＲＭＷ指示の送信が完了したときに関数の呼び出し元に復帰する。このとき葉ノード２ｃ側の処理は完了しているため、完了確認関数内ではＣＰＵ２１は以下の手順で“request”の通信完了フラグをTRUEにするだけでよい。
【０１１５】
（５）  集団通信のルートノードフラグの値を確認し、FALSEであれば（６）の処理を行なう。
【０１１６】
（６）  通信完了フラグの値をTRUEにして、関数の呼び出し元に復帰する。
【０１１７】
以上の処理により、リダクション演算の完了確認処理が完了し、ユーザプログラムはリダクション演算の完了を確認することでルートノード２ａのＲＢ２２ｃからリダクション演算の処理結果を得ることができる。
【０１１８】
なお、完了が確認できない（完了していない）場合、ＣＰＵ２１は、関数の呼び出し元に復帰し、所定時間経過後等の所定のタイミングで再度完了確認関数を呼び出してもよいし、復帰せずに所定のタイミングで再度完了確認を行なってもよい。また、ルートノード２ａのＣＰＵ２１による完了確認は、全ての葉ノード２ｃのＣＰＵ２１による完了確認で通信完了フラグがTRUEと判断されてから実行されてもよい。
【０１１９】
以上のように、一実施形態に係る並列計算機システム１では、事前設定フェーズにおいて中継ノード２ｂのＴＯＱ２２ａに登録された不完全なデータを持つ集計用ＡＲＭＷ指示が、中継ノード２ｂでの演算が全て完了した時点で、次の（上流の）ノード２で用いられる正しいデータを持った状態になる。従って、中継ノード２ｂ上での演算後のデータを使用するＡＲＭＷ操作を、ＮＩＣ２３による指示の自動送信機能と組み合わせることができる。
【０１２０】
これにより、中継ノード２ｂ経由型実装のノンブロッキングなリダクション演算において、葉ノード２ｃのＣＰＵ２１がＡＲＭＷ指示を送信した後は、リダクション演算に関係する全てのノード２のＣＰＵ２１を介することなく、ＮＩＣ２３による処理のみで演算結果を求めることができる。従って、ＣＰＵ２１を介することによる処理のオーバーヘッドが削減されるとともに、ＣＰＵ２１による他の演算とのオーバーラップ可能な時間の割合を大きくすることができる。
【０１２１】
並列計算機システム１が大規模になるに従って、実行性能の向上のためには各操作単位での高速化が重要となる。一実施形態に係る上述した構成により、リダクション演算に関係するＣＰＵ２１、特に中継ノード２ｂのＣＰＵ２１に負荷が集中することを回避し、ハードウェアの機能を活用したより効率的なリダクション演算が実装できるため、アプリケーションの実行性能の向上を図ることができる。
【０１２２】
〔１−２〕動作例
次に、上述の如く構成された並列計算機システム１の動作例を、図１０〜図１６を参照して説明する。
【０１２３】
はじめに、図１０を参照して、並列計算機システム１による全体の処理について説明する。まず、並列計算機システム１のノード２においてユーザプログラムが実行され、中継ノード２ｂを経由するノンブロッキングなリダクション演算が開始される。このとき、リダクション演算のルートノード２ａ、葉ノード２ｃ、及び葉ノード２ｃに設定する演算用データが指定される（ステップＳ１）。
【０１２４】
次いで、ルートノード２ａのＣＰＵ２１は、リダクション演算において使用する中継ノード２ｂを並列計算機システム１のノード２から特定（選択）する（ステップＳ２）。
【０１２５】
次に、ルートノード２ａ、中継ノード２ｂ、葉ノード２ｃの順で前処理（事前設定）を行なうための事前設定フェーズが開始される（ステップＳ３；ステップＳ１１〜Ｓ３２）。
【０１２６】
事前設定フェーズが完了すると、葉ノード２ｃ、中継ノード２ｂ、ルートノード２ａの順でリダクション演算を行なうための演算フェーズが開始される（ステップＳ４；ステップＳＳ４１〜Ｓ６２）。
【０１２７】
また、ルートノード２ａ及び葉ノード２ｃでは完了確認関数が呼び出され、“request”の情報に基づきリダクション演算の完了の有無が確認される。演算フェーズの完了によりルートノード２ａのＣＰＵ２１がリダクション演算の完了を確認すると（ステップＳ５）、処理が終了する。これにより、ユーザはルートノード２ａのＲＢ２２ｃを参照してリダクション演算の結果を取得することができる。
【０１２８】
次に、図１１〜図１３を参照して、事前設定フェーズにおけるルートノード２ａ、中継ノード２ｂ、及び葉ノード２ｃの処理について説明する。
【０１２９】
図１１に示すように、事前設定フェーズにおいてルートノード２ａのＣＰＵ２１は、初期設定として“request”の情報を設定する（ステップＳ１１）。また、ＣＰＵ２１（ルートノード処理部２１０）は、リダクション演算の結果を格納するＲＢ２２ｃの記憶領域をメモリ２２に確保する（ステップＳ１２）。
【０１３０】
次いで、ルートノード処理部２１０は、下流のノード２（中継ノード２ｂ又は葉ノード２ｃ）へのＲＢ２２ｃのアドレスの送信をＮＩＣ２３に指示する（ステップＳ１３）。ＮＩＣ２３（ルートノード処理部２３０）は、ＣＰＵ２１からの指示に応じてＲＢ２２ｃのアドレスを下流のノード２へ送信し（ステップＳ１４）、事前設定フェーズにおけるルートノード２ａの処理が終了する。なお、ステップＳ１１の処理はステップＳ１２〜Ｓ１４の処理よりも後に実行されてもよい。
【０１３１】
また、図１２に示すように、中継ノード２ｂのＣＰＵ２１（中継ノード処理部２１２）は、自ノード２ｂを経由するノード数−１のＮＯＰ指示を作成し、ＴＯＱ２２ａに設定（格納）する（ステップＳ２１）。また、中継ノード処理部２１２は、上流のノード２から受信したアドレスの情報に基づいて、当該上流のノード２のノードに送信するための集計用ＡＲＭＷ指示を作成し、ＮＯＰ指示に続けてＴＯＱ２２ａに設定する（ステップＳ２２）。
【０１３２】
なお、中継ノード処理部２１２は、上流のノード２がルートノード２ａであればＲＢ２２ｃのアドレスを作成する集計用ＡＲＭＷ指示に設定し、中継ノード２ｂであれば当該中継ノード２ｂの集計用ＡＲＭＷ指示のアドレスを設定する。また、中継ノード処理部２１２が作成する集計用ＡＲＭＷ指示のローカル側領域データ（演算用データ）には仮のデータが設定される。
【０１３３】
次いで、中継ノード処理部２１２は、下流のノード２（中継ノード２ｂ又は葉ノード２ｃ）への集計用ＡＲＭＷ指示のアドレスの送信をＮＩＣ２３に指示する（ステップＳ２３）。ＮＩＣ２３（中継ノード処理部２３２）は、ＣＰＵ２１からの指示に応じて集計用ＡＲＭＷ指示のアドレスを下流のノード２へ送信し（ステップＳ２４）、事前設定フェーズにおける中継ノード２ｂの処理が終了する。
【０１３４】
さらに、図１３に示すように、葉ノード２ｃのＣＰＵ２１（葉ノード処理部２１４）は、初期設定として“request”の情報を設定する（ステップＳ３１）。また、葉ノード処理部２１４は、上流のノード２から受信したアドレスの情報に基づいて、当該上流のノード２のノードに送信するためのＡＲＭＷ指示を作成し、ＴＯＱ２２ａに設定する（ステップＳ３２）。以上により、事前設定フェーズにおける葉ノード２ｃの処理が終了する。なお、ステップＳ３１の処理はステップＳ３２の処理よりも後に実行されてもよい。
【０１３５】
次に、図１４〜図１６を参照して、演算フェーズにおけるルートノード２ａ、中継ノード２ｂ、及び葉ノード２ｃの処理について説明する。
【０１３６】
図１４に示すように、演算フェーズにおいて葉ノード２ｃのＣＰＵ２１（葉ノード処理部２１４）は、ＴＯＱ２２ａの先頭に格納されたＡＲＭＷ指示を読み出し、読み出したＡＲＭＷ指示を上流のノード２へ送信するようＮＩＣ２３に指示する（ステップＳ４１）。葉ノード２ｃのＮＩＣ２３（葉ノード処理部２３４）は、指示されたＡＲＭＷ指示を上流のノード２へ送信し（ステップＳ４２）、演算フェーズにおける葉ノード２ｃの処理が終了する。
【０１３７】
また、図１５に示すように、中継ノード２ｂのＮＩＣ２３（中継ノード処理部２３２）は、下流のノード２から受信したＡＲＭＷ指示に基づいて、ＴＯＱ２２ａ内の集計用ＡＲＭＷ指示自体に書かれた演算用データをＡＲＭＷ操作で書き換える（ステップＳ５１）。
【０１３８】
次いで、中継ノード処理部２３２はＭＲＱ２２ｂに完了通知を格納し（ステップＳ５２）、ＴＯＱ２２ａの読出ポインタが示す位置から指示を読み出す（ステップＳ５３）。読み出した指示が集計用ＡＲＭＷ指示であるか否かに応じて、処理が分岐する（ステップＳ５４）。
【０１３９】
読み出した指示が集計用ＡＲＭＷ指示ではない、つまりＮＯＰ指示の場合（ステップＳ５４のＮｏルート）、処理がステップＳ５１に移行する。一方、読み出した指示が集計用ＡＲＭＷ指示である場合（ステップＳ５４のＹｅｓルート）、中継ノード処理部２３２は読み出した集計用ＡＲＭＷ指示を上流のノード２へ送信する（ステップＳ５５）。
【０１４０】
このように、中継ノード２ｂのＮＩＣ２３は、下流の葉ノード２ｃ又は中継ノード２ｂから送られたＡＲＭＷ指示に基づき集計用ＡＲＭＷ指示に書かれた演算用データを更新し、各ＡＲＭＷ操作が完了する度にＴＯＱ２２ａからＮＯＰ指示を読み出す。中継ノード２ｂに対して要求される最後のＡＲＭＷ操作が行なわれるときには、当該中継ノード２ｂの集計用ＡＲＭＷ専用のＴＯＱ２２ａ上に残った指示は、集計用ＡＲＭＷ指示のみとなる。これにより、中継ノード２ｂのＮＩＣ２３は、要求された最後のＡＲＭＷ操作が完了したときに、上流のノード２へ集計用ＡＲＭＷ指示を送信することができる。
【０１４１】
以上により、演算フェーズにおける中継ノード２ｂの処理が終了する。
【０１４２】
さらに、図１６に示すように、ルートノード２ａのＮＩＣ２３（ルートノード処理部２３０）は、下流のノード２から受信したＡＲＭＷ指示に基づいて、ＲＢ２２ｃに対してＡＲＭＷ操作を行なう（ステップＳ６１）。そして、ルートノード処理部２３０は、ＭＲＱ２２ｂに完了通知を格納し（ステップＳ６２）、演算フェーズにおけるルートノード２ａの処理が終了する。
【０１４３】
〔２〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、かかる特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１４４】
例えば、図３に示すＣＰＵ２１及びＮＩＣ２３の各機能ブロックは、任意の組み合わせで併合してもよく、分割してもよい。
【０１４５】
また、上述した説明では、中継ノード２ｂとしてのノード２もＭＲＱ２２ｂをそなえるものとして説明したが、中継ノード２ｂについてはＭＲＱ２２ｂの生成を抑止してもよい。
【０１４６】
さらに、事前設定フェーズにおいて、ルートノード２ａ及び中継ノード２ｂは、それぞれ下流のノード２に対して、ＲＢ２２ｃのアドレス及び集計用ＡＲＭＷ指示のアドレスを送信するものとして説明したが、これに限定されるものではない。例えばＲＢ２２ｃや集計用ＡＲＭＷ指示のアドレスが固定値であるような場合には、これらのアドレス情報の送信は省略されてもよい。
【０１４７】
上述した並列計算機システム１による処理は、例えば以下の機能をそなえるプログラムの組み合わせにより実現されてよい。
【０１４８】
・集計用ＡＲＭＷ専用の指示キューと集計用ＡＲＭＷ指示とを生成する中継ノード２ｂのＣＰＵ２１が実行するプログラム。
【０１４９】
・中継ノード２ｂ上の集計用ＡＲＭＷ指示を書き換えるためのＡＲＭＷ指示を生成し、生成したＡＲＭＷ指示を中継ノード２ｂ（上流のノード２）に送信する葉ノード２ｃのプログラム。
【０１５０】
・各葉ノード２ｃから要求された演算が終わるまで集計用ＡＲＭＷ指示の送信を保留し、集計が終わったことを判断して、上流のノード２に集計用ＡＲＭＷ指示を送信するＮＩＣ２３のプログラム（ファームウェア）。
【０１５１】
なお、並列計算機システム１による処理を実現するプログラム（並列計算機の制御プログラム）としては、上述した組み合わせに限定されるものではない。制御プログラムとしては、各ノード２のＣＰＵ２１及びＮＩＣ２３の機能（ノード処理部）の少なくとも一部を含むものであればよい。
【０１５２】
なお、このような制御プログラムは、例えばコンピュータ読取可能な（非一時的な）記録媒体に格納された状態で提供されてよい。
【０１５３】
記録媒体としては、例えばフレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク等の光ディスクや、ＵＳＢ（Universal Serial Bus）メモリやＳＤカード等のフラッシュメモリが挙げられる。なお、ＣＤとしては、ＣＤ−ＲＯＭ、ＣＤ−Ｒ（CD-Recordable）、ＣＤ−ＲＷ（CD-Rewritable）等が挙げられる。また、ＤＶＤとしては、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【０１５４】
並列計算機システム１の管理者等は、記録媒体に格納された制御プログラムを読出装置により読み出し、各ノード２に設定（インストール）することで、並列計算機システム１を実現することができる。
【０１５５】
〔３〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【０１５６】
（付記１）
各々がデータを有する複数の葉ノードと、自ノードに接続された前記葉ノードのデータを用いて所定の演算を行なう１以上の中継ノードと、自ノードに接続された前記葉ノードのデータと前記中継ノードによる前記所定の演算の演算結果とを用いて前記所定の演算を行なうルートノードと、をそなえる情報処理システムの制御プログラムであって、
前記中継ノードのプロセッサに、前記中継ノードのルートノード側に接続された上流ノードへ前記演算結果を送信するための所定の指示を、前記中継ノードにおける前記所定の演算の実行前にキューに設定する処理を実行させ、
前記中継ノードに接続された前記葉ノードに、前記葉ノードが有するデータを含む前記中継ノードへの指示を生成させ、生成した前記指示を前記中継ノードへ送信する処理を実行させ、
前記中継ノードのインタフェース部に、前記葉ノードから受信した前記指示に含まれる前記データに基づき前記所定の指示に含まれる前記演算結果に対して前記所定の演算を行なう処理を実行させることを特徴とする、情報処理システムの制御プログラム。
【０１５７】
（付記２）
前記インタフェース部に、
前記中継ノードに接続された各葉ノードから受信した前記指示に基づく前記所定の演算が完了するまでは、前記所定の指示の送信を保留し、
前記各葉ノードから受信した前記指示に基づく前記所定の演算が完了すると、前記所定の指示を前記上流ノードへ送信する処理を実行させることを特徴とする、付記１記載の情報処理システムの制御プログラム。
【０１５８】
（付記３）
前記インタフェース部に、
前記指示を受信すると前記所定の指示に含まれる前記演算結果を前記キューから読み出し、
読み出した前記演算結果に対して前記指示に含まれる前記データを用いた前記所定の演算を行ない、
前記所定の演算を行なった前記演算結果を前記キューに設定された前記所定の指示に書き込む処理を実行させることを特徴とする、付記１又は付記２記載の情報処理システムの制御プログラム。
【０１５９】
（付記４）
前記プロセッサに、前記中継ノードにおける前記所定の演算の実行前に前記所定の指示を前記キューに設定すると、前記所定の指示のアドレスに関する情報を前記インタフェース部を介して前記葉ノードへ送信する処理を実行させることを特徴とする、付記１〜３のいずれか１項記載の情報処理システムの制御プログラム。
【０１６０】
（付記５）
各々がデータを有する複数の葉ノードのうちの自ノードに接続された前記葉ノードのデータを用いて所定の演算を行ない、前記所定の演算の演算結果をルートノードへ送信する中継ノードとしての情報処理装置であって、
前記情報処理装置のルートノード側に接続された上流ノードへの指示を格納するキューと、
前記上流ノードへ前記演算結果を送信するための所定の指示を、前記情報処理装置における前記所定の演算の実行前に前記キューに設定するプロセッサと、
前記葉ノードから受信した指示に含まれる前記葉ノードが有するデータに基づき、前記所定の指示に含まれる前記演算結果に対して前記所定の演算を行なうインタフェース部と、をそなえることを特徴とする、情報処理装置。
【０１６１】
（付記６）
前記インタフェース部は、前記情報処理装置に接続された各葉ノードから受信した前記指示に基づく前記所定の演算が完了するまでは、前記所定の指示の送信を保留し、前記各葉ノードから受信した前記指示に基づく前記所定の演算が完了すると、前記所定の指示を前記上流ノードへ送信することを特徴とする、付記５記載の情報処理装置。
【０１６２】
（付記７）
前記インタフェース部は、前記指示を受信すると前記所定の指示に含まれる前記演算結果を前記キューから読み出し、読み出した前記演算結果に対して前記指示に含まれる前記データを用いた前記所定の演算を行ない、前記所定の演算を行なった前記演算結果を前記キューに設定された前記所定の指示に書き込むことを特徴とする、付記５又は付記６記載の情報処理装置。
【０１６３】
（付記８）
前記プロセッサは、前記情報処理装置における前記所定の演算の実行前に前記所定の指示を前記キューに設定すると、前記所定の指示のアドレスに関する情報を前記インタフェース部を介して前記葉ノードへ送信することを特徴とする、付記５〜７のいずれか１項記載の情報処理装置。
【０１６４】
（付記９）
各々がデータを有する複数の葉ノードと、
自ノードに接続された前記葉ノードのデータを用いて所定の演算を行なう１以上の中継ノードと、
自ノードに接続された前記葉ノードのデータと前記中継ノードによる前記所定の演算の演算結果とを用いて前記所定の演算を行なうルートノードと、をそなえ、
前記中継ノードは、前記中継ノードのルートノード側に接続された上流ノードへ前記演算結果を送信するための所定の指示を、前記中継ノードにおける前記所定の演算の実行前にキューに設定するプロセッサをそなえ、
前記中継ノードに接続された前記葉ノードは、前記葉ノードが有するデータを含む前記中継ノードへの指示を生成して、生成した前記指示を前記中継ノードへ送信し、
前記中継ノードは、前記葉ノードから受信した前記指示に含まれる前記データに基づき前記所定の指示に含まれる前記演算結果に対して前記所定の演算を行なうインタフェース部をさらにそなえることを特徴とする、情報処理システム。
【０１６５】
（付記１０）
前記インタフェース部は、前記中継ノードに接続された各葉ノードから受信した前記指示に基づく前記所定の演算が完了するまでは、前記所定の指示の送信を保留し、前記各葉ノードから受信した前記指示に基づく前記所定の演算が完了すると、前記所定の指示を前記上流ノードへ送信することを特徴とする、付記９記載の情報処理システム。
【０１６６】
（付記１１）
前記インタフェース部は、前記指示を受信すると前記所定の指示に含まれる前記演算結果を前記キューから読み出し、読み出した前記演算結果に対して前記指示に含まれる前記データを用いた前記所定の演算を行ない、前記所定の演算を行なった前記演算結果を前記キューに設定された前記所定の指示に書き込むことを特徴とする、付記９又は付記１０記載の情報処理システム。
【０１６７】
（付記１２）
前記プロセッサは、前記中継ノードにおける前記所定の演算の実行前に前記所定の指示を前記キューに設定すると、前記所定の指示のアドレスに関する情報を前記インタフェース部を介して前記葉ノードへ送信することを特徴とする、付記９〜１１のいずれか１項記載の情報処理システム。
【符号の説明】
【０１６８】
１    並列計算機システム
１ａ    バス
２，２−１〜２−９    ノード
２ａ    ルートノード
２ｂ    中継ノード
２ｃ    葉ノード
２１    ＣＰＵ
２１０，２３０    ルートノード処理部
２１２，２３２    中継ノード処理部
２１４，２３４    葉ノード処理部
２２，２３ｂ    メモリ
２２ａ    ＴＯＱ
２２ｂ    ＭＲＱ
２３    ＮＩＣ
２３ａ    処理部
【図１】
0006464739.tif 000002
【図２】
0006464739.tif 000003
【図３】
0006464739.tif 000004
【図４】
0006464739.tif 000005
【図５】
0006464739.tif 000006
【図６】
0006464739.tif 000007
【図７】
0006464739.tif 000008
【図８】
0006464739.tif 000009
【図９】
0006464739.tif 000010
【図１０】
0006464739.tif 000011
【図１１】
0006464739.tif 000012
【図１２】
0006464739.tif 000013
【図１３】
0006464739.tif 000014
【図１４】
0006464739.tif 000015
【図１５】
0006464739.tif 000016
【図１６】
0006464739.tif 000017
【図１７】
0006464739.tif 000018
【図１８】
0006464739.tif 000019
【図１９】
0006464739.tif 000020