さて、ワークステーション等の高い機械の性能が上がらなくなったのは何故か?
という話です。
これには、簡単な解答があります。半導体技術が進んで、多数のトランジスタ
が1チップに集積できるようになったのに、演算器の数をそれに比例して増や
さなかったからです。どのくらい増えていないかというのは驚くべきものです。
富士通の論文
例えば、富士通の SPARC64V (2002年発表)は 130nm 技術で約 2 億トランジス
タを 18mm x 16mm のチップに集積していますが、浮動小数点演算器は乗算2個、加算
2個です。この数は 1μm のIntel i860 の2倍ですが、トランジスタ数は 100
倍以上です。(ダイサイズが大きい分、トランジスタが小さいなった分合わせて)
クロックは 30 倍になっているので、性能は 60倍ということになります。
もしも、 i860 を 100 個1チップにつめこんだら、クロックが上がらなくて
もピーク性能は 100 倍になり、クロックは 10 倍くらいはできるとすれば
1000 倍の性能になるわけです。
もちろん、問題は、メモリとの接続をどうするか、にあります。 SPARC64V で
はメモリ転送速度は 8GB/s であり、これに対して i860 では(理論ピークと
しては)320 MB/s でしたから、 25倍にしかなっていません。演算性能は 60倍
にしてしまったので、相対的なデータ転送性能は下がっているわけです。
しかし、それでも、 10プロセッサいれたチップを 1/10 のサイズで作って、
安くて性能が高い計算機にしたほうが良かったのでは?という気もします。
実際にそれをやったのが Sunの Niagara プロセッサ、ということになります。
まあ、その、しかし、 Ultrasparc-II 相当と言われる十分に複雑なプロセッ
サを使ったために 8 プロセッサで 379mmsq という巨大なチップになっており、
あんまり安くはならないと思いますが、しかし並列に実行できるプログラムに
対しては圧倒的な性能を出せるようです。
振り返ってみると、 x86 の「安い」マイクロプロセッサと、他の高価なマイ
クロプロセッサの性能差が殆どなくなったのは 1995年頃です。これは、 i860
に比べて 10倍以上のトランジスタを詰め込めるようになった時期、というこ
とです。つまり、演算器を 2 個とかしか使わないので、トランジスタの数が
ありあまるようになった時期、ということになります。このため、命令セット
が複雑でもそれを中間デコードしてさらに並べ変えて、レジスタも物理レジス
タを論理レジスタに対して複数用意して命令セットが腐っているのをごまかし
て、といったあらゆる小細工が安いプロセッサでもできるようになり、価格差
や、それ以前にアーキテクチャや命令セットの差が性能差につながらなくなっ
たわけです。
良く言われることは、プロセッサがこのように進化したのは 1 プロセス(スレッ
ド)での性能を上げるためだ、ということです。SPEC2000 のような標準的なベ
ンチマークがあることもその方向に向かう理由になっています。
しかし、私は、本質的な理由はアーキテクトのほうにあったのではないかと
思います。マイクロプロセッサは 1970年代から 30年近くの間、増えたトラン
ジスタを使ってより高度な(複雑な)デザインのプロセッサを作る、という方向
で進化してきました。それを逆行させて、単純なプロセッサを多数集積する、
というのは、思い付くまでに時間がかかることだったのではないかと思います。
現在、IBM Power, Intel Pentium や AMD Athlon はやっと 2 プロセッサ1チッ
プになっています。これから数を増やす、という方針のようです。どうせ将来
には数を増やすなら今単純なプロセッサにしてもっと増やしたほうが性能的に
は得だということは少し考えればわかることなのに、なかなかその方向にいか
ないのは奇妙なことです。
デスクトップの機械ではシングルスレッドの性能が大事、ということが仮にあっ
たとしても、少なくともスーパーコンピューティングの分野ではベクトル機に
なった時点で大抵のプログラムは原理的には並列化されたわけですから、沢山
プロセッサがあっても使いこなすのに問題はありません。
つまり、単純な(しかし浮動小数点演算性能はそれなりに強力な)プロセッサを
なるべく沢山1チップに詰め込む、という方向は、少なくともスーパーコンピュー
ティングを応用分野として考える限り有効な解であると思われます。
そういうものを作る機会は少なくとも 10 年前から存在していて、これから将
来も存在し続けます。
Sun の Niagara I では、信じ難いことに浮動小数点演算器を省くという選
択をしたのでウェブサーバとかデータベースとかいった用途はともかくとして
スーパーコンピューティングには無意味なものとなりました。 Niagara II
では浮動小数点演算器がはいるようですが、まあ、その、 Sun のことなので
どれくらい真面目に作るかは疑問です。
この方向で性能を稼げることは確かですが、1スレッドの(並列化されてないプ
ログラムの)性能は今の Intel や AMD のプロセッサより低くなります。
1スレッドの演算性能を極端には落とさないで、浮動小数点演算性能をもっと
上げる方向はないか、というのが次の話題です。