PC クラスタが殆どの並列計算機にとってかわったのはその圧倒的な価格性能
比によっていたということはこれまでに何度も書いた通りですが、圧倒的な価
格性能比は基本的に 1 プロセッサでの計算の時にだけ実現されたものです。
並列計算になるとノード間通信が遅いために、1つの問題を本当に通信しなが
ら解く、というようなアプリケーションではそうそう性能がでないし、また
プログラムを書くのも MPI とかでは非常に大変だからです。MPIの問題につい
てはまた後で触れることにして、ここでは通信性能について考えてみます。
通信性能が問題である、というのは並列プログラムを走らせるという前提の上
のことですが、1 つの問題はそんなこといっても並列計算なんかする必要ある
の?ということです。計算能力だけを考えるとこれは結構微妙な問題です。例
えば、 1000 ノードの並列計算機があったとして、それを 30 人で使っている
とします。それぞれの人がみんな同時に1つ計算流すなら、CPU 能力としては
32 台分しか使えません。同時にしたい(あるいはしたくなくてもいいけどでき
ないわけではない)計算が 10 個ある人なら、1つの計算に 4 ノード使うだけ
で十分計算機を忙しくすることができるわけです。
こういう場合には、メモリがたりなくて1つのノードでは計算が収まらない、
ということのほうが並列計算が必須になる条件になっているわけです。
計算センターの運用の側から考えると、稼働率を上げたほうが予算要求しやす
いとかそういう腐った理由付けを別にすると、使う人、あるいはジョブの数だ
けハードウェアを分割するほうがスループットは上がります。並列化できてい
る計算プログラムの場合でも、使うノード数が多いと通常効率は下がるわけで
すから、効率を考えるとなるべく少ない台数で走らせたほうが得です。
Cray-1 の時代ならそもそも浮動小数点演算器が1つしかなかったわけですから、
それを沢山の人が順番待ちして使う、というのは筋が通ったことだったわけで
す。しかし、プロセッサが一杯ある時に、それをまとめた上で順番待ちすると
いうのは筋が通らないわけで、使う人数分に分割して別の計算を走らせるほう
が効率は良くなります。待ち時間はまとめたほうが短くなることもありえるわ
けですが、まあ、そんなに大差はないと思います。
QCD 計算のような、1つのグループが大きな計算機を占有して数ヶ月1つの計算
を流す、という需要がないわけではありませんが、それは割合特殊な需要であ
る、というのも疑いないところです。そうすると問題になるのは、価格で100
億円近くになるような計算機の現実的な使われかたを考えた時に、それ全部が
1つの計算に使われる時の性能を考える必要があるのか?ということです。
まあ、その、「世界一の性能を達成」とかいって新聞発表とかするためにはな
んらかのアプリケーションで全体を使ってこんな成果がでました、という必要
はあるのですが、例えば 100 億(想定されている京速計算機の1桁下)使った
計算機でもそれがカバーしないといけない分野は結構広くて、例えば理論天文
学だけ、なんてことはありえないわけです。理論天文学の中で全部使った
としても、 100億の計算機を3年間回してシミュレーション1つだけやって論文
1本だけ、というのは、それがよほど画期的なものであってもなかなか許され
るものではありません。この辺りは実験装置とはちょっと違うところです。
最先端の実験装置というのは、これまでにあった実験装置と同じことが
より速くできる、というものではなくて、これまでの実験装置ではそもそもで
きなかったことができる、というものです。ところが、計算機の場合には新し
い計算機は基本的に「速い」とか「メモリが大きい」ということにしか
違いがありません。このため、原理的に時間かお金をかければ別の計算機でも
できる、というところがあります。
何がいいたいかというと、結局のところ高価で大きな並列計算機というのはか
なり正当化が難しい存在である、ということです。
では、並列計算機とか並列アルゴリズムとかプロセッサ間ネットワークの研究
開発は研究費の無駄であってしなくてもいいのでしょうか?
それは必ずしもそうではないのではないか?というのが私のここでの主張です。
理由は簡単で、1つのプロジェクトで占有でき、一つの計算で効率がでて欲し
いような計算機でも、非常にプロセッサ数が多いものが利用可能になりつつあ
るからです。これまで見てきた商用の並列計算機とかスーパーコンピューター
は、ノード当りの価格が 100-1000万程度で 10-20 Gflops 程度の速度です。
しかし、コンシューマ向けの PC なら、例えば Intel Pentium D 830 (これが
適切な CPU かどうかは議論があるとは思いますが)を搭載し、 1GB 程度のメ
モリをつけたパソコンを 10 万以下で買うことが可能です。理論上は 1000万
あれば 100 台購入して、ピーク性能 1.2 Tflops のシステムを組むことがで
きるわけです。
1000万というのは小さな金額ではありませんが、計算機の購入代金として非常
に大きいという金額でもありません。ちょっとした科研費や、あるいは教室校
費でも可能な金額だからです。このレベルの計算機を占有するというのは普通
に考えられることです。
問題は、このようなシステムの場合に、トータルコストを大幅に引き上げない
で実用的並列計算ができるようなネットワークがない、ということです。
ポートあたり 10万円以下で買えるネットワークハードウェアは基本的には
GbE だけであり、ポート数が 100 程度のスイッチは GbE でも非常に高価です。
10Gbit/s クラスの性能を要求すると、現在は 10GbE はまだ Myrinet や
Inifiniband、 あるいは QsNet-II に比べて高価であり、どの場合でもポート
あたり 20万円近くかかります。つまり、せっかくノードあたり 10 万円で計
算機を買うことを考えても、まともなネットワークをつなごうとした瞬間に値
段が 3 倍になってしまうわけです。
GbE の問題は基本的には2つで、レイテンシが大きいこととバンド幅が小さい
ことです。普通に Linux ソケットで TCP/IP ベースで通信した場合、片道レ
イテンシがよくて 30μs程度になります。これは TCP/IP ではアクノリッジが
いること、色々 OS のオーバーヘッドが大きいことが理由で、イーサネットパ
ケットを直接送るようなユーザ空間内で動くドライバを使うとカードによって
は 5μs 程度まで落とせるようですが、レイヤー2でもスイッチがはいると10
μs 程度に戻ってしまうようです。
これらはそんなに大きな数字には見えないかもしれませんが、例えば 100ノー
ドで最大値をとるとか、あるいは単純にバリア同期するだけで数百マイクロセ
カンドかかるわけで結構話にならない性能です。 HPC Linpack だとそれでも
性能がでたりしますが、普通の計算に使おうと思うとかなり大変だし、
自動並列化とかで細かく同期や通信がはいってしまうようなプログラムでは全
く性能がでない、ということになります。
このために、ある程度以上大規模な並列計算は、ノード計算機の金額だけを考
えるともっと普及していいのに現実には全く普及していない、という状態になっ
ているわけです。これは、計算科学の研究を推進するという観点からはかなり
危機的な状況といえます。
ここで重要なことは、 GbE が遅いのはソフトウェアとイーサネットの通信規格
が並列計算機のインタコネクト向けではないためであって決して技術的な困難
のせいではない、ということです。アクノリッジが必要なのは、イーサネット
の通信方式は大昔の1本の同軸ケーブルに沢山の計算機がつながっていた時代
の名残りを一杯残していて、スイッチやネットワークインターフェースがパケッ
トを落としてもかまわない、という規格になっているからです。スイッチベー
スになった時点でパケットを落とす必要は原理的にはなくなっているのですが、
では現在のスイッチでパケットを落とさないかというと全然そんなことはあり
ません。
また、スイッチが遅い、特にレイテンシが大きいのは、基本的にカットスルー
でなくてストアアンドフォワードで、少なくとも 64 バイト受け取るまでルー
ティングを始めない、という仕様にもよっています。もちろん、 MAC アドレス
によってルーティングするので、必ずしもアドレステーブルを引く必要がある、
ということもありますが、まあ、これは回路規模の拡大には影響します
が速度への影響はそれほど大きくはありません。
並列計算機専用に作る場合、技術的には、例えば 8入力8出力程度のスイッチ
で、レイテンシが 10ns 程度のものを作るのはそれほど難しいことではありま
せん。論理回路の規模はたかがしれてますし、速度も数百メガの上のほうで動
いて数サイクルの遅延ででてくれば 10ns 程度にはできます。こういうものを
作る時の問題は、現在では
-
LSI の初期コスト
-
I/O バンド幅と配線(ケーブル)をどうするか
です。まあ、初期コストについては、 90nm プロセスとか使わないで 180 nm
とか、あるいは Altera や Xilinx がやっている FPGA をそのまま ASIC化す
る、あるいはそもそも FPGA ですます、といった対応がありますが、問題はバ
ンド幅です。差動ペアケーブル1本の速度が 1GHz を超えるあたりから、FPGA
で沢山 I/O があるものは急に値段があがるからです。もちろん、これはNS や
TI が出している SERDES チップを別につける、といった方針で対応できない
ものでもなく、 計算上はポートあたりの 1GB/s 8 ポートスイッチを、載せる
LSI の値段2-3万円で構成することが可能です。商品として 2-3年後の 10GbE
スイッチと戦えるか、というと若干微妙な線に入ってくるところが問題ではあ
りますが、勝負にならないほどではないです。
まあ、 Quadrics の 8 ポートスイッチは今 $4000 なので、そっち買うほうが
安い、というところは商売としては大問題です。Quadrics の問題点は、PC 側
のカードが 1枚 $1000 することです。これとスイッチの $500 を合わせると
$1500 になって、 10 万円の PC につけるネットワークとしてはお話にならな
い、というのは既に述べた通りです。
つまり、価格の問題の起源はスイッチにあるわけではなくネットワークカード
にあるわけです(そんなことは初めからわかってる、と言われればその通りで
すが)。速度が 100 倍速いとはいえ、Fast Ether のカードなら 1000 円で買
えるのに QsNet のカードが 10万円するのは何故か、というと、これは結局、
よほど大量に売れるか、よほど開発にも製造にもお金がかからないものでない
と売値で 10万を切って儲けをだすのは難しいからです。
10GbE のいいところは、そのうちに大量生産になってカード1枚が数千円にな
ることがほぼ確実である、というところにあります。
結局のところ、計算機自体にいわゆる COTS (Commodity off-the-shelf) なも
のを使うなら、隅から隅まで、少なくともノード数に比例する数がいるような
ものは同じように量産効果があるものを使わないとなんにもならない、という
ことです。
しかし、そうすると、結局 COTS な PC クラスタでは特にネットワークのレイ
テンシに関する限り技術的に可能な速度の 1-2 桁下しか得られない、という
ことになります。そうでなくそうとした瞬間に値段が数倍になるからです。
これはどうにも面白くないわけですが、解決案はないものでしょうか?
ノードが 10 万でカードも 10 万なら良いネットワークにした瞬間に価格が2
倍になるのは避けようがないわけで、ノードを 100 万にするかカードを 1 万
にするかしか方法はありません。カードを 1 万にするのは実際上不可能と
するなら、ノードを 100 万にするしかないことになります。
もちろん、これは実際に HPC ベンダがやっていることで、 2-4 プロセッサの
SMP ノードを 数百万で売ってるわけです。しかし、これはユーザが得られる
価格性能比という観点からすると本末転倒であるのはいうまでもありません。
価格性能比を落とさないで値段を 10 倍にするには、性能を 10 倍以上にすれ
ばいいわけです。 これには、結局、ここまでで見てきたような SIMD超並列プ
ロセッサや、あるいは積層技術によって1チップベクトルプロセッサを安価に
実現したようなものが必要になります。
逆にいうと、そのような、汎用マイクロプロセッサよりもはるかに単体性能が
高いプロセッサを作った時には、それに見合った高バンド幅、低レイテンシの
ネットワークをつけることはそれほど難しいことではなく、価格的にも成り立
つ話になる、ということです。