前項で、PC クラスタの大きな問題の一つはネットワークが遅い、特に安いと
レイテンシが大きいことだ、という話をしました。レイテンシはいろんな場面
で問題になるのですが、特に普及という観点から問題なのは、通信レイテンシ
が大きいと自動並列化で性能をだすのが非常に困難になる、ということです。
HPF VPP-Fortran でも Co-array Fortran でも UPC でも、あるいは
分散共有メモリモデルでもなんでもいいのですが、並列実行自体は明示的に表
現するにしても通信は MPI のようなメッセージパッシングでなく、なんらか
の意味で暗黙に通信が行われるような言語を考えてみます。そうすると、
基本的には通信はコンパイル時に解決するなり実行時に解決するなりすること
になります。
コンパイラなりランタイムシステムが神のように賢いなら、通信を可能な限り
まとめて起動オーバーヘッドを少なくし、さらに可能な限り計算と通信を並行
動作させてレイテンシを隠蔽するようなタイミングで通信する、といったこと
ができるかもしれませんがまあなかなか無理なので、比較的細かい通信があま
り最適ではないタイミングで発生する、ということになりがちです。こうなる
と、イーサネット上での TCP/IP 通信のようなレイテンシが大きい方法
を使っていると、並列化した時の効率が大きく低下する、ということになりま
す。ある程度レイテンシが大きいと、通信の回数に比例して時間がかかる、と
いうことになり、比較的すぐにノード数が増えても計算時間が減らない、ある
いは逆に増える、という領域にはいってしまうからです。現在の例えば GbE
イーサネット上の TCP/IP 通信で実現されているレイテンシと、現在のハード
ウェアで実現可能なレイテンシとは20-50倍程度の違いがありますから、これ
は並列化効率に非常に大きな差をもたらすことになります。
例えば、通信起動オーバーヘッドがノード数に依存しない並列アルゴリズムを
考えると、レイテンシが 1/n になれば n 倍の数のプロセッサ
を使っても性能がでることになり、計算自体を n 倍加速できるわけで
す。
MPI を使って手で通信を入れるなら、通信回数とかを最適化するのは面倒です
が難しいわけではありません。で、これは非常に大きな性能差をもたらすこと
が多いわけです。
並列計算は速くならなければ意味がなくて並列にしないほうがいいので、MPI
で手で注意深く書けば速くなるけど自動並列化では速くならない、という状況
では誰も自動並列化は使わなくなります。そうすると、自動変換化は誰も使わ
ないから頑張って速くすることには意味がない、ということになって誰も研究
しなくなり、結果的に使えないものに留まるわけです。
これがハードウェアの限界によってそうなっているならまあしょうがない、と
いう面もあるかもしれないのですが、現状では全然そうではなくてソフトウェ
アやハードウェアにしても特定の規格の性質によるものだったりすると、
もうちょっとなんか考えられないものか?という気がします。
プログラムを書くほうの観点からすると、 MPI を使った並列プログラムを開
発するというのは非常に面倒で手間がかかる上に間違いやすく、ある程度以上
複雑なアルゴリズムを実装したり、多様なアルゴリズムを実装して実験すると
いったことには向きません。これは、基本的に MPI では通信の記述が明示的
である上に異常に冗長であることによります。このため、アルゴリズムの何か
を変更すると、それに応じて通信部分も書き換える必要が発生し、しかも通信
部分の書き換えがとっても面倒な上に間違いやすいのです。
ここでの問題は、並列言語とか並列化コンパイラ自体にあるというよりは、通
信レイヤの本質的ではないオーバーヘッドが莫大である、ということです。
実際、1990 年代の、 PC クラスタでない並列計算機が生息していた頃は
MPI とかでない並列言語や自動並列化がそれなりに使いものになっていました。 PC クラスタが主流になるとそういう言語では性能がでないしそれ以前
にコンパイラもないのでフリーで使える MPI とか PVM とかを使わざるを得な
い、ということになってきたわけです。
こ
の問題をある程度緩和するためにレイテンシ隠蔽をソフトウェアが頑張ってす
る、という種類の研究は掃いて捨てるほどあるのですが、ソフトウェアとか規
格のために大きくなっているオーバーヘッドをさらにソフトウェアをつみ重ね
ることによって回避しようというのが生産的かどうかは難しいところだと思い
ます。
もちろん、いわゆる Grid が目指すところということになっている、地理的に
遠いところの計算機が連携して1つの計算をする、というような話では光の速
さでレイテンシが制限されるわけで、そういうようなものを真面目に考えるな
らレイテンシ隠蔽とかいったことは大事なことです。しかし、落ち着いて考え
てみるまでもなく、そういう Grid 環境でできるようなことしかしないのなら
並列計算機でレイテンシがどうとかいうのはそもそも問題にならないわけです。
要するにいいたいことは何か、というと、 PC クラスタの通信ソフトウェア・
ハードウェアがタコなせいで MPI のような程度の低い開発環境を使う羽目に
なっているのはいい加減なんとかして欲しい、ということです。もっとも、こ
れは誰かが怠慢なせいとかではなく、もうちょっと深いところに原因があると
いうのは前項でみた通りです。つまり、PC クラスタでまともな通信ハードウェ
ア、ソフトウェアが使えないのは COTS アプローチからくる必然であり、根本
的に解決するには 1 ノードの価格を引き上げ、さらにそれ以上に性能を上げ
る必要があるのです。