(57)【要約】【課題】ビット拡張を行なうことなく高精度な集団平均演算を実現できるようにする。【解決手段】複数の情報処理装置を備える並列計算機システムにおいて、第１の情報処理装置が、１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部８２と、待ち合わせた演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部１０３１と、算出した平均値を第２の情報処理装置に送信する送信部１０４とを備える。【選択図】図４
2020035058.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置を備える並列計算機システムのうちの第１の情報処理装置であって、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する送信部と
を備える、情報処理装置。
【請求項２】
前記待ち合わせ処理部により待ち合わせが行なわれる前記他の情報処理装置からの演算対象データが、前記他の情報処理装置において算出された前記平均値である、請求項１記載の情報処理装置。
【請求項３】
前記送信部によって送信された前記平均値が、前記第２の情報処理装置において、前記演算対象データとして用いられる、請求項１または２記載の情報処理装置。
【請求項４】
前記演算処理部が、
２＾ｎ個（ｎは１以上の自然数）の前記演算対象データの加算を行ない、当該加算による加算値に対してｎビットシフトを行なって下位のｎビットを除いた上位ビットを抽出することで平均演算を行なう、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
複数の情報処理装置を備える並列計算機システムにおいて、
前記複数の情報処理装置のうちの第１の情報処理装置が、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する送信部と
を備える、並列計算機システム。
【請求項６】
複数の情報処理装置を備える並列計算機システムを構成する情報処理装置の制御方法であって、
前記複数の情報処理装置のうちの第１の情報処理装置により、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう処理と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する処理と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する処理と
を備える、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置，並列計算機システムおよび制御方法に関する。
【背景技術】
【０００２】
複数のノードを備え、これらのノードを並列に用いて計算を行なう並列計算機システムにおいて、リダクション演算を行なうことが知られている。
【０００３】
リダクション演算は、複数のプロセスが持つデータを対象とした演算であり、例えば、データの総和を求める演算や、最大値、最小値を求める演算等が知られている。
【０００４】
図１０はリダクション演算を説明するための図である。
【０００５】
この図１０に示す例においては、４つのノード＃０〜＃３が有するデータの総和を求めるリダクション演算を示している。すなわち、ノード＃０，＃１，＃２，＃３がそれぞれ有するデータ“1”，“7”“13”，“19”の総和“40”を算出する例を示している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１２２８４８号公報
【特許文献２】特開２０１２−１２８８０８号公報
【特許文献３】特開２０１２−５８９５８号公報
【特許文献４】特開２００７−２５７２６９号公報
【特許文献５】特開平２−７２４８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の並列計算機システムにおいて、複数ノードのデータの総和演算を行なう場合に、計算をする度に桁上がり分の領域を拡張していかないと上位ビットが桁あふれ（オーバフロー）によって消えてしまう場合がある。
【０００８】
図１１は従来の並列計算機システムにおける総和演算を説明するための図である。
【０００９】
この図１１においては、各ノード＃０〜＃３のリダクション加算器が5bitである例を示す。5bitで表現できる数字は0〜31である。
【００１０】
ノード＃０，＃１，＃２，＃３がそれぞれ有するデータ“1”，“7”“13”，“19”の総和を（1+7）+（13+19）のように２つに分割して計算する場合について考える。
【００１１】
1+7=8であり、この“8”を二進数で表すと“1000”であるので、5bitのリダクション加算器でもそのまま取り扱うことができる。これに対して、13+19=32である。この“32”を二進数で表記すると“100000”となり、5bitのリダクション加算器では表現可能な範囲を超えているので、桁あふれが発生し、最上位ビットの“1”が落ちて、演算結果として“0（00000）”が出力される。
【００１２】
すなわち、ノード＃２のデータ“13”とノード＃３のデータ“19”との合計を算出するに際して、合計“32”が得られるべきところを上位ビットの桁あふれが生じ、“0”となる。これにより、各データの総和は1+7+13+19=8と出力され、演算結果に誤りが生じる。
【００１３】
また、このような従来の並列計算機システムにおいて、各ノードのデータの平均を算出する平均演算を行なう場合に、各ノードのデータの総和を最後にノード数で除算して求める。
【００１４】
なお、平均演算は、このようにノード間で総和を算出した後にローカルにプロセス数で割り算することで処理可能であるので、ＭＰＩ（Message Passing Interface）等のソフトウェアインターフェースでは、プロセス間集団通信に関する平均の定義は無い。
【００１５】
図１０に示した各ノード＃０，＃１，＃２，＃３がそれぞれ有するデータ“1”，“7”，“13”，“19”の総和“40”をノード数“4”で除算すると、40/4=10となる。
【００１６】
一方、図１１に示した桁あふれによる誤りが生じた結果の総和演算の結果“8”をノード数“4”で除算すると、8/4=2となり、正しい平均値（本例では“10”）との間で誤差（本例では“8”）が生じる。
【００１７】
このような桁あふれを原因とする誤りの発生を防止すべく、計算を行なう度に桁上がり分の領域を拡張する手法が知られている。すなわち、加算するたびに1bitずつ拡張することで桁あふれを回避する。
【００１８】
図１２は従来の並列計算機システムにおける領域拡張を伴う総和演算を説明するための図である。
【００１９】
この図１２においては、合計の計算を行なう度に１ビット分の領域拡張（ビット拡張）を行なうことで、桁あふれの発生を阻止している。
【００２０】
しかしながら、このように計算を行なう度にビット拡張を行なうことで、転送データ量が増加し、帯域を消費するという課題がある。
【００２１】
例えば、1024個のノードの総和を求める場合には、5bitの演算領域に対して10bitのビット拡張を行なうことで、リダクション演算における後続するステージのノードに対して、15bitのパケット通信が発生し、通信帯域が浪費される。
【００２２】
１つの側面では、本発明は、ビット拡張を行なうことなく高精度な集団平均演算を実現できるようにすることを目的とする。
【課題を解決するための手段】
【００２３】
このため、この情報処理装置は、複数の情報処理装置を備える並列計算機システムのうちの第１の情報処理装置であって、前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部と、待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部と、算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する送信部とを備える。
【発明の効果】
【００２４】
一実施形態によれば、ビット拡張を行なうことなく高精度な集団平均演算を実現できる。
【図面の簡単な説明】
【００２５】
【図１】実施形態の一例としての並列計算機システムの構成を例示する図である。
【図２】実施形態の一例としての並列計算機システムにおけるノードのハードウェア構成を例示する図である。
【図３】実施形態の一例としての並列計算機システムのノードにおける演算制御装置の構成を例示する図である。
【図４】実施形態の一例としての並列計算機システムのノードにおける演算制御部の構成を例示する図である。
【図５】実施形態の一例としての並列計算機システムにおける平均演算を説明するための図である。
【図６】実施形態の一例としての並列計算機システムにおける演算器をハードウェア記述言語で表した例を示す図である。
【図７】実施形態の一例としての並列計算機システムにおける平均演算の処理例を示す図である。
【図８】実施形態の一例としての並列計算機システムにおける処理ツリーを例示する図である。
【図９】実施形態の一例としての並列計算機システムの演算制御部によるリダクション演算処理を説明する処理フローである。
【図１０】リダクション演算を説明するための図である。
【図１１】従来の並列計算機システムにおける総和演算を説明するための図である。
【図１２】従来の並列計算機システムにおける領域拡張を伴う総和演算を説明するための図である。
【発明を実施するための形態】
【００２６】
以下、図面を参照して本情報処理装置，並列計算機システムおよび制御方法にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００２７】
（Ａ）構成
図１は実施形態の一例としての並列計算機システム１の構成を例示する図である。
【００２８】
この図１に例示する並列計算機システム１においては、複数（図１においては９個を図示）のノード１０を伝送路１１を介して格子状に接続することで二次元メッシュネットワークが構成されている。並列計算機システム１は、相互結合網として構成され、格子の交点位置にノード１０が配置されている。
【００２９】
ノード１０は、本並列計算機システム１において、ジョブの配置単位となるプロセッサの集合であり、例えば、情報処理装置（コンピュータ）である。
【００３０】
図２は実施形態の一例としての並列計算機システム１におけるノード１０のハードウェア構成を例示する図である。
【００３１】
ノード１０は、図２に示すように、ＣＰＵ（Central Processing Unit）１０１および演算制御装置１０２を備える。
【００３２】
ＣＰＵ１０１は、ノード１０全体を制御する。ＣＰＵ１０１は、複数の演算コアを備えたマルチコアプロセッサであってもよい。また、ノード１０においては、複数のＣＰＵ１０１を備えることで構成されたマルチプロセッサであってもよい。
【００３３】
また、ＣＰＵに代えて、ＭＰＵ（Micro Processing Unit），ＤＳＰ（Digital Signal Processor），ＡＳＩＣ（Application Specific Integrated Circuit），ＰＬＤ（Programmable Logic Device），ＦＰＧＡ（Field Programmable Gate Array）のいずれか一つであってもよい。また、ＣＰＵ１０１に代えて、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００３４】
ＣＰＵ１０１は、ノード１０に備えられた図示しないメモリに、ＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部を一時的に格納（展開）し、これらのプログラムを実行することで、種々の機能を実現する。
【００３５】
ＯＳプログラムやアプリケーションプログラム、およびこれらのプログラムの実行に用いられる各種データは、ＨＤＤやＳＳＤ，ＳＣＭ等の図示しない補助記憶装置に格納される。ＨＤＤはHard Disk Driveの略称である。ＳＳＤはSolid State Driveの略称である。ＳＣＭはStorage Class Memoryの略称である。
【００３６】
また、ノード１０は図示しないネットワークインタフェースを備える。ネットワークインタフェースは、伝送路１１を介して、他のノード１０または通信機器との間でデータの送受信を行なう。ネットワークインタフェースはインタコネクトであってもよい。ネットワークインタフェースは演算制御装置１０２を備える。例えば、演算制御装置１０２はＮＩＣ（Network Interface Card）に備えられてもよい。
【００３７】
演算制御装置１０２は、演算処理および同期制御を行なう。本並列計算機システム１においては、演算制御装置１０２は、平均演算およびバリア同期制御を行なう。
【００３８】
図３は実施形態の一例としての並列計算機システム１のノード１０における演算制御装置１０２の構成を例示する図である。
【００３９】
演算制御装置１０２は、図３に示すように、演算制御部１０３，送信部１０４，受信部１０５，ノード要求部１０６およびノード通知部１０７を備える。
【００４０】
送信部１０４および受信部１０５は、当該演算制御装置１０２が備えられたノード１０（以下、自ノード１０という場合がある）に伝送路１１を介して接続された他のノード１０（以下、他ノード１０という場合がある）との間でデータ等の送受信を行なう。
【００４１】
送信部１０４は他のノード１０に対してデータ等の送信を行なうものであり、データをパケットとして送信する。受信部１０５は他のノード１０から送信されるデータ等を受信するものであり、データをパケットとして受信する。
【００４２】
ノード要求部１０６およびノード通知部１０７は、自ノード１０に備えられたＣＰＵ１０１との間でデータ等の送受信を行なう。
【００４３】
ノード要求部１０６は、自ノード１０のＣＰＵ１０１からの演算指示やデータ等を受信するものであり、データをパケットとして受信する。ノード通知部１０７は、自ノード１０のＣＰＵ１０１に対して演算結果やデータ等を送信するものであり、データをパケットとして送信する。
【００４４】
演算制御部１０３は演算処理および同期処理を行なう。
【００４５】
図４は実施形態の一例としての並列計算機システム１のノード１０における演算制御部１０３の構成を例示する図である。
【００４６】
演算制御部１０３は、図４に示すように、演算器１０３１，制御回路１０３２，マルチプレクサ（ＭＵＸ：multiplexer）１０３３，デマルチプレクサ（ＤＥＭＵＸ：demultiplexer）１０３４，演算リソース１０３５および同期部８２を備える。
【００４７】
演算制御部１０３は、バタフライによりバリア同期を行ないつつ平均演算を行なう。
【００４８】
平均演算の第１の対象データは、ＣＰＵ１０１からノード要求部１０６を介して入力され、マルチプレクサ１０３３に入力される。平均演算の第２の対象データは、伝送路１１から受信部１０５を介してパケットとして入力され、マルチプレクサ１０３３に入力される。
【００４９】
一方、平均演算の結果は、デマルチプレクサ１０３４からノード通知部１０７を介してＣＰＵ１０１に出力される。また、平均演算の結果は、デマルチプレクサ１０３４から送信部１０４に出力され、この送信部１０４から伝送路１１へパケットとして送信される。これにより、伝送路１１に接続された他ノード１０に平均演算の結果が伝送される。
【００５０】
平均演算を実行するために、ＣＰＵ１０１は、図示しないキーボード等の入出力装置から入力された設定条件に従って、演算制御部１０３における第１の同期信号の送信先及び第２の同期信号の送信先を、演算制御部１０３に設定してもよい。
【００５１】
また、ＣＰＵ１０１は、平均演算の開始時に演算制御装置１０２に対して演算対象のデータを送信し、また、演算制御装置１０２から平均演算結果を受信する。このように、演算制御装置１０２は、伝送路１１を介して、他のノード１０の演算制御装置１０２との間で通信を行ない、当該通信に基づいて、平均演算を行なう。
【００５２】
更に、平均演算を実行するために、演算制御装置１０２の備える同期部８２は、同期成立の後に、第２の同期信号の送信を送信部１０４に指示（図示「パケット送信指示」）すると共に、予め定められた平均演算を制御回路１０３２に指示する。ノード通知部１０７は、第２の同期信号送信の指示を受信した場合、第２の同期信号と共に、演算器１０３１における平均演算の結果をＣＰＵ１０１に送信する。
【００５３】
同期部８２は、設定条件に従って、伝送路１１を介して、他のノード１０の同期部８２との間で通信を行ない、当該通信に基づいて、バリア同期を行なう。すなわち、同期部８２は、他のノード１０からの演算対象データの待ち合わせを行なう待ち合わせ処理部に相当する。
【００５４】
バリア同期を行なう複数のプロセスは、その処理が同期をとるポイントつまりバリアポイントに到着した場合、自身の処理を停止する。即ち、複数のプロセスは自身がバリアポイントに到達した場合、各々、他のプロセスがバリアポイントに到着するのを待ち合わせる。複数のプロセスは、各々、バリア同期を行なう全てのプロセスがバリアポイントに到着した時点で、即ち、バリア同期が成立した時点で、停止した処理を再開する。これにより、並列処理されている複数のプロセス間で、並列処理の同期をとることができる。
【００５５】
このようなバリア同期を実現するアルゴリズムの一つに、バタフライ演算がある。バタフライ演算を単にバタフライと称してもよい。バタフライにおいては、処理を複数のステージに分割し、ステージ毎に他のプロセスと信号の通信を行なう。この例においては、バリア同期のアルゴリズムとして、バタフライを用いてもよい。
【００５６】
同期部８２は、制御レジスタ８２２に、タイプレジスタを備える。タイプレジスタは、演算器１０３１における平均演算の制御のために、演算の種類を示す情報を格納してもよい。タイプレジスタに格納される情報も、設定条件の一部として、図示しない入出力装置から入力されてもよい。
【００５７】
ここで、平均演算について簡単に説明する。平均演算は、バリア同期と同一のアルゴリズムを用いて実行することができる。即ち、平均演算は、バタフライによるバリア同期を実行するバタフライネットワークにより実行することができる。
【００５８】
従って、平均演算は、処理を複数のステージに分割し、各プロセスはステージ毎に他のプロセスと信号の通信を行なう。１個のノード１０上で１個のプロセスが動作する場合、プロセスとノード１０とは同一と考えて良い。各ステージにおけるプロセスの処理及び送信先は、基本的に、バリア同期と同じである。
【００５９】
平均演算の最初のステージ＃１においては、各プロセスは、演算の対象となるデータを次のステージ＃２のプロセスに送信する。ステージ＃２において各プロセスは、前のステージ＃１のプロセスからのデータを受信した場合、例えば、自身が持っているデータとの加算を行ない、演算結果を次のステージ＃３のプロセスに送信する。最後のステージ＃３において各プロセスは、前のステージ＃２のプロセスからデータを受信した場合、例えば、受信したデータと前のステージ＃２での自身の演算結果との平均演算を行なう。この平均演算の結果が、集団平均演算の結果となる。
【００６０】
平均演算は、例えば、以下のように行なわれる。
【００６１】
ＣＰＵ１０１は、平均演算の対象となる各組に対応する制御レジスタ８２２に、設定条件に基づいて、次ステージの宛先ノードアドレス、制御レジスタ番号等を設定する。この後、ＣＰＵ１０１は、入力データ及び平均同期開始信号を演算制御装置１０２に送信する。これにより、演算制御装置１０２（演算制御部１０３）による平均演算が開始される。最後のステージに対応した制御レジスタ８２２において同期が成立した場合、演算制御装置１０２は、演算結果と平均演算完了の信号とを、ＣＰＵ１０１に送る。
【００６２】
受信部１０５は伝送路１１を介してパケットを他ノード１０から受信し、受信したパケットに基づいて、同期信号及び宛先との組を同期信号を同期部８２に送信し、パケットとして受信したデータを演算制御部１０３に送信する。
【００６３】
演算制御部１０３において、データが「リードデータ」としてマルチプレクサ１０３３を介して、演算器１０３１に入力される。ＣＰＵ１０１からのデータは、例えば、平均演算の開始時に入力される。
【００６４】
平均演算中のデータは、図示しない記憶装置に格納される。これにより、記憶装置は、平均演算中のデータを保持する。記憶装置の記憶容量は、例えば、（制御レジスタ８２２の数）×（データのビット数）とされる。平均演算中のデータを保持すべき記憶装置のアドレスは、制御回路１０３２からライトアドレスにより指定される。記憶装置のライトアドレスは、当該平均演算に用いられる制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。
【００６５】
記憶装置に格納された平均演算中のデータは、制御回路１０３２からリードアドレスを指定することにより、読み出されて演算器１０３１に入力される。記憶装置のリードアドレスは、当該平均演算に用いられる制御レジスタ８２２に対応し、当該制御レジスタ８２２の制御レジスタ番号に基づいて生成される。
【００６６】
同期部８２の制御部８２１は、制御レジスタ８２２の宛先レジスタの値（Destination）を参照し、宛先レジスタにおいて他ノード１０が指定されている場合に、送信部１０４に対してパケット送信指示の信号を出し、送信部１０４に対しデータを送る。送信部１０４に送られるデータは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には演算器１０３１からの演算結果である。入力データレジスタの値を送信部１０４に送信する場合、制御部８２１は、演算指示としてバイパスを指定する。
【００６７】
一方、宛先レジスタにおいて自プロセス又は自ノードの制御レジスタ８２２を指定されている場合には、制御部８２１は、自プロセス又は自ノードの同期部８２に同期信号を送るため、宛先レジスタにおいて指定された制御レジスタ８２２のシグナルレジスタの値（Signal）を読み出す。
【００６８】
シグナルレジスタに同期成立を示す情報（例えば「１」）が設定されていない場合には、制御部８２１は、シグナルレジスタに「１」を設定し、データを記憶装置の制御レジスタ８２２に対応するアドレスに格納する。データは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には前ステージの演算結果である。
【００６９】
マルチプレクサ１０３３は、制御回路１０３２からの入力部選択の指示に従って、受信部１０５からのデータ、又は、ノード要求部１０６からのデータを選択して、制御回路１０３２又は演算器１０３１に入力する。入力部選択の指示は、例えば、受信部１０５から同期信号及び宛先が入力された場合には、受信部１０５のデータをマルチプレクサ１０３３に出力し、これ以外の場合には、ノード要求部１０６からのデータをマルチプレクサ１０３３に出力してもよい。
【００７０】
演算器１０３１は、記憶装置で待ち合わせているデータと、マルチプレクサ１０３３を介して入力されるパケットからのデータ又は先の演算結果とについて、平均演算を行なう。即ち、演算器１０３１は、制御回路１０３２からの指示を受信した場合、記憶装置に記憶されたデータを用いて、平均演算を行なう。具体的には、演算器１０３１は、制御回路１０３２からの演算指示に従って、平均演算を実行して、その結果を、デマルチプレクサ１０３４に入力する。
【００７１】
演算器１０３１は、例えば記憶装置から入力するデータつまり第１データと、受信部１０５が受信したパケットからのデータ又は演算器１０３１が前ステージで行なった演算結果つまり第２データとの間で、平均演算を行なう。
【００７２】
演算制御部１０３は、2^n 個の演算対象データ（演算対）の加算を行ない、この加算値に対してn bit shift（nビットシフト）を行なって、下位nビットを除いた上位ビットを抽出することで、平均演算を実現する。なお、nは1以上の自然数である。
【００７３】
すなわち、演算制御部１０３は、大規模ノードによる平均演算を2^n個のグループに分割し、それぞれのグループで演算された結果を更に次の段で構成したグループで演算するという操作を繰り返すことによって最終的な全ノード１０の平均値を作成する。このように、演算器１０３１は、待ち合わせた演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部に相当する。
【００７４】
以下、n=1の例について示す。すなわち、演算制御部１０３は、２つのパケット（2packet）を待ち合せ演算し、2packetを出力する機能を有する。
【００７５】
なお、パケットの待ち合わせは、例えば、バタフライによるバリア同期等、既知の種々の手法を用いて実現することができる。
【００７６】
演算リソース１０３５は、例えば、グループ定義や待ち合わせ中の中間データである。
【００７７】
2packetを待ち合せる設定においては演算器１０３１による演算を行ない、2packetを待ち合せない設定においては、そのまま転送する。
【００７８】
パケットにはＩＤ（identification）が埋め込まれ、演算制御部１０３内でどのパケットが組になり演算されるかを識別することができる。
【００７９】
受信部１０５から届いたパケットは、先行パケットが無ければそのまま保存され、対になるパケットを待ち合せる。演算器１０３１において、受信部１０５から届いたパケットは先行パケットがあれば対になる先行パケットと届いたパケットにて平均演算を行なう。
【００８０】
平均演算の結果は、送信部１０４に転送され、他ノード１０、すなわち、後続するステージの演算制御部１０３に向けて転送される。最終結果が得られた場合は、ノード通知部１０７からＣＰＵ１０１に対して通知を行ない処理を終了する。
【００８１】
図５は実施形態の一例としての並列計算機システム１における平均演算を説明するための図である。
【００８２】
この図５に示す例においては、各ノード＃０〜＃３の演算器１０３１がそれぞれ5bitであり、ノード＃０，＃１，＃２，＃３がそれぞれデータ“1”，“7”“13”，“19”を有する。
【００８３】
なお、ノード＃０〜＃３において、符号＃に後続する数字はノード１０を特定するノード識別番号である。
【００８４】
本並列計算機システム１においては、ノード＃０のデータ“1”とノード＃１のデータ“7”とを用いて、(1+7)/2を演算することで、平均値（途中平均値）“4”を算出する。また、ノード＃２のデータ“13”とノード＃３のデータ“19”とを用いて、(13+19)/2を演算することで、途中平均値“16”を算出する。
【００８５】
そして、これらの途中平均値“4”，“16”を用いて(4+16)/2を演算することで、平均値“10”を算出する。
【００８６】
すなわち、ノード＃０，＃１，＃２，＃３のデータ“1”，“7”“13”，“19”の平均を、((1+7)/2 + (13+19)/2)/2として計算する。
【００８７】
また、演算器１０３１は、途中平均値および平均値を算出するに際して、2^n 個の演算対のデータの加算値に対して、n bit shift（nビットシフト）を行なって下位ビットの切り捨てを行なうことで除算を実現する。
【００８８】
本実施形態においては、それぞれ５ビットの２進数で表した２つのデータの加算値に対して1bit shift（１ビットシフト）を行なって最下位ビットの切り捨てを行なうことで２での除算を実現する。
【００８９】
図５に示す例においては、“1（00001）”と“7（00111）”との加算値“8（01000）”を1bit shiftして最下位ビットの“0”を切り捨てることで、途中平均値“4（00100）”を算出している。
【００９０】
同様に、“13（01101）”と“19（10011）”との加算値“32（100000）”を1bit shiftして最下位ビットの“0”を切り捨てることで、途中平均値“16（10000）”を算出している。
【００９１】
そして、最後に、“4（00100）”と“16（10000）”との加算値“20（010100）”を1bit shiftして最下位ビットの“0”を切り捨てることで、平均値“10（01010）”を算出している。すなわち、(4+16)/2=10の計算をして平均値を得ることが出来る。
【００９２】
本並列計算機システム１における平均演算によれば、各ステージの演算を行なう毎にビット拡張を行なう必要がなく、演算規模に応じて必要bit数が増加することがないので、ノード１０間のパケット通信の帯域を浪費することがない。
【００９３】
なお、(1+8)のように、２つデータの加算値が奇数になる場合は、１ビットシフトを行なうことで最下位ビットが落ちるために完全な精度を保証するものではない。しかしながら、１ビットシフトによる最下位ビット落ちは、桁あふれによる上位ビット落ちと比較して誤差は格段に小さい。例えばn=1の場合、誤差は0.5以下であることが保障可能である。また、低次精度で良い計算であってハードウェア資源を可能な限り節約したいような需要に答えることが可能である。
【００９４】
図６は実施形態の一例としての並列計算機システム１における演算器１０３１をハードウェア記述言語で表した例を示す図である。
【００９５】
この図６に例示する演算回路は、５ビットの平均操作を保障するものであり、６ビットの加算器（work[5:0]）を有する。この６ビットの加算器において５ビットの２つの入力（input A，input B）を加算している（符号Ｐ１参照）。そして、この加算器による演算結果の上位５ビットの切り出しを行ない、次ステージにはこの５ビットのみを受け継ぐことで、１ビットシフトを実現している（符号Ｐ２参照）。
【００９６】
なお、この図６に示す例においては、符号なし整数を対象と想定して記述しているが、これに限定されるものではなく、符号有り整数等について実装してもよい。
【００９７】
デマルチプレクサ１０３４は、演算器１０３１からの入力を、送信部１０４またはノード通知部１０７に出力する。
【００９８】
デマルチプレクサ１０３４は、例えば、制御回路１０３２等から出力部選択の指示に従って出力先を選択してもよい。出力部選択の指示は、平均演算が完了する以前には、演算器１０３１からのデータを送信部１０４に出力し、これ以外の場合には、ノード通知部１０７に出力してもよい。
【００９９】
ノード通知部１０７は、平均演算の結果（平均値，途中平均値）を、ＣＰＵ１０１に出力する。ノード通知部１０７から出力される平均演算の結果は、平均演算の完了時にＣＰＵ１０１に入力される。
【０１００】
送信部１０４は、演算制御部１０３のデマルチプレクサ１０３４から、演算結果、パケット送信指示で指定された宛先ノードアドレス、制御レジスタ番号を受信した場合、これらに基づいて、パケットを生成し、生成したパケットを伝送路１１へ送信する。
【０１０１】
例えば、制御回路１０３２は、ステージ毎に演算の中間結果である途中平均値の送信先を変更する処理を行なってもよい。制御回路１０３２は、同期信号及び制御レジスタ番号を受信部１０５から受信した場合、受信した制御レジスタ番号に対応する制御レジスタに同期信号を送信してもよい。
【０１０２】
制御回路１０３２は、同期が成立した場合、送信部１０４へ同期信号の送信指示を出す。この時、制御回路１０３２は、自プロセス又は自ノード１０内の指定された制御レジスタに同期信号を送信することに加えて、演算器１０３１を制御する。即ち、制御回路１０３２は、演算器１０３１に入力されているデータと、記憶装置で待ち合わせているデータとの間で、平均演算を行なわせる。一方、同期が成立していない場合、制御回路１０３２は、データを記憶装置に保持させる。
【０１０３】
自プロセス又は自ノード１０の指定された制御レジスタに同期信号を送信した場合において、同期が成立した場合、制御回路１０３２は、更に、演算結果と記憶装置で待ち合わせているデータとの平均演算を繰り返すよう演算器１０３１を制御する。一方、同期が成立しない場合、制御回路１０３２は、演算結果を記憶装置に送信する。
【０１０４】
制御回路１０３２は、平均演算開始の信号を受け取ると、指定された組つまり制御レジスタの送信先に、同期信号と入力されたデータとを送信する。この後、最後の組で同期が成立した場合、制御回路１０３２は、演算結果と平均演算完了の信号とを、ＣＰＵ１０１に送信する。
【０１０５】
（Ｂ）動作
図７は実施形態の一例としての並列計算機システム１における平均演算の処理例を示す図である。
【０１０６】
この図７に示す例においては、平均演算の処理を第１ステージ，第２ステージおよび第３ステージに分けて示す。また、複数のノード＃０〜＃３のうち、ノード識別番号が偶数であるノード＃０およびノード＃２が平均演算を行なう。
【０１０７】
第１ステージにおいて、ノード＃０およびノード＃１は、パケットにID=Aを載せてノード＃０のインタコネクトに送り付ける。ノード＃０においては、演算器１０３１がID=Aが付与されたノード＃０のデータとノード＃１のデータとを用いて平均演算を行なう。
【０１０８】
また、ノード＃２およびノード＃３は、パケットにID=Bを載せてノード＃２のインタコネクトに送り付ける。ノード＃２においては、演算器１０３１がID=Bが付与されたノード＃２のデータとノード＃３のデータとを用いて平均演算を行なう。
【０１０９】
第２ステージにおいて、ノード＃０およびノード＃２は、それぞれパケットにID=Cを載せてノード＃０のインタコネクトに送り付ける。ノード＃０においては、演算器１０３１がID=Cを付与されたノード＃２からのデータとノード＃０のデータとを用いて平均演算を行なう。
【０１１０】
また、ノード＃０およびノード＃２は、それぞれパケットにID=Dを載せてノード＃２のインタコネクトに送り付ける。ノード＃２においては、演算器１０３１がID=Dを付与されたノード＃０からのデータとノード＃２のデータとを用いて平均演算を行なう。
【０１１１】
第３ステージにおいて、ノード＃０は、ノード＃０およびノード＃１にパケットを送り演算結果を返却する。また、ノード＃２は、ノード＃２およびノード＃３にパケットを送り演算結果を返却する。
【０１１２】
図８は実施形態の一例としての並列計算機システム１における処理ツリーを例示する図である。この図８に例示する並列計算機システム１は、１６個のノード＃０〜ノード＃ｆを備える。そして、隣接するノード１０間でデータの平均値（途中平均値）をそれぞれ算出して伝達することで全体の平均値を算出（集団平均演算）し、算出した平均値を全ノード１０に伝達している。なお、図８中において白丸はそれぞれノード１０を示す。
【０１１３】
次に、上述の如く構成された実施形態の一例としての並列計算機システムの演算制御部１０３による平均演算処理を、図９に示す処理フロー（ステップＳ１〜Ｓ１３）に従って説明する。
【０１１４】
なお、図９においては、バタフライによるバリア同期を行ないつつ平均演算を行なう例を示している。
【０１１５】
ＣＰＵ１０１は、平均演算を開始する前に、平均演算を行なうノード数から使用する制御レジスタ８２２の数を決定し、各制御レジスタ８２２の宛先レジスタにバタフライでの次ステージに対応した宛先ノードアドレスと制御レジスタ番号とを、タイプレジスタに演算種類を設定する（ステップＳ１）。
【０１１６】
レジスタの設定は、以下のように行なわれる。ノード数が2のべき乗である場合、バタフライにおいては、同期成立の後、自プロセス又は自ノードの次ステージと他ノードでの次ステージの２箇所に対して、同期信号を送信する。従って、宛先レジスタに指定する宛先は、自プロセス又は自ノードの制御レジスタ番号と、他ノードの宛先ノードアドレス及び制御レジスタ番号とを含む。最初のステージにおいては、信号の待ち合わせを行なわないので、シグナルレジスタは使わず、最後のステージにおいては、宛先レジスタは使わない。そのため、最初と最後のステージにおいては同一の制御レジスタ８２２を指定する。
【０１１７】
ノード数が2のべき乗でない場合、追加ノードの中継ステージにあたる制御レジスタ８２２を、他のノードつまり追加ノードに設ける。追加ノードにおいて、最初のステージの制御レジスタ８２２と、最後のステージの制御レジスタ８２２とが、通信しないように設定する。更に、追加ノードの制御レジスタ８２２のタイプレジスタを通過（バイパス）に設定し、追加ノードに演算を行なわせないように設定する。
【０１１８】
ＣＰＵ１０１は、平均演算を開始するため、入力データを入力データレジスタへ送信し、平均演算開始信号を同期部８２に送信する（ステップＳ２）。平均演算開始信号は、入力レジスタ番号と、最初のステージに対応した制御レジスタ番号とを含む。
【０１１９】
同期部８２の制御部８２１は、平均演算開始の信号が送られると、平均演算開始信号で指定された制御レジスタ８２２の宛先レジスタの値（Destination）を読む（ステップＳ３）。
【０１２０】
宛先レジスタにおいて他ノード１０が指定されている場合、制御部８２１は、送信部１０４に対してパケット送信指示の信号を出し、送信部１０４に対しデータを送る。送信部１０４に送られるデータは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には演算器１０３１からの演算結果である。入力データレジスタの値を送信部１０４に送信する場合、演算指示としてバイパスを指定する。送信部１０４は、データと、パケット送信指示で指定された宛先ノードアドレス及び制御レジスタ番号とに基づいて、パケットを生成し、これを伝送路１１へ送信する。
【０１２１】
また、自プロセス又は自ノードの制御レジスタ８２２を指定されている場合、制御部８２１は、自プロセス又は自ノードの同期部８２に同期信号を送るため、宛先レジスタにおいて指定された制御レジスタ８２２のシグナルレジスタの値（Signal）を読む（ステップＳ４）。
【０１２２】
制御部８２１は、シグナルレジスタに「１」が設定されているか否かを調べる（ステップＳ５）。シグナルレジスタに「１」が設定されている場合（ステップＳ５のＹｅｓルート参照）、同期成立となる。一方、シグナルレジスタに「１」が設定されていない場合（ステップＳ５のＮｏルート参照）、同期は成立していない。
【０１２３】
同期が成立していない場合、制御部８２１は、シグナルレジスタに「１」を設定し、データを記憶装置の制御レジスタ８２２に対応するアドレスに格納する。データは、制御レジスタ８２２が最初のステージである場合には入力データレジスタの値であり、後続のステージである場合には前ステージの演算結果である。この後、制御部８２１は、他のプロセスからのパケットの受信を待ち合わせる（ステップＳ６）。
【０１２４】
受信部１０５は、他のプロセスからパケットを受信した場合、受信したパケットに基づいて、データ、同期信号、宛先となる制御レジスタ番号を取り出し、マルチプレクサ１０３３および同期部８２へ対応する情報を送信する（ステップＳ７）。
【０１２５】
同期部８２は、受信部１０５から同期信号、制御レジスタ番号を受信した場合、指定された制御レジスタ８２２のSignalの値を読取る（ステップＳ８）。この後、ステップＳ５以下を繰り返す。
【０１２６】
一方、ステップＳ５において同期が成立している場合（ステップＳ５のＹｅｓルート参照）、演算器１０３１は平均演算を行なう（ステップＳ９）。演算対象となるデータは、制御レジスタ８２２が最初のステージの次ステージに対応している場合には入力データレジスタの値である。また、制御レジスタ８２２がそれ以降のステージに対応しており、同期成立の要因がパケットからの同期信号である場合には、当該データはパケットに含まれるデータである。受信した同期信号が自プロセス又は自ノード１０の同期装置からの同期信号である場合、前ステージにおける演算結果と、同期が成立した制御レジスタ８２２に対応する記憶装置内のアドレスに格納するデータとの間で演算を行なう。受信した情報が演算結果の場合はタイプレジスタの値から演算の種類を指定する。
【０１２７】
更に、制御部８２１は、制御レジスタ８２２が最後のステージに対応したものか否かを調べる（ステップＳ１０）。
【０１２８】
最後のステージに対応する制御レジスタ８２２で同期が成立した場合（ステップＳ１０のＹｅｓルート参照）、制御部８２１は、演算結果を出力データレジスタに格納し、ＣＰＵ１０１に平均演算完了の信号を送信する（ステップＳ１１）。
【０１２９】
ＣＰＵ１０１は、制御部８２１からの平均演算完了の信号を受け取り、出力データレジスタから演算結果を読み取る（ステップＳ１２）。
【０１３０】
ステップＳ１０において制御レジスタ８２２が最後のステージに対応したものでない場合（ステップＳ１０のＮｏルート参照）、同期が成立した制御レジスタ８２２の宛先レジスタの値を読取る（ステップＳ１３）。この後、ステップＳ４以下の処理を繰り返す。
【０１３１】
（Ｃ）効果
このように、実施形態の一例としての並列計算機システム１によれば、集団平均演算を行なうに際して、各ノード１０の演算器１０３１が各ステージにおいて、2^n要素の加算の実行後にnビットシフトを行なうことで平均値（途中平均値）を算出する。
【０１３２】
例えば、n=1の場合に、２つのノード１０の処理対象データを加算した後に、この加算値（二進数）に対して１ビットシフトを行なうことで、平均値（途中平均値）を算出する。
【０１３３】
これにより、次ステージに転送するデータのビット数が削減され、ビット拡張を行なうことなく平均値を求めることができ、次ステージに正しい途中計算値を送信することができる。従って、ビット拡張を行なうことなく高精度な集団平均演算を実現することができる。
【０１３４】
そして、加算によるオーバフローを気にすることなくインタコネクトに集団平均演算をオフロードすることが出来る。
【０１３５】
（Ｄ）その他
上述した実施形態において、演算器１０３１としての機能は、例えば、ＮＩＣに搭載されたプロセッサがプログラムを実行することで実現してもよい。例えば、ＮＩＣに搭載されたプロセッサが図６に例示したハードウェア記述言語で記述されたプログラム等を実行することで演算器１０３１としての機能を実現してもよい。
【０１３６】
なお、演算器１０３１としての機能を実現するためのプログラム（演算制御プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてもよい。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【０１３７】
演算器１０３１としての機能を実現する際には、内部記憶装置（例えば、ＮＩＣに搭載されたメモリ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＮＩＣに搭載されたプロセッサ）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【０１３８】
プロセッサ（処理部）は、ＮＩＣにおける機能を制御する。プロセッサは、マルチプロセッサであってもよい。プロセッサは、例えばＣＰＵ（Central Processing Unit），ＭＰＵ（Micro Processing Unit），ＤＳＰ（Digital Signal Processor），ＡＳＩＣ（Application Specific Integrated Circuit），ＰＬＤ（Programmable Logic Device），ＦＰＧＡ（Field Programmable Gate Array）のいずれか一つであってもよい。また、プロセッサは、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【０１３９】
また、演算器１０３１としての機能を実現する回路装置をＮＩＣに備え、ハードウェアによって実現してもよい。
【０１４０】
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１４１】
例えば、上述した実施形態においては、2^n個の演算対象データの平均演算を行なうためにnビットシフトを行なう例としてn=1の場合について示しているが、これに限定されるものではない。すなわち、nは1以外の値であってもよく、種々変形して実施することができる。
【０１４２】
例えば、n=2の場合においては、演算器１０３１は、４つのノード１０のデータの加算を行なった後に、2ビットシフトを行ない、下位2ビットを除いた上位ビットを取得することで平均演算を行なってもよい。
【０１４３】
また、上述した実施形態においては、ノード１０のＮＩＣに演算制御装置１０２が備えられた例を示しているが、これに限定されるものではなく、種々変形して実施することができる。
【０１４４】
例えば、スイッチ等のノード１０が接続されるネットワーク中継装置に演算制御装置１０２としての機能を備えてもよい。
【０１４５】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【０１４６】
（Ｅ）付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１４７】
（付記１）
複数の情報処理装置を備える並列計算機システムのうちの第１の情報処理装置であって、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する送信部と
を備える、情報処理装置。
【０１４８】
（付記２）
前記待ち合わせ処理部により待ち合わせが行なわれる前記他の情報処理装置からの演算対象データが、前記他の情報処理装置において算出された前記平均値である、付記１記載の情報処理装置。
【０１４９】
（付記３）
前記送信部によって送信された前記平均値が、前記第２の情報処理装置において、前記演算対象データとして用いられる、付記１または２記載の情報処理装置。
【０１５０】
（付記４）
前記演算処理部が、
２＾ｎ個の前記演算対象データの加算を行ない、当該加算による加算値に対してｎビットシフトを行なって下位のｎビットを除いた上位ビットを抽出することで平均演算を行なう、付記１〜３のいずれか１項に記載の情報処理装置。
【０１５１】
（付記５）
複数の情報処理装置を備える並列計算機システムにおいて、
前記複数の情報処理装置のうちの第１の情報処理装置が、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう待ち合わせ処理部と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する演算処理部と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する送信部と
を備える、並列計算機システム。
【０１５２】
（付記６）
前記待ち合わせ処理部により待ち合わせが行なわれる前記他の情報処理装置からの演算対象データが、前記他の情報処理装置において算出された前記平均値である、付記５記載の並列計算機システム。
【０１５３】
（付記７）
前記第２の情報処理装置が、前記送信部によって送信された前記平均値を前記演算対象データとして用いる、付記５または６記載の並列計算機システム。
【０１５４】
（付記８）
前記演算処理部が、
２＾ｎ個の前記演算対象データの加算を行ない、当該加算による加算値に対してｎビットシフトを行なって下位のｎビットを除いた上位ビットを抽出することで平均演算を行なう、付記５〜７のいずれか１項に記載の並列計算機システム。
【０１５５】
（付記９）
複数の情報処理装置を備える並列計算機システムを構成する情報処理装置の制御方法であって、
前記複数の情報処理装置のうちの第１の情報処理装置により、
前記複数の情報処理装置のうちの１つ以上の他の情報処理装置からの演算対象データの待ち合わせを行なう処理と、
待ち合わせた前記演算対象データを含む複数の演算対象データの平均演算を行なって平均値を算出する処理と、
算出した前記平均値を、前記複数の情報処理装置のうちの前記他の情報処理装置と異なる第２の情報処理装置に送信する処理と
を備える、制御方法。
【０１５６】
（付記１０）
前記待ち合わせが行なわれる前記他の情報処理装置からの演算対象データが、前記他の情報処理装置において算出された前記平均値である、付記９記載の制御方法。
【０１５７】
（付記１１）
前記送信された前記平均値が、前記第２の情報処理装置において、前記演算対象データとして用いられる、付記９または１０記載の制御方法。
【０１５８】
（付記１２）
前記第１の情報処理装置により、
２＾ｎ個の前記演算対象データの加算を行ない、当該加算による加算値に対してｎビットシフトを行なって下位のｎビットを除いた上位ビットを抽出することで平均演算を行なう、付記９〜１１のいずれか１項に記載の制御方法。
【符号の説明】
【０１５９】
１    並列計算機システム
１０    ノード
１１    伝送路
８２    同期部
１０１    ＣＰＵ
１０２    演算制御装置
１０３    演算制御部
１０４    送信部
１０５    受信部
１０６    ノード要求部
１０７    ノード通知部
８２１    制御部
８２２    制御レジスタ
１０３１    演算器
１０３２    制御回路
１０３３    マルチプレクサ
１０３４    デマルチプレクサ
１０３５    演算リソース
【図１】
2020035058.tif 000003
【図２】
2020035058.tif 000004
【図３】
2020035058.tif 000005
【図４】
2020035058.tif 000006
【図５】
2020035058.tif 000007
【図６】
2020035058.tif 000008
【図７】
2020035058.tif 000009
【図８】
2020035058.tif 000010
【図９】
2020035058.tif 000011
【図１０】
2020035058.tif 000012
【図１１】
2020035058.tif 000013
【図１２】
2020035058.tif 000014