この文書は、元々、牧野自身のスーパーコンピューター、スーパーコンピュー
ティングの現状と将来についての理解の整理のために書き始めたものですが、
意外に色々な人に読んでいただているようです。 Web ページのリファラを見
ると、2ちゃんねる、スラッシュドットから、大学等の研究者の方、計算機メー
カーの内部ページにいたるまで、広い範囲にわたっています。
そういうわけで、今回から数回にわたって、今までは暗黙に前提としていた色々
なことについて整理してみようと思います。最初は、「パソコンとスパコンは
何が違うのか」ということです。
2006 年現在の答は簡単で「大して違わない」です。現在の典型的な例は Cray
の主力製品である XD1 と XT3 でしょう。どちらも、プロセッサは AMD
Opteron です。 Opteron はメモリコントローラを内蔵してますから、計算機
としてはどう作っても同じで、 CPU にメモリを直結するだけです。但し、1台
で使うわけではなくて、1024 台とかあるいはもっと沢山を専用のネットワー
クでつないでいます。
XD1 でも XT3 でも、ハードウェアとしてパソコンとどこが違うか、というと、
CPU を沢山並べて並列計算した時に性能がでるような若干の工夫がある、とい
うことと、沢山並べてもかさばらなくてちゃんと計算機室に収まるようなコン
パクトな実装がされている、という 2点につきます。
コンパクトな実装は、例えばノート PC でもやっているわけで、スーパーコン
ピューターで特別な技術を使っている、というわけではありません。
並列計算用の工夫は、ハードウェアとしては、
-
CPU の間を高速なネットワークでつなぐ
-
場合によっては、バリア同期等のための特別なネットワークをつける
というくらいです。
バリア同期というのは、並列計算でのプログラムの並列実行の制御の1つの方
法です。例えば、気象のシミュレーションで、計算する領域を CPU の数
だけ分割して、1つの CPU は小さい領域を担当するとします。流体計算では隣
合う領域のデータが必要になるので、最初は計算を始める時にそのデータを互
いに交換します。で、それを使って自分の領域の1ステップの計算が終わった
ら、また隣とデータを交換します。
この時、ちゃんと交換できるためには、相手が計算が終わったことがわかる必
要があります。
もっとも、この場合については、本当は終わったかどうか判定する必要はなく
て、
-
自分のデータは勝手に送りつける
-
相手のデータはくるまで待つ
というふうにして、しかも送る動作と受け取る動作はバラバラにできるように
なっていればいいのですが、送る動作と受け取る動作が順番にしかできないと
か、あるいはデータを交換する相手は複数あるわけですが、それらとの通信が
プログラムで書いた順番で起こるとかになっていると、色々考えて書かないと
いくつかのプロセッサがお互いの相手がデータを送ってくるのを待っていると
いうややこしい状態になります。 また、この例のようにあるプロセッサが誰
と通信するかがあらかじめ決まっている場合はそれでもまだ話が簡単ですが、
計算結果によって通信相手が変わるような場合にはさらに話が複雑になります。
バリア同期は、プログラムの中で「ここで同期」と書く(普通は、何か並列計
算ライブラリのそれ用の関数を呼ぶ)と、 全部のプロセッサがプログラムのそ
の行に到達するまで先についたプロセッサは待って、全部着いたら次に進む、
というものです。実現する方法は色々あって、信号線をだしておいてハードウェ
アで or をとって、といったものから、イーサネットでの通信ソフトウェアを
使って実現するものまであります。いずれにしても、このようにバリア同期
(単に「同期」ということもあります)しておくと、例えば、「相手がデータを
受け付けられる状態である」ということが保証されるので、色々話が簡単にな
ります。
話がそれました。要点は、 Cray の主力機は、基本的には普通の PC を沢山並
べて、その間を少し速いネットワークでつないだようなものだ、ということで
す。
では、現在の日本では「スーパーコンピューター」の代名詞的存在である地球
シミュレータや、その後継機である NEC SX-8 はどうでしょうか?これらはさ
すがに Intel や AMD のプロセッサを使っているわけではなく、独自開発のプ
ロセッサです。しかし、プロセッサの速度自体はそれほど速いわけではありま
せん。 地球シミュレータでクロック速度は 500MHzであり、完成時には Intel
Pentium 4 は既に 2GHz に達していたことを考えるとむしろ遅いものです。但
し、Pentium 4 は1クロックに2演算しかしないので理論ピーク性能は2GHz の
場合で 4Gflops ですが、地球シミュレータは1クロックに16演算して 8
Gflops となります。が、まあ、大した違いではありません。
違いはメモリとの転送バンド幅と、プロセッサ間ネットワークにあります。ま
ず、地球シミュレータでは 8 プロセッサがメモリを共有し、それぞれが
16GB/s の速度で共有したメモリにバラバラに読み書きができます。同じ時期
の Intel Pentium 4 では、 RDRAM を使った場合でメモリとの転送のバンドは
理論ピークが 3.2GB/s であり、実際にはもっと低いのでこれには結構大きな
違いがあります。
さらに、地球シミュレータ全体ではこの 8 プロセッサが単位になった計算ノー
ドが640個あるわけですが、それらはクロスバースイッチでつながっていると
されています。つまり、どのプロセッサも他の全てのプロセッサにデータを送
ることができ、しかも(送り先がぶつかってなければ)全部のプロセッサが同時
にデータを送ることもできるようになっています。
現在、アメリカやヨーロッパでは、スーパーコンピューターとして主に売れて
いるのは IBM の大型サーバです。これは色々な意味で NEC SX-8 と Cray XT3
の中間にあって、
-
プロセッサは Intel ではないけど IBM は他にも使っている Power 系
-
最大32プロセッサまでメモリ共有
-
ノード間は一応独自のネットワーク
ですが、メモリバンド幅、ネットワークバンド幅のどちらも地球シミュレータ
に比べてかなり見劣りするものになっています。 IBM は最近 BlueGene/L と
いうものをだしていますが、これについてはもうちょっと後で詳しく紹介しま
す。
値段ですが、地球シミュレータや SX-8 はプロセッサ1つ当り1千万円、 IBM
はもうちょっと安くて数百万、Cray XT3 は100万前後、となります。普通の
PC はハイエンドでなければ 10万そこそこですね。
プロセッサあたりの理論ピーク性能はせいぜい2倍しか違わないので、値段あ
たりの性能は実は普通のパソコンのほうが最大 50倍近く良いことになります。
次回はそのようになったのは何故か?を考えてみます。そのためには、スパコ
ン、パソコンのそれぞれが、過去数十年間にどのように発展してきたか、を振
り返ってみる必要があります。