以下、図面を参照しながら本発明の実施形態について詳しく説明する。
図1は、本発明の一実施形態に係る並列計算システム10の構成図である。並列計算システム10は、複数の計算ノード100を備える。図1は、計算ノード100間の論理トポロジーを示している。各計算ノード100は、それぞれに割り当てられた所定の計算を他の計算ノード100と並列に実行するコンピュータである。図1の例において、並列計算システム10は、9台の計算ノード100、すなわち、計算ノードN0、計算ノードN1、計算ノードN2、計算ノードN3、計算ノードN4、計算ノードN5、計算ノードN6、計算ノードN7、および計算ノードN8から構成されている。しなしながら、計算ノード100の台数は一例にすぎず、任意の台数、例えば、数十台、数百台、あるいは数千台の計算ノード100が、並列計算システム10を構成してもよい。
各計算ノード100の間は、通信リンク20によって接続されている。通信リンク20は、それが接続する両端の計算ノード100が相互にデータを送受信することを可能にする伝送路である。通信リンク20は、電気信号または光信号の形態でデータを伝送する。通信リンク20は、有線でも無線でもよい。図1の例において、計算ノードN0は、他のすべての計算ノード100、すなわち、計算ノードN1、計算ノードN2、計算ノードN3、計算ノードN4、計算ノードN5、計算ノードN6、計算ノードN7、および計算ノードN8と通信リンク20によって接続されている。他の計算ノード100も同様に、自分以外のすべての計算ノード100と通信リンク20によって接続されている。このように、図1に例示された並列計算システム10では、各計算ノード100が通信リンク20によって「フルメッシュ」接続されている。しかしながら、計算ノード100間の接続はフルメッシュでなくともよく、ある計算ノード100間の通信リンク20が省略されていてもよい。通信リンク20が存在していない計算ノード100間の通信は、例えば、他の計算ノード100を経由して行われてもよい。なお、本明細書では、通信リンク20の本数を、一方向の通信毎に1本と数えることにする。図1において、計算ノード100間を接続する各通信リンク20は簡単化のため1本の線で示しているが、実際には、各計算ノード100間では同時に双方向の通信が可能であるので、各計算ノード100間は2本の通信リンク20で結ばれている。従って、図1の例では、9×8=72本の通信リンク20が存在する。なお、図1は計算ノード100間の論理トポロジーがフルメッシュ接続であることを示しており、必ずしも計算ノード100間の物理トポロジーがフルメッシュ接続である必要はない。本発明の実施形態は、後述(図22〜24)の波長ルーティングを用いる並列計算システムのように、論理トポロジーはフルメッシュ接続であるが、物理トポロジーはスター型接続である構成の並列計算システムを含む。
このように、本発明の実施形態に係る並列計算システム10は、各計算ノード100間が論理的にフルメッシュ接続された構成を有している。従来の、各計算ノード間がパケット・スイッチを介して接続された構成の並列計算システムでは、計算ノードとパケット・スイッチ間のリンクを時分割で利用するため、高い柔軟性を有する反面、パケットの衝突を回避するための複雑な手順が必要となり、通信遅延および消費電力増加の原因となる。これに対し、各計算ノード100間が論理的にフルメッシュ接続された本実施形態の並列計算システム10では、全計算ノード100間が常時直接接続されているため、パケット間の衝突を考慮する必要がなく、より簡単な処理で済ませることができ、通信遅延や消費電力の削減が可能である。
ある計算を実施する場合、並列計算システム10は、当該計算の処理を複数に分割し、分割したサブ処理を各計算ノード100に割り当てる。すなわち、各計算ノード100は、並列計算システム10が全体として実施する計算のうちの一部分を担当する。また並列計算システム10は、計算で使用するデータ、あるいは計算の対象であるデータを複数に分割し、分割した小データを各計算ノード100に分散して配置する。各計算ノード100は、自分が担当する計算を実行するが、その計算に必要なデータを保持していない場合がある。計算ノード100は、そのようなデータを、当該データを保持している他の計算ノード100から通信リンク20を介して入手する。このようにして各計算ノード100が自分に割り当てられたサブ処理を実行することで、並列計算システム10における計算が、複数の計算ノード100の協働によって並列に処理される。
図2は、本発明の一実施形態に係る計算ノード100の構成図である。図2は、図1における複数の計算ノード100のうちのある計算ノード100の構成を示している。複数の計算ノード100のうちの他の計算ノード100は、図2と同一の構成を有していてもよいし、あるいは図2とは異なるように構成されてもよい。
図2において、計算ノード100は、プロセッサ110、メモリ120、および送受信ユニット130を備える。メモリ120は、少なくともプログラム格納領域122およびデータ格納領域124を含む。プログラム格納領域122には、計算ノード100に本発明の一実施形態に係る後述の動作を行わせるコンピュータプログラムが格納される。プロセッサ110が当該コンピュータプログラムをメモリ120から読み出して実行することで、計算ノード100は、本発明の一実施形態に係る後述の動作を行う。
データ格納領域124には、並列計算で使用する全体データを複数に分割した小データの1つであって、当該計算ノード100がその配置先として指定された小データが、あらかじめ格納される。またデータ格納領域124には、当該計算ノード100が計算に必要とする小データであって、他の計算ノード100から入手した小データが、一時的に格納される。さらに、データ格納領域124には、当該計算ノード100が計算を実行することによって生成されたデータも格納される。
送受信ユニット130は、当該計算ノード100と他の計算ノード100との間で、各計算ノード100が計算に必要とする小データを送受信する。具体的に、送受信ユニット130は、当該計算ノード100に分散配置されメモリ120のデータ格納領域124にあらかじめ格納されている小データを、他の計算ノード100が計算に使用するために当該他の計算ノード100へ送信する。また送受信ユニット130は、当該計算ノード100が保持していないが計算に必要な小データを、他の計算ノード100から受信する。
送受信ユニット130は、複数の計算ノード100の各々とデータを並列に送受信するための複数の通信ポート132を備える。各通信ポート132は、通信リンク20によって対応するそれぞれの計算ノード100と接続されている。図2の例において、送受信ユニット130は、8個の通信ポート132を備える。例えば、計算ノードN0に着目すると、通信ポートP0は計算ノードN1と接続され、通信ポートP1は計算ノードN2と接続され、通信ポートP2は計算ノードN3と接続され、通信ポートP3は計算ノードN4と接続され、通信ポートP4は計算ノードN5と接続され、通信ポートP5は計算ノードN6と接続され、通信ポートP6は計算ノードN7と接続され、通信ポートP7は計算ノードN8と接続されている。計算ノードN0以外の計算ノード100においても、各通信ポート132は同様に他の計算ノード100とそれぞれ接続されている。これにより、各計算ノード100は、他の複数の計算ノード100へ同時にデータを送信することが可能であり、また、他の複数の計算ノード100から同時にデータを受信することが可能である。各計算ノード100が比較的粒度の小さい多数の通信ポート132を有し、多数の通信リンク20を介して他の計算ノード100と接続されることによって、仮に1つの通信ポート132が故障しても他の通信ポート132および通信リンク20を経由して通信を継続することができ、高い可用性が期待できる。
図3は、本発明の一実施形態に係る並列計算システム10が対象とする並列計算の一例を示す。並列計算システム10は、行列Aと行列Bの行列積C=A×Bを計算する処理を実行することができる。しかしながら、並列計算システム10に適用し得る並列計算は、行列積の計算に限られない。データAおよびBは行列でなくてもよい。また、2つのデータ(すなわちAおよびB)を使うのではなく、データを1つだけ(例えばデータA)利用する計算や、データを3つ以上利用する計算であってもよい。並列計算システム10は、少なくとも1つのあるデータ(例えばデータA)を小データに分割して複数の計算ノード100に分散配置し、各計算ノード100が計算に必要な小データを他の計算ノード100から入手するように実行可能な、あらゆる種類の並列計算を対象とすることができる。
以下、本発明の実施形態は行列積の計算に関して説明される。計算ノード100の台数がN(=p×q;ただしp、qは自然数)のとき、行列A、Bはそれぞれ行方向にp分割、列方向にq分割される。必ずしもp=qである必要はないが、p=qの場合に行列AとBの通信回数が一致し、最も効率良く計算が行えるので、以下ではp=q、すなわちN=p2の場合を説明する。行列Aと行列Bに関して行列積A×Bを計算できるためには、行列Aの列数と行列Bの行数が等しい必要がある。そこで、行列AをI行K列、行列BをK行J列とする。このとき、行列AをN(=p2)分割した小行列の行数と列数はそれぞれI/p、K/pとなり、行列BをN(=p2)分割した小行列の行数と列数はそれぞれK/p、J/pとなる。したがって、行列Aの小行列の列数と行列Bの小行列の行数が一致するので、行列Aの小行列と行列Bの小行列に関して行列積を計算することができる。例えば、図1の並列計算システム10の場合には、計算ノード100の数は9台であるのでN=9、p=3となり、行列AおよびBはそれぞれ、行方向に3分割、列方向に3分割される。具体的に、図3に示されるように、行列Aの小行列をa11、a12、a13、a21、a22、a23、a31、a32、a33と定義する。同様に、行列Bの小行列をb11、b12、b13、b21、b22、b23、b31、b32、b33と定義する。行列積A×Bを表す行列Cについても同様に、小行列をc11、c12、c13、c21、c22、c23、c31、c32、c33と定義する。なお、上記の仮定から、行列Cの各小行列cijの行数と列数はそれぞれI/p、J/pである。行列Cの各小行列cijは次式で計算される。並列計算システム10の各計算ノード100は、これら9個の小行列cijのうちの1つを計算する処理を担当する。
cij=Σk(aik×bkj)
(ただし、i=1,2,3;j=1,2,3;k=1,2,3)
はじめに、従来知られている並列計算のアルゴリズムを説明する。図4は、従来の行列積計算アルゴリズムの一つであるSUMMA(Scalable Universal Matrix Multiplication Algorithm)を採用した場合における並列計算システム10の動作を示すフローチャートである。また図5は、並列計算システム10の各計算ノード100がSUMMAによる行列計算をどのように進展させていくかを示す概念図である。図5には、3行3列の9個のセルからなるボックスがいくつか示されている。各ボックスにおける3行3列の9個のセルのうち、上段左のセルは計算ノードN0を表し、上段中央のセルは計算ノードN1を表し、上段右のセルは計算ノードN2を表し、中段左のセルは計算ノードN3を表し、中段中央のセルは計算ノードN4を表し、中段右のセルは計算ノードN5を表し、下段左のセルは計算ノードN6を表し、下段中央のセルは計算ノードN7を表し、下段右のセルは計算ノードN8を表している。
まずステップ402において、行列Aの各小行列aijがそれぞれ対応する計算ノードNn(ただしn=3(i−1)+j−1)に配置される。具体的には、図5に示されるように、小行列a11が計算ノードN0に配置され、小行列a12が計算ノードN1に配置され、小行列a13が計算ノードN2に配置され、小行列a21が計算ノードN3に配置され、小行列a22が計算ノードN4に配置され、小行列a23が計算ノードN5に配置され、小行列a31が計算ノードN6に配置され、小行列a32が計算ノードN7に配置され、小行列a33が計算ノードN8に配置される。なお、計算ノード100に配置されるとは、データが計算ノード100のメモリ120のデータ格納領域124に格納されることを意味する。
次にステップ404において、行列Bの各小行列bijが、同様にそれぞれ対応する計算ノードNnに配置される。
次にステップ405において、各計算ノードNnは、それぞれのメモリ120のデータ格納領域124の一部として、小行列cijを格納するための領域を確保し、小行列cijの全要素を0で初期化する。ここで、小行列cijのインデックスiおよびjは、それぞれi=n/3+1、j=n%3+1と表される。ただし、n/3はnを3で割った商の整数部分、n%3はnを3で割った剰余をそれぞれ意味する。
この時点では、例えば計算ノードN0は、行列Aの小行列a11および行列Bの小行列b11を保持しているだけである。そのため計算ノードN0は、行列積Cの計算のうちの担当する小行列c11の計算をまだ行うことができない。他の計算ノード100についても同様である。ここまでが、以下の繰り返し処理を行う前の準備段階である。以降、ステップ406〜410、ステップ412〜416、およびステップ418〜422の3回の繰り返し処理を行う。
1回目の繰り返し処理では、ステップ406において、計算ノードN0、N3、およびN6が、それぞれ保有している行列Aの小行列を、「同じ行内」の他の2つの計算ノード100へ「Broadcast通信」で送信する。「同じ行内」とは、図5に示されるボックスにおいて同一の行に所属することを意味する。例えば、計算ノードN0と計算ノードN1と計算ノードN2は同じ行内に存在する。また「Broadcast通信」とは、ある計算ノード100から他の複数の計算ノード100へ同一のデータを送る通信である。より具体的に、計算ノードN0は小行列a11を計算ノードN1および計算ノードN2へ送信し、計算ノードN3は小行列a21を計算ノードN4および計算ノードN5へ送信し、計算ノードN6は小行列a31を計算ノードN7および計算ノードN8へ送信する。
次にステップ408において、計算ノードN0、N1、およびN2が、それぞれ保有している行列Bの小行列を、「同じ列内」の他の2つの計算ノード100へBroadcast通信で送信する。「同じ列内」とは、図5に示されるボックスにおいて同一の列に所属することを意味する。例えば、計算ノードN0と計算ノードN3と計算ノードN6は同じ列内に存在する。より具体的に、計算ノードN0は小行列b11を計算ノードN3および計算ノードN6へ送信し、計算ノードN1は小行列b12を計算ノードN4および計算ノードN7へ送信し、計算ノードN2は小行列b13を計算ノードN5および計算ノードN8へ送信する。
次にステップ410において、各計算ノードNnは、各々が担当する計算の一部分である2つの小行列同士の行列積ai1×b1jを計算する(ただしi=n/3+1、j=n%3+1)。例えば、計算ノードN0は、ステップ402およびステップ404でそれぞれメモリ120のデータ格納領域124に格納済みの小行列a11と小行列b11を用いて、行列積a11×b11を計算する。また、計算ノードN1は、ステップ404でメモリ120のデータ格納領域124に格納済みの小行列b12と、ステップ406で計算ノードN0から入手した小行列a11とを用いて、行列積a11×b12を計算する。また、例えば計算ノードN4は、ステップ406で計算ノードN3から入手した小行列a21と、ステップ408で計算ノードN1から入手した小行列b12とを用いて、行列積a21×b12を計算する。他の計算ノード100については図5を参照されたい。各計算ノードNnは、計算で得た行列積ai1×b1jの各要素を、要素毎に、それぞれのメモリ120のデータ格納領域124にある小行列cijの各要素に加算する。この結果、各計算ノードNnのメモリ120のデータ格納領域124には、この時点における小行列cijの途中経過データとして、ai1×b1jのデータが格納される。
2回目の繰り返し処理では、ステップ412において、計算ノードN1、N4、およびN7が、それぞれ保有している行列Aの小行列を、同じ行内の他の2つの計算ノード100へBroadcast通信で送信する。具体的に、計算ノードN1は小行列a12を計算ノードN0および計算ノードN2へ送信し、計算ノードN4は小行列a22を計算ノードN3および計算ノードN5へ送信し、計算ノードN7は小行列a32を計算ノードN6および計算ノードN8へ送信する。
次にステップ414において、計算ノードN3、N4、およびN5が、それぞれ保有している行列Bの小行列を、同じ列内の他の2つの計算ノード100へBroadcast通信で送信する。具体的に、計算ノードN3は小行列b21を計算ノードN0および計算ノードN6へ送信し、計算ノードN4は小行列b22を計算ノードN1および計算ノードN7へ送信し、計算ノードN5は小行列b23を計算ノードN2および計算ノードN8へ送信する。
次にステップ416において、各計算ノードNnは、上述のステップ410と同様にして、各々が担当する計算の一部分である2つの小行列同士の行列積ai2×b2jを計算し、得られた行列積ai2×b2jの各要素を、要素毎に、それぞれのメモリ120のデータ格納領域124にある小行列cijの各要素に加算する。説明が煩雑になることを避けるために詳細は省略するが、当業者であれば、上述したステップ410における説明および図5の記載から、ステップ416の計算の具体的内容は容易に理解可能であろう。ステップ416の結果、各計算ノードNnのメモリ120のデータ格納領域124には、この時点における小行列cijの途中経過データとして、ai1×b1j+ai2×b2jのデータが格納される。
3回目の繰り返し処理では、ステップ418において、計算ノードN2、N5、およびN8が、それぞれ保有している行列Aの小行列を、同じ行内の他の2つの計算ノード100へBroadcast通信で送信する。具体的に、計算ノードN2は小行列a13を計算ノードN0および計算ノードN1へ送信し、計算ノードN5は小行列a23を計算ノードN3および計算ノードN4へ送信し、計算ノードN8は小行列a33を計算ノードN6および計算ノードN7へ送信する。
次にステップ420において、計算ノードN6、N7、およびN8が、それぞれ保有している行列Bの小行列を、同じ列内の他の2つの計算ノード100へBroadcast通信で送信する。具体的に、計算ノードN6は小行列b31を計算ノードN0および計算ノードN3へ送信し、計算ノードN7は小行列b32を計算ノードN1および計算ノードN4へ送信し、計算ノードN8は小行列b33を計算ノードN2および計算ノードN5へ送信する。
次にステップ422において、各計算ノードNnは、上述のステップ410およびステップ416と同様にして、各々が担当する計算の一部分である2つの小行列同士の行列積ai3×b3jを計算し、得られた行列積ai3×b3jの各要素を、要素毎に、それぞれのメモリ120のデータ格納領域124にある小行列cijの各要素に加算する。計算の具体的内容は、ステップ410における説明および図5の記載を参照されたい。ステップ422の結果、各計算ノードNnのメモリ120のデータ格納領域124には、最終的な小行列cijのデータとして、ai1×b1j+ai2×b2j+ai3×b3jのデータが格納される。
以上により、各計算ノード100は、行列積A×Bを表す行列Cの一部分であり自分が計算を担当する小行列cijについての計算結果を得る。
図6は、上述した従来のアルゴリズムのステップ406、408、412、414、418、および420の各々において、小行列が計算ノード100間でどのようにルーティングされたかを表形式で視覚的に示す。送信側の各計算ノード100が表の縦方向に示され、受信側の各計算ノード100が表の横方向に示されている。「11」等の数字が記載されたセルは、そのセルに対応する送信側の計算ノード100と受信側の計算ノード100の間で小行列が転送されたこと、つまり当該2つの計算ノード100間の通信リンク20が使用されたことを表す。また空欄のセルは、そのセルに対応する送信側の計算ノード100と受信側の計算ノード100の間で小行列の転送が行われていないこと、つまり当該2つの計算ノード100間の通信リンク20は未使用であることを表す。数字「ij」は、小行列aijまたはbijを表す。
例えば、図6のステップ406と示された表において、最上段の左から2番目のセルに記載された数字「11」は、送信側の計算ノードN0と受信側の計算ノードN1の間の通信リンク20を使って小行列a11が転送されたことを表し、上から4段目で左から5番目のセルに記載された数字「21」は、送信側の計算ノードN3と受信側の計算ノードN4の間の通信リンク20を使って小行列a21が転送されたことを表している。これらの小行列の転送についてはステップ406に関して上述したとおりである。図6の各表に記載された他の任意の数字「ij」も同様に理解される。
図6に示されるように、上述した従来のアルゴリズムでは、並列計算システム10の9台の計算ノード100を相互に接続する全部で72(=9×8)本の通信リンク20のうち、各ステップ406、408、412、414、418、420のそれぞれにおいて同時に使用される通信リンク20は12本のみである。各ステップにおいて残りの60本の通信リンク20は未使用となっている。したがって、並列計算システム10の全体の通信帯域が有効活用されていない。そこで、以下に説明する本発明の実施形態では、並列計算システム10の通信帯域の利用効率を上げることで並列計算の高速化を可能にする。
なお、上記の説明では、行列を3×3=9個の小行列に分割して、9台の計算ノード100に分散配置する例を示した。しかしながら、行列の分割数および計算ノード100の台数はこの例に限られない。一般化すると、行列をp×p=p2個(pは2以上の整数)の小行列に分割して、p2台の計算ノードNn(ただしn=0,1,…,p2−1)に分散配置することができる。図4のフローチャートに示す動作の場合には、ステップ406〜410、ステップ412〜416、およびステップ418〜422の3回の繰り返し処理が行われたが、行列の分割数がp2個の一般化した動作においては、同様の繰り返し処理が合計p回行われる。
p回の繰り返し処理のうちのm番目(m=1,2,…,p)の繰り返し処理は次のように行われる。すなわち、まず計算ノードNn(ただしn=i×p+m−1、i=0,1,…,p−1)は、図4のフローチャートのステップ406に対応する動作として、それぞれ保有している行列Aの小行列aim(ただしi=n/3+1)を同じ行内の他の計算ノード100へBroadcast通信で送信する。次に計算ノードNn(ただしn=p×(m−1)+j、j=0,1,…,p−1)は、図4のフローチャートのステップ408に対応する動作として、それぞれ保有している行列Bの小行列bmj(ただしj=n%3+1)を同じ列内の他の計算ノード100へBroadcast通信で送信する。そして、各計算ノードNn(ただしn=0,1,…,p2−1)は、図4のフローチャートのステップ410に対応する動作として、行列積aim×bmjを計算してメモリ120内の小行列cijに加算する。このように、p回の繰り返し処理の各々において2回のBroadcast通信が行われ、総通信回数は2×p回である。
<第1実施形態>
図7は、本発明の第1実施形態に係る並列計算システム10の動作を示すフローチャートである。また図8は、本発明の第1実施形態において、計算ノード100間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図であり、従来例における前述の図6に相当する。
まずステップ702において、行列Aの各小行列aijおよび行列Bの各小行列bijがそれぞれ対応する計算ノード100に配置される。このステップは、前述した従来例のステップ402および404と同じものである。
次にステップ703において、各計算ノード100は、従来例のステップ405と同様に、それぞれのメモリ120のデータ格納領域124の一部として、小行列cijを格納するための領域を確保し、小行列cijの全要素を0で初期化する。
次にステップ704において、計算ノードN0、N3、およびN6が、それぞれ保有している行列Aの小行列を「Scatter通信」ですべての計算ノード100へ送信する。「Scatter通信」とは、ある計算ノード100の保有しているデータを小データに細分化し、その各々の小データをそれぞれに対応する計算ノード100へ送ることで、元のデータの異なる部分を別々の計算ノード100に分配する通信である。
具体的に、例えば計算ノードN0は、小行列a11を9個の小データa110、a111、a112、a113、a114、a115、a116、a117、およびa118に分割し、小データa111を計算ノードN1へ、小データa112を計算ノードN2へ、小データa113を計算ノードN3へ、小データa114を計算ノードN4へ、小データa115を計算ノードN5へ、小データa116を計算ノードN6へ、小データa117を計算ノードN7へ、小データa118を計算ノードN8へ、それぞれ送信する。また計算ノードN3は、小行列a21を同様に9個の小データに分割し、各小データをそれぞれ他の計算ノード100へ送信する。計算ノードN6についても同様である。図8のステップ704と示された表には、これらの小データの転送が、数字「ijk」によって示されている。図8において、数字「ijk」は、小行列aijまたはbijを分割したk番目(k=0,1,…,8)の小データを表す。
次にステップ706において、計算ノードN1、N2、N4、N5、N7、およびN8が、上記ステップ704で各計算ノード100に分配された小データを「Allgather通信」で回収し、それら回収された小データからそれぞれ行列Aの小行列を再構成する。「Allgather通信」とは、複数の計算ノード100に分散しているデータを1つの計算ノード100に集めて結合する処理を、並列で複数実行するものである。
具体的に、例えば計算ノードN1は、小データa110、a111、a112、a113、a114、a115、a116、a117、およびa118をそれぞれ計算ノードN0、N1、N2、N3、N4、N5、N6、N7、N8から取得し、これら各小データを用いて行列Aの小行列a11を再構成する。この各計算ノード100から計算ノードN1への各小データの転送が、図8のステップ706と示された表の左から2列目に示されている。同様に、計算ノードN2は小行列a11を再構成し、計算ノードN4およびN5は小行列a21を再構成し、計算ノードN7およびN8は小行列a31を再構成する。
このようにステップ704および706が実施されることにより、前述した従来のアルゴリズムにおけるステップ406が実施された場合と同様に、計算ノードN0、N1、およびN2は行列Aの小行列a11を保持し、計算ノードN3、N4、およびN5は行列Aの小行列a21を保持し、計算ノードN6、N7、およびN8は行列Aの小行列a31を保持した状態となる。従来のアルゴリズムにおけるステップ406と本実施形態におけるステップ704および706を比較すると、本実施形態では通信ステップの数が2倍に増えているものの、使用される通信リンク20の数は9倍になり、また各通信リンク20を伝送されるデータサイズは1/9となっており、その結果、小行列を転送するのにかかる通信時間は2/9倍に短縮されることに注目されたい。
次にステップ708において、計算ノードN0、N1、およびN2が、それぞれ保有している行列Bの小行列をScatter通信ですべての計算ノード100へ送信する。具体的に、図8のステップ708の表に示されるように、計算ノードN0は、小行列b11を9個の小データに分割し、小データb111、b112、b113、b114、b115、b116、b117、およびb118をそれぞれ計算ノードN1、N2、N3、N4、N5、N6、N7、N8へ送信する。同様に、計算ノードN1は小行列b12を分割した小データを各計算ノード100へ送信し、計算ノードN2は小行列b13を分割した小データを各計算ノード100へ送信する。
次にステップ710において、計算ノードN3、N4、N5、N6、N7、およびN8が、上記ステップ708で各計算ノード100に分配された小データをAllgather通信で回収し、それら回収された小データからそれぞれ行列Bの小行列を再構成する。具体的に、例えば計算ノードN3は、小データb110、b111、b112、b113、b114、b115、b116、b117、およびb118をそれぞれ計算ノードN0、N1、N2、N3、N4、N5、N6、N7、N8から取得し、これら各小データを用いて行列Bの小行列b11を再構成する。この各計算ノード100から計算ノードN3への各小データの転送が、図8のステップ710と示された表の左から4列目に示されている。同様に、計算ノードN6は小行列b11を再構成し、計算ノードN4およびN7は小行列b12を再構成し、計算ノードN5およびN8は小行列b13を再構成する。
このようにステップ708および710が実施されることにより、前述した従来のアルゴリズムにおけるステップ408が実施された場合と同様に、計算ノードN0、N3、およびN6は行列Bの小行列b11を保持し、計算ノードN1、N4、およびN7は行列Bの小行列b12を保持し、計算ノードN2、N5、およびN8は行列Bの小行列b13を保持した状態となる。従来のアルゴリズムにおけるステップ408と本実施形態におけるステップ708および710を比較すると、上述のステップ704および706と同様に、本実施形態では通信ステップの数が2倍に増えているものの、使用される通信リンク20の数は9倍になり、また各通信リンク20を伝送されるデータサイズは1/9となっており、その結果、小行列を転送するのにかかる通信時間は2/9倍に短縮される。
次にステップ712において、各計算ノード100は、各々が担当する計算の一部分である2つの小行列同士の行列積ai1×b1jを計算し、得られた行列積の各要素を、要素毎に、それぞれのメモリ120のデータ格納領域124にある小行列cijの各要素に加算する。このステップは、前述した従来のアルゴリズムのステップ410に対応するものである。なお、例えば計算ノードN1は、当該行列積の計算に必要な小行列a11を、ステップ704のScatter通信およびステップ706のAllgather通信によって取得している。また、例えば計算ノードN4は、当該行列積の計算に必要な小行列a21をステップ704のScatter通信およびステップ706のAllgather通信によって取得し、小行列b12をステップ708のScatter通信およびステップ710のAllgather通信によって取得している。他の計算ノード100も同様に、計算に必要な小行列を、Scatter通信とAllgather通信を順に行うことによって取得している。このように、各小行列aijおよびbijは、送信元の計算ノード100から送信先の計算ノード100へ直接転送されるのではなく、各小行列aijおよびbijが分割された小データがScatter通信およびAllgather通信の2ステップ通信で他の計算ノード100に中継されることによって、送信元の計算ノード100から送信先の計算ノード100へ転送される。
次に、上述のステップ704〜712と同様にして、ステップ714〜722が行われる。ステップ714および716は、ステップ704および706と同様のScatter通信とAllgather通信により、行列Aの小行列a12を計算ノードN0およびN2に配送し、小行列a22を計算ノードN3およびN5に配送し、小行列a32を計算ノードN6およびN8に配送する処理である。また、ステップ718および720は、ステップ708および710と同様のScatter通信とAllgather通信により、行列Bの小行列b21を計算ノードN0およびN6に配送し、小行列b22を計算ノードN1およびN7に配送し、小行列b23を計算ノードN2およびN8に配送する処理である。図8の各ステップに対応する表に、これらの処理がそれぞれ示されている。ステップ722は、各計算ノード100が小行列の行列積ai2×b2jを計算してメモリ120に加算する処理であり、これは従来のアルゴリズムにおけるステップ416に対応している。ステップ722の結果、各計算ノード100のメモリ120のデータ格納領域124には、この時点における小行列cijの途中経過データとして、ai1×b1j+ai2×b2jのデータが格納される。
次に、上述のステップ704〜712およびステップ714〜722と同様にして、ステップ724〜732が行われる。ステップ724および726は、上記と同様のScatter通信およびAllgather通信により、行列Aの小行列a13を計算ノードN0およびN1に配送し、小行列a23を計算ノードN3およびN4に配送し、小行列a33を計算ノードN6およびN7に配送する処理である。また、ステップ728および730は、上記と同様のScatter通信およびAllgather通信により、行列Bの小行列b31を計算ノードN0およびN3に配送し、小行列b32を計算ノードN1およびN4に配送し、小行列b33を計算ノードN2およびN5に配送する処理である。図8の各ステップに対応する表に、これらの処理がそれぞれ示されている。ステップ732は、各計算ノード100が小行列の行列積ai3×b3jを計算してメモリ120に加算する処理であり、これは従来のアルゴリズムにおけるステップ422に対応している。ステップ732の結果、各計算ノード100のメモリ120のデータ格納領域124には、最終的な小行列cijのデータとして、ai1×b1j+ai2×b2j+ai3×b3jのデータが格納される。
以上により、各計算ノード100は最終的に、行列積A×Bを表す行列Cの一部分であり自分が計算を担当する小行列cijについての計算結果を得る。
ここで、本発明の第1実施形態に係る上記の並列計算方法が、前述した従来のアルゴリズムを用いた並列計算方法に比べてどのくらい高速化されているかを評価する。両者において、各計算ノード100の計算能力および各通信リンク20の通信帯域に違いはないものとする。また、並列計算システム10を構成する計算ノード100の数をNとし(上述したとおり図1ではN=9)、各小行列aijおよびbijのデータ長を、すべて同じ規格化した値「1」とする。
従来のアルゴリズムの場合、ステップ406、408、412、414、418、および420でBroadcast通信が行われ、全体の通信回数(Mと記す)は2√Nである。また、各回の通信(すなわち各ステップ)では小行列aijまたはbijが転送されるので、1回当りの通信で転送されるデータ長(Sと記す)は1である。よって、全体の相対的な通信時間T(=MS)は2√Nとなる。例えばN=64とすると、T=16である。
本発明の第1実施形態に係る並列計算方法の場合には、ステップ704、708、714、718、724、および728でScatter通信が行われ、ステップ706、710、716、720、726、および730でAllgather通信が行われ、全体の通信回数は4√Nである。また、各回の通信では小行列aijまたはbijを計算ノード100の数に分割した小データが転送されるので、1回当りの通信で転送されるデータ長は1/Nである。よって、全体の相対的な通信時間はT=4/√Nとなる。例えばN=64とすると、T=0.5である。
このように、本発明の第1実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の2/Nとなり、相対的な理論性能(すなわち1/T)はN/2倍に高速化される。N=64とすると、本発明の第1実施形態に係る並列計算方法は、従来のアルゴリズムに対して32倍の高速化処理が可能である。
<第2実施形態>
図9は、本発明の第2実施形態に係る並列計算システム10の動作を示すフローチャートである。また図10は、本発明の第2実施形態において、計算ノード100間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図であり、第1実施形態の図8に相当する。
本発明の第2実施形態と第1実施形態との違いは、第2実施形態では、第1実施形態における3つのScatter通信を1つの「Alltoall通信」に集約している点にある。すなわち、第1実施形態のステップ704、714、および724におけるScatter通信は、第2実施形態のステップ904におけるAlltoall通信として集約され、また第1実施形態のステップ708、718、および728におけるScatter通信は、第2実施形態のステップ906におけるAlltoall通信として集約されている。なお、図9のフローチャートにおいて、ステップ904および906以外のステップは、第1実施形態の図7のフローチャートにおける対応する各ステップと同じものである。具体的に、第2実施形態のステップ902、903、908、910、912、914、916、918、920、922、および924は、それぞれ第1実施形態のステップ702、703、706、710、712、716、720、722、726、730、732に対応している。以下、ステップ904および906について説明する。
ステップ904では、すべての計算ノード100が、それぞれ保有している行列Aの小行列aijを「Alltoall通信」ですべての計算ノード100へ送信する。「Alltoall通信」とは、ある計算ノード100の保有しているデータを小データに細分化し、その各々の小データをそれぞれに対応する計算ノード100へ送る処理を、すべての計算ノード100が並列で実行するものである。これにより、すべての小行列aijの細分化された異なる部分が、一斉に別々の計算ノード100に分配される。
具体的に、例えば計算ノードN0は、小行列a11を9個の小データに分割し、小データa111、a112、a113、a114、a115、a116、a117、およびa118をそれぞれ計算ノードN1、N2、N3、N4、N5、N6、N7、N8へ送信する。この計算ノードN0から各計算ノード100への各小データの転送は、図10のステップ904と示された表の最上段に示されている。また、例えば計算ノードN4は、小行列a22を9個の小データに分割し、小データa220、a221、a222、a223、a225、a226、a227、およびa228をそれぞれ計算ノードN0、N1、N2、N3、N5、N6、N7、N8へ送信する。この計算ノードN4から各計算ノード100への各小データの転送は、図10のステップ904の表の上から5段目に示されている。他の計算ノード100についても同様であり、その具体的内容は図10のステップ904の表の各段の記載から容易に理解される。
図10のルーティング表から明らかなように、ステップ904のAlltoall通信では、並列計算システム10のすべての通信リンク20が使用されており、並列計算システム10の通信帯域を最大限に利用した無駄のないデータ転送が実現していることに注目されたい。
同様に、ステップ906では、すべての計算ノード100が、それぞれ保有している行列Bの小行列bijをAlltoall通信ですべての計算ノード100へ送信する。その具体的内容は、図10のステップ906の表に示されており、上記のステップ904についての説明も参照することで容易に理解される。ここでも、Alltoall通信によって並列計算システム10のすべての通信リンク20が無駄なく活用されている。
このようにして、各小行列aijおよびbijは、各小行列aijおよびbijの小データがAlltoall通信およびAllgather通信の2ステップ通信で他の計算ノード100に中継されることによって、送信元の計算ノード100から送信先の計算ノード100へ転送される。
本発明の第2実施形態に係る並列計算方法では、上記のようにステップ904および906でAlltoall通信が行われ、ステップ908、910、914、916、920、および922でAllgather通信が行われ、全体の通信回数は2+2√Nである。また、各回の通信では、第1実施形態と同様に、小行列aijまたはbijを計算ノード100の数に分割した小データが転送されるので、1回当りの通信で転送されるデータ長は1/Nである。よって、全体の相対的な通信時間はT=(2+2√N)/Nとなる。例えばN=64とすると、T=0.28である。
したがって、本発明の第2実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の(1+√N)/(N√N)となり、相対的な理論性能は(N√N)/(1+√N)倍に高速化される。N=64とすると、本発明の第2実施形態に係る並列計算方法は、従来のアルゴリズムに対して57倍の高速化処理が可能である。
<第3実施形態>
図11は、本発明の第3実施形態に係る並列計算システム10の動作を示すフローチャートである。また図12は、本発明の第3実施形態において、計算ノード100間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図である。
本発明の第3実施形態は、上述した第2実施形態における小データの転送をさらに効率化し改良したものである。第2実施形態のステップ908、910、914、916、920、および922におけるAllgather通信は、並列計算システム10の通信帯域をすべて使い尽くしているわけではない。例えば、図10におけるステップ908の表の最左列、左から4番目の列、および左から7番目の列が空欄のセルとして示されていることから理解されるように、ステップ908の処理では、Allgather通信と並行して、さらに追加のデータをすべての計算ノード100から計算ノードN0、N3、およびN6へ送信することが可能である。
したがって、本発明の第3実施形態と第2実施形態との違いは、第3実施形態では、第2実施形態における3つのAllgather通信を、上記「空欄のセル」を利用することで2つのAlltoallv通信に集約している点にある。
具体的に、第3実施形態のステップ1108のAlltoallv通信は、第2実施形態におけるステップ920のAllgather通信のうち計算ノードN0、N3、およびN6が他の各計算ノード100からそれぞれ小行列a13の各小データa13k、小行列a23の各小データa23k、小行列a33の各小データa33kを取得する処理を、第2実施形態のステップ908におけるAllgather通信の空欄セルに組み込んだものである。これは、図12におけるステップ1108の表に点線の枠囲みで示されている。同様に、第3実施形態のステップ1114のAlltoallv通信は、第2実施形態におけるステップ920のAllgather通信のうち計算ノードN1、N4、およびN7が他の各計算ノード100からそれぞれ小行列a13の各小データa13k、小行列a23の各小データa23k、小行列a33の各小データa33kを取得する処理を、第2実施形態のステップ914におけるAllgather通信の空欄セルに組み込んだものである。これは、図12におけるステップ1114の表に点線の枠囲みで示されている。
このようなステップ1108のAlltoallv通信によって、計算ノードN0は小行列a13を取得し、計算ノードN1およびN2は小行列a11を取得し、計算ノードN3は小行列a23を取得し、計算ノードN4およびN5は小行列a21を取得し、計算ノードN6は小行列a33を取得し、計算ノードN7およびN8は小行列a31を取得する。また、ステップ1114のAlltoallv通信によって、計算ノードN1は小行列a13を取得し、計算ノードN0およびN2は小行列a12を取得し、計算ノードN4は小行列a23を取得し、計算ノードN3およびN5は小行列a22を取得し、計算ノードN7は小行列a33を取得し、計算ノードN6およびN8は小行列a32を取得する。
また、第3実施形態のステップ1110のAlltoallv通信は、第2実施形態におけるステップ922のAllgather通信のうち計算ノードN0、N1、およびN2が他の各計算ノード100からそれぞれ小行列b31の各小データb31k、小行列b32の各小データb32k、小行列b33の各小データb33kを取得する処理を、第2実施形態のステップ910におけるAllgather通信の空欄セルに組み込んだものである。これは、図12におけるステップ1110の表に点線の枠囲みで示されている。さらに、第3実施形態のステップ1116のAlltoallv通信は、第2実施形態におけるステップ922のAllgather通信のうち計算ノードN3、N4、およびN5が他の各計算ノード100からそれぞれ小行列b31の各小データb31k、小行列b32の各小データb32k、小行列b33の各小データb33kを取得する処理を、第2実施形態のステップ916におけるAllgather通信の空欄セルに組み込んだものである。これは、図12におけるステップ1116の表に点線の枠囲みで示されている。
このようなステップ1110のAlltoallv通信によって、計算ノードN0は小行列b31を取得し、計算ノードN1は小行列b32を取得し、計算ノードN2は小行列b33を取得し、計算ノードN3およびN6は小行列b11を取得し、計算ノードN4およびN7は小行列b12を取得し、計算ノードN5およびN8は小行列b13を取得する。また、ステップ1116のAlltoallv通信によって、計算ノードN3は小行列b31を取得し、計算ノードN4は小行列b32を取得し、計算ノードN5は小行列b33を取得し、計算ノードN0およびN6は小行列b21を取得し、計算ノードN1およびN7は小行列b22を取得し、計算ノードN2およびN8は小行列b23を取得する。
なお、図11のフローチャートにおいて、ステップ1102、1103、1104、1106、1112、1118、1120は、それぞれ第2実施形態のステップ902、903、904、906、912、918、924と同じものである。
図12のルーティング表から明らかなように、第3実施形態では、ステップ1104〜1110、1114、および1116のいずれにおいても、Alltoall通信またはAlltoallv通信が行われることによって並列計算システム10のすべての通信リンク20が無駄なく活用されている。
このようにして、各小行列aijおよびbijは、各小行列aijおよびbijの小データがAlltoall通信およびAlltoallv通信の2ステップ通信で他の計算ノード100に中継されることによって、送信元の計算ノード100から送信先の計算ノード100へ転送される。
このように、本発明の第3実施形態に係る並列計算方法においては、ステップ1104および1106でAlltoall通信が行われ、ステップ1108、1110、1114、および1116でAlltoallv通信が行われ、全体の通信回数は2√Nである。また、各回の通信では、第1および第2実施形態と同様に、小行列aijまたはbijを計算ノード100の数に分割した小データが転送されるので、1回当りの通信で転送されるデータ長は1/Nである。よって、全体の相対的な通信時間はT=2/√Nとなる。例えばN=64とすると、T=0.25である。
したがって、本発明の第3実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の1/Nとなり、相対的な理論性能はN倍に高速化される。
<第4実施形態>
図13は、本発明の第4実施形態に係る並列計算システム10の動作を示すフローチャートである。また図14は、本発明の第4実施形態における、各計算ノード100へのデータの初期配置と計算ノード100間でのデータのルーティングを表形式で視覚的に示す図である。
本発明の第4実施形態は、上述した第2実施形態のステップ904(または第3実施形態のステップ1104)で行列Aの小行列aijをAlltoall通信で各計算ノード100に分配し、また第2実施形態のステップ906(または第3実施形態のステップ1106)で行列Bの小行列bijをAlltoall通信で各計算ノード100に分配したのと同じ状態となるように、あらかじめ小行列aijおよびbijの小データを各計算ノード100に分散して配置しておく点が、前述の各実施形態と異なる。
まずステップ1302において、行列Aの各小行列aijがそれぞれ複数の小データに分割され、分割された小データがそれぞれに対応する計算ノード100に分散して配置される。具体的には、図14のステップ1302の表に示されるように、小行列a11を分割した各小データa110、a111、a112、a113、a114、a115、a116、a117、およびa118が、それぞれ計算ノードN0、N1、N2、N3、N4、N5、N6、N7、N8に配置される。同様に、小行列a12を分割した各小データa120、a121、a122、a123、a124、a125、a126、a127、およびa128が、それぞれ計算ノードN0、N1、N2、N3、N4、N5、N6、N7、N8に配置される。他の小行列aijの小データも同様に各計算ノード100に配置される。
上記のような初期配置の結果、例えば計算ノードN0は、小行列a11の小データa110と、小行列a12の小データa120と、小行列a13の小データa130と、小行列a21の小データa210と、小行列a22の小データa220と、小行列a23の小データa230と、小行列a31の小データa310と、小行列a32の小データa320と、小行列a33の小データa330とを保持する。また同様に、計算ノードN1は、小行列a11の小データa111と、小行列a12の小データa121と、小行列a13の小データa131と、小行列a21の小データa211と、小行列a22の小データa221と、小行列a23の小データa231と、小行列a31の小データa311と、小行列a32の小データa321と、小行列a33の小データa331とを保持する。他の計算ノード100についても同様である。
次にステップ1304において、ステップ1302と同様に、行列Bの各小行列bijがそれぞれ複数の小データに分割され、分割された小データがそれぞれに対応する計算ノード100に分散して配置される。
その後、ステップ1306、1312、および1318において、順次、各計算ノード100の所持している小行列aijの小データが、Alltoallv通信によって計算ノード100間で交換される。
具体的に、ステップ1306のAlltoallv通信は、計算ノードN0、N3、およびN6が各計算ノード100からそれぞれ小行列a11の各小データa11k、小行列a21の各小データa21k、小行列a31の各小データa31kを取得する処理を、第2実施形態のステップ908におけるAllgather通信の空欄セルに組み込んだものである。また、ステップ1312のAlltoallv通信は、計算ノードN1、N4、およびN7が各計算ノード100からそれぞれ小行列a12の各小データa12k、小行列a22の各小データa22k、小行列a32の各小データa32kを取得する処理を、第2実施形態のステップ914におけるAllgather通信の空欄セルに組み込んだものである。さらに、ステップ1318のAlltoallv通信は、計算ノードN2、N5、およびN8が各計算ノード100からそれぞれ小行列a13の各小データa13k、小行列a23の各小データa23k、小行列a33の各小データa33kを取得する処理を、第2実施形態のステップ920におけるAllgather通信の空欄セルに組み込んだものである。
このようなステップ1306のAlltoallv通信によって、計算ノードN0、N1、およびN2は小行列a11を取得し、計算ノードN3、N4、およびN5は小行列a21を取得し、計算ノードN6、N7、およびN8は小行列a31を取得する。また、ステップ1312のAlltoallv通信によって、計算ノードN0、N1、およびN2は小行列a12を取得し、計算ノードN3、N4、およびN5は小行列a22を取得し、計算ノードN6、N7、およびN8は小行列a32を取得する。さらに、ステップ1318のAlltoallv通信によって、計算ノードN0、N1、およびN2は小行列a13を取得し、計算ノードN3、N4、およびN5は小行列a23を取得し、計算ノードN6、N7、およびN8は小行列a33を取得する。
また、ステップ1308、1314、および1320において、順次、各計算ノード100の所持している小行列bijの小データが、Alltoallv通信によって計算ノード100間で交換される。
具体的に、ステップ1308のAlltoallv通信は、計算ノードN0、N1、およびN2が各計算ノード100からそれぞれ小行列b11の各小データb11k、小行列b12の各小データb12k、小行列b13の各小データb13kを取得する処理を、第2実施形態のステップ910におけるAllgather通信の空欄セルに組み込んだものである。また、ステップ1314のAlltoallv通信は、計算ノードN3、N4、およびN5が各計算ノード100からそれぞれ小行列b21の各小データb21k、小行列b22の各小データb22k、小行列b23の各小データb23kを取得する処理を、第2実施形態のステップ916におけるAllgather通信の空欄セルに組み込んだものである。さらに、ステップ1320のAlltoallv通信は、計算ノードN6、N7、およびN8が各計算ノード100からそれぞれ小行列b31の各小データb31k、小行列b32の各小データb32k、小行列b33の各小データb33kを取得する処理を、第2実施形態のステップ922におけるAllgather通信の空欄セルに組み込んだものである。
このようなステップ1308のAlltoallv通信によって、計算ノードN0、N3、およびN6は小行列b11を取得し、計算ノードN1、N4、およびN7は小行列b12を取得し、計算ノードN2、N5、およびN8は小行列b13を取得する。また、ステップ1314のAlltoallv通信によって、計算ノードN0、N3、およびN6は小行列b21を取得し、計算ノードN1、N4、およびN7は小行列b22を取得し、計算ノードN2、N5、およびN8は小行列b23を取得する。さらに、ステップ1320のAlltoallv通信によって、計算ノードN0、N3、およびN6は小行列b31を取得し、計算ノードN1、N4、およびN7は小行列b32を取得し、計算ノードN2、N5、およびN8は小行列b33を取得する。
このように、本発明の第4実施形態に係る並列計算方法においては、ステップ1306、1308、1312、1314、1318、および1320でAlltoallv通信が行われ、通信回数は2√Nである。また、各回の通信では、前述の実施形態と同様に、小行列aijまたはbijを計算ノード100の数に分割した小データが転送されるので、1回当りの通信で転送されるデータ長は1/Nである。よって、全体の相対的な通信時間は、第3実施形態と同じくT=2/√Nとなる。例えばN=64とすると、T=0.25である。
したがって、本発明の第4実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の1/Nとなり、相対的な理論性能はN倍に高速化される。
図15は、従来のアルゴリズムによる並列計算方法および本発明の各実施形態に係る並列計算方法の性能をまとめた一覧表である。相対通信時間および相対理論性能についてはN=64の場合の数値を併記した。図16は、それぞれの方法で並列計算のシミュレーションを行い、計算に要した実行時間を計測した結果を示すグラフである。グラフの横軸は計算対象の行列のサイズ(すなわち行(列)の数)を表し、縦軸はシミュレーションにより得られた計算実行時間である。シミュレーションでは、64台の計算ノード100がフルメッシュ接続された並列計算システムをモデル化した。シミュレーションを行った中で最大サイズの行列についての結果を図15の表の最右列に示す。この数値は、従来のアルゴリズムの場合の計算実行時間を1としたときの、各実施形態の方法の相対性能を示したものである。
以上において説明した各実施形態の並列計算は、従来の行列積計算アルゴリズムの一つであるSUMMAをベースとしたものである。しかしながら、本明細書に開示する発明の本質は、SUMMAへの適用のみに限定されるわけではない。行列積計算アルゴリズムの他の例としてCannonアルゴリズムやFoxアルゴリズムが知られており、これらのアルゴリズムをベースとして、上述した各実施形態と同様の追加の実施形態を提供することができる。
<第5実施形態>
図17は、並列計算システム10の各計算ノード100がCannonアルゴリズムによる行列計算を実施する手順を示す概念図であり、SUMMAの場合における前述の図5に相当する。また図18は、図17のCannonアルゴリズムをベースとした、本発明の第5実施形態による計算ノード100間のルーティング表の例である。
図17および図18を参照すると、例えば計算ノードN1の動作は次のとおりである。計算ノードN1は、ステップ1702でメモリ120に格納済みの小行列a12と、ステップ1808および1810によって計算ノードN4から入手した小行列b22とを用いて、ステップ1710において行列積a12×b22を計算する。また計算ノードN1は、ステップ1814および1816によって計算ノードN0から入手した小行列a11と、ステップ1704でメモリ120に格納済みの小行列b12とを用いて、ステップ1716において行列積a11×b12を計算する。さらに計算ノードN1は、ステップ1824および1826によって計算ノードN2から入手した小行列a13と、ステップ1828および1830によって計算ノードN7から入手した小行列b32とを用いて、ステップ1722において行列積a13×b32を計算する。計算ノードN1以外の他の計算ノード100の動作も、図17および図18を参照することにより同様に理解することが可能である。
<第6実施形態>
図19は、並列計算システム10の各計算ノード100がFoxアルゴリズムによる行列計算を実施する手順を示す概念図である。また図20は、図19のFoxアルゴリズムをベースとした、本発明の第6実施形態による計算ノード100間のルーティング表の例である。
図19および図20を参照すると、例えば計算ノードN1の動作は次のとおりである。計算ノードN1は、ステップ2004および2006によって計算ノードN0から入手した小行列a11と、ステップ1904でメモリ120に格納済みの小行列b12とを用いて、ステップ1910において行列積a11×b12を計算する。また計算ノードN1は、ステップ1902でメモリ120に格納済みの小行列a12と、ステップ2018および2020によって計算ノードN4から入手した小行列b22とを用いて、ステップ1916において行列積a12×b22を計算する。さらに計算ノードN1は、ステップ2024および2026によって計算ノードN2から入手した小行列a13と、ステップ2018および2030によって計算ノードN7から入手した小行列b32とを用いて、ステップ1922において行列積a13×b32を計算する。計算ノードN1以外の他の計算ノード100の動作も、図19および図20を参照することにより同様に理解することが可能である。
<第7実施形態>
上述した各実施形態では、並列計算システム10は、図1に示されるように、各計算ノード100が自分以外のすべての計算ノード100とフルメッシュ接続された形に構成されていた。計算ノード100のこのような接続形態を、「一次元フルメッシュ接続」と呼ぶことができる。しかしながら、本発明は、計算ノード100がこれとは異なる形態に接続された並列計算システムに適用することも可能である。
図21は、本発明の別の実施形態に係る並列計算システム210の構成図である。並列計算システム210は、複数の計算ノード100を備える。各計算ノード100は、図1の並列計算システム10における計算ノード100と同じものである。図21の例において、並列計算システム210は、図1の並列計算システム10と同様に9台の計算ノードN0〜N8から構成されている。なお、並列計算システム210を構成する計算ノード100の数N(ただしNは平方数とする)は、任意の数であってよい。
図示されるように、並列計算システム210の9台の計算ノードN0〜N8は、それぞれ3台の計算ノード100を含む3つのグループG1、G2、およびG3に区分けされる。第1グループG1は、計算ノードN0、N1、およびN2を含み、第2グループG2は、計算ノードN3、N4、およびN5を含み、第3グループG3は、計算ノードN6、N7、およびN8を含む。計算ノード100は、これら各グループ内でフルメッシュ接続される。例えば、第1グループG1において、計算ノードN0、N1、およびN2がフルメッシュ接続(すなわち、自分以外のすべての計算ノード100と接続)される。第2グループG2および第3グループG3についても同様である。これにより、互いに重複しない3つのフルメッシュ接続ネットワークG1、G2、およびG3が形成される。
並列計算システム210の9台の計算ノードN0〜N8は、さらに、それぞれ3台の計算ノード100を含む、上記のグループG1、G2、およびG3とは異なる別の3つのグループG4、G5、およびG6にも区分けされる。第4グループG4は、計算ノードN0、N3、およびN6を含み、第5グループG5は、計算ノードN1、N4、およびN7を含み、第6グループG6は、計算ノードN2、N5、およびN8を含む。計算ノード100は、上記グループG1、G2、およびG3の場合と同様に、これら各グループG4、G5、およびG6内においてもフルメッシュ接続される。例えば、第4グループG4において、計算ノードN0、N3、およびN6がフルメッシュ接続される。第5グループG5および第6グループG6についても同様である。これにより、上記のフルメッシュ接続ネットワークG1、G2、およびG3とは別個独立の、3つのフルメッシュ接続ネットワークG4、G5、およびG6が形成される。
ここで、例えば計算ノードN0は、図21において横方向に配列した計算ノードからなるフルメッシュ接続ネットワークG1の構成要素であるとともに、図21において縦方向に配列した計算ノードからなるフルメッシュ接続ネットワークG4の構成要素でもある。同様に、いずれの計算ノード100も、図21において横方向に配列した計算ノードからなるフルメッシュ接続ネットワークおよび縦方向に配列した計算ノードからなるフルメッシュ接続ネットワークの両方の構成要素となっている。図21における計算ノード100のこのような接続形態を、「二次元フルメッシュ接続」と呼ぶことができる。
このように、並列計算システム210は、図21において横方向に配列した計算ノードからなる3つのフルメッシュ接続ネットワークG1、G2、G3と、図21において縦方向に配列した計算ノードからなる3つのフルメッシュ接続ネットワークG4、G5、G6とを有している。これらの各フルメッシュ接続ネットワーク内では、前述したいずれかの実施形態と同様の方法にしたがって、小行列が小データに分割されて計算ノード100間で転送される。
例えば、フルメッシュ接続ネットワークG1に着目すると、計算ノードN0、N1、およびN2は、それぞれ保有している小行列a1jを3個の小データに分割して、分割した小データを、フルメッシュ接続ネットワークG1内の各計算ノード100へScatter通信またはAlltoall通信で送信する。次いで、計算ノードN0、N1、およびN2は、フルメッシュ接続ネットワークG1内に分散された上記の小データをAllgather通信またはAlltoallv通信で回収し、元の小行列a1jを再構成する。フルメッシュ接続ネットワークG2およびG3においても同様に、それぞれ小行列a2j、a3jが3個の小データに分割されて、当該フルメッシュ接続ネットワーク内の計算ノード100間で転送される。
一方、フルメッシュ接続ネットワークG4では、計算ノードN0、N3、およびN6間において、小行列bi1を3個に分割した小データが上記と同様にして転送される。また、フルメッシュ接続ネットワークG5およびG6では、同様に小行列bi2、bi3の小データが計算ノード100間で転送される。
こうして、計算ノード100が二次元フルメッシュ接続された並列計算システム210において、各計算ノード100は、それぞれ小行列cijの計算に必要なデータを他の計算ノード100から取得することができる。
本実施形態において小行列の転送にAlltoall通信およびAlltoallv通信を使用した場合の通信時間を、前述の第3実施形態(同様にAlltoall通信およびAlltoallv通信を使用していることに留意されたい)と比較する。第3実施形態の場合、前述したように、通信回数はM=2√Nであり、1回当りの通信で転送されるデータ長はS=1/Nである。一方、本実施形態の場合、小行列は(並列計算システム210の全計算ノード数ではなく)並列計算システム210の一つのグループに含まれる計算ノード数に分割されるので、1回当りの通信で転送されるデータ長はS=1/√Nである。また、本実施形態の場合、小行列aijの転送と小行列bijの転送を1回のAlltoall通信またはAlltoallv通信で同時に行うことができるため、通信回数はM=√Nとなる。さらに、計算ノード1台当たりの通信帯域を一定値「1」とすると、第3実施形態では、各計算ノード100は自分以外の(N−1)台の計算ノード100と通信するので、通信リンク当たりの通信帯域BはB=1/(N−1)≒1/Nであるのに対し、本実施形態では、各計算ノード100は2(√N−1)台の計算ノード100と通信するので、B=1/2(√N−1)≒1/2√Nである。したがって、すべてのデータを転送するのにかかる全体の相対的な通信時間T(=MS/B)は、第3実施形態と本実施形態で等しくなる。
このように、本発明の第7実施形態に係る並列計算システム210は、前述の各実施形態に係る並列計算システム10と同様の高速化処理が可能である。また、(一次元または二次元)フルメッシュ接続された計算ノード間で波長多重通信を行うことを想定すると、一次元フルメッシュ接続による図1の並列計算システム10においてはN個の異なる波長を用意しなければならないが、二次元フルメッシュ接続による図21の並列計算システム210においては、必要な波長の数は√N個で済む。一般に、通信に利用できる波長帯域には限りがあり、そのため利用可能な波長の数も限られている。したがって、利用可能な波長の数が同一であるならば、二次元フルメッシュ接続の構成を採用することによって、一次元フルメッシュ接続の場合と比較して、より多くの計算ノード100からなる並列計算システム210を構築することができる。例えば、利用可能な波長の数が64個であるとすると、図1の並列計算システム10は最大で64台の計算ノード100しか含むことができないが、第7実施形態の二次元フルメッシュ接続された並列計算システム210は、最大で4096(=642)台の計算ノード100を含むことが可能である。したがって、本発明の第7実施形態によれば、より大規模な並列計算システム210を構築することが可能となり、より大規模な並列計算(例えば行列計算)を実現することができる。
<第8実施形態>
図22は、本発明の一実施形態に係る並列計算システム220の構成図であり、計算ノード300間の物理トポロジーを示している。図22には8台の計算ノード300が示されているが、並列計算システム220を構成する計算ノード300の数は、任意の数であってよい。
各計算ノード300は、光ファイバ227によって波長ルータ225に物理的に接続されている。並列計算システム220は、波長ルータ225にすべての計算ノード300が物理的に接続されたスター型接続の物理トポロジーを有する。各計算ノード300は、波長ルータ225を介して他の任意の計算ノード300と通信することができる。したがって、並列計算システム220は、論理的には、図1に示されるような一次元フルメッシュ接続の論理トポロジー、または図21に示されるような二次元フルメッシュ接続の論理トポロジーを有するように構成されている。
波長ルータ225は、複数の入出力ポートP1〜P8を備え、そのそれぞれに、計算ノードN1〜N8のうちの対応する1つが接続される。各計算ノード300から送信された光信号が、波長ルータ225のポートP1〜P8のいずれかに入力される。波長ルータ225は、各ポートに入力された光信号を、ポートP1〜P8のうちその波長に応じたいずれかの出力ポートに振り分ける機能を有する。この波長ルーティングによって、送信元の計算ノード300からの光信号が、宛先の計算ノード300にルーティングされる。例えば、図22に示されるように、計算ノードN1から送信された波長λ1、λ2、λ3、λ4、λ5、λ6、λ7の各光信号は、それぞれ、計算ノードN2、N3、N4、N5、N6、N7、N8にルーティングされる。
図23は、波長ルータ225によるルーティングを示すテーブルである。上に例示した計算ノードN1が送信元の場合は、図23のルーティングテーブルの最上段に示されている。また例えば、このルーティングテーブルの上から2段目には、計算ノードN2から送信された波長λ1、λ2、λ3、λ4、λ5、λ6、λ7の各光信号は、それぞれ、計算ノードN3、N4、N5、N6、N7、N8、N1にルーティングされることが示されている。他の計算ノード300が送信元である場合についても、図23から同様に理解することが可能である。このようなサイクリックな波長ルーティング機能を備えた波長ルータ225は、公知のパッシブ光回路を用いて実現することができる。
図24は、波長ルーティングを用いた並列計算システム220に適用される計算ノード300の構成図である。計算ノード300は、プロセッサ110、メモリ120、クロスバー・スイッチ330、複数の光源・変調器ユニット340、複数の光検出器350、マルチプレクサ360、およびデマルチプレクサ370を備える。プロセッサ110は、他の計算ノード300のそれぞれに対応して設けられた各光源・変調器ユニット340へ、クロスバー・スイッチ330を介して送信対象のデータを供給する。各光源・変調器ユニット340は、特定波長(λ1〜λ7のうち当該光源・変調器ユニット340にあらかじめ割り当てられた1つの波長)のキャリア光を発生させ、クロスバー・スイッチ330からの入力データに基づいてキャリア光を変調しマルチプレクサ360へ出力する。各光源・変調器ユニット340からの各波長の光信号は、マルチプレクサ360によって波長多重され、送信側光ファイバ227−1へ送り出される。また、受信側光ファイバ227−2を通って、他の複数の計算ノード300から送信された波長多重された光信号がデマルチプレクサ370へ入力される。この波長多重信号は、デマルチプレクサ370によって波長分離されて、各波長の信号毎に、他の計算ノード300のそれぞれに対応して設けられた各光検出器350によって受信される。
なお図24では、メモリ120とクロスバー・スイッチ330間のデータの転送はプロセッサ110を介して行うように示されているが、メモリ120とクロスバー・スイッチ330間にダイレクト・メモリ・アクセス・コントローラ(DMAC)を設置し、メモリ120とクロスバー・スイッチ330間のデータの転送をプロセッサ110からオフロードし、DMAC経由で行ってもよい。また、図24の光源・変調器ユニット340は光源を内蔵しているが、光源は計算ノード300の外に設置し、その外部に設置した光源から光ファイバ等を介してキャリア光を変調器ユニット340に入力してもよい。
このように波長ルーティングを行うように構成された並列計算システム220においても、前述の第1〜第7実施形態と同様にして並列計算のためのデータ通信を行うことが可能であり、それにより、並列計算の高速化を実現することができる。
上述のとおり、本実施形態の並列計算システム220は、各計算ノード300間が光ファイバ227および波長ルータ225を介して物理的に接続されるとともに、波長ルータ225による波長ルーティングを用いて各計算ノード300間が論理的にフルメッシュ接続された構成を有している。この並列計算システム220が、各計算ノード間がパケット・スイッチを介して接続された従来の並列計算システムに比べて優れている点を以下に説明する。まず計算ノード間の通信に必要な消費電力に関して、従来の電気のパケット・スイッチではその消費電力はスループット(ラインレート×ポート数)に比例する一方、波長ルータ225の消費電力はスループットに無依存であるため、特に高スループット時に本実施形態の並列計算システム220の方が低消費電力となる。次にポート数に関して、従来の電気のパケット・スイッチのポート数の上限は、主にフロントパネルに実装できる電気コネクタ数で決まり、1U当たり36程度である。一方、波長ルータのポート数の上限は主に波長数で決まり、信号のシンボルレートを25GBaud、チャンネル間隔を50GHzとすると、長距離光ファイバ通信で用いられているC帯全域で約80ポートが可能である。光ファイバとしてMTコネクタ等を用いると、250μm以下のピッチでアレイ化が可能であり、80台の計算ノードとの接続に必要な光ファイバ160芯分のコネクタを1Uのフロントパネルに収めることが可能である。従って、本実施形態の並列計算システム220は、従来に比べて小型化が可能である。また、計算ノード間における通信速度の高速化への適応容易性に関して、従来の電気のパケット・スイッチはビットレートや変調方式に依存するため、計算ノード間の通信速度を高速化する際には電気のパケット・スイッチも一緒に交換する必要があるが、波長ルータ225は電気的な信号処理を含まずビットレートや変調方式に無依存のため、そのまま使い続けることができる。従って、本実施形態の並列計算システム220は、従来に比べて経済的であると共に地球環境にも優しいという利点を備えている。
以上、本発明の実施形態を説明したが、本発明はこれに限定されず、その要旨を逸脱しない範囲内において様々な変更が可能である。