というわけで、相変わらずあれも駄目、これも駄目、という議論になっていい
加減書くほうも気分が暗くなってきますし、読む人もつまらないでしょう。結
局、これまでの議論からは以下のようなことがいえます。
-
出来合いのチップを買ってきて計算機を作るなら、普通の PC を使うのが今のところ一番いい。但し、ネットワークは普通の Ethernet は特にレイテンシが大きくて性能のボトルネックになるので、ここはなんか作ること、あるいは Quadrics QsNet や Pathscale Infinipath のようなものを考える余地がある。
-
GRAPE のような専用計算機は作れるけど、初期コストに見合った応用範囲が必要。
-
FPGA は悪くないかも。
-
あと、思いつくもの、あるいは現在あるものは大抵 PC より悪い。
というわけで、スーパーコンピューティングには将来なんかない、というので
おしまいにしてもいいのですが、では私たちが今やってるのは何か?というの
が問題なのでここではその話をします。
現在、私たちは GRAPE-DR というプロジェクトを進めています。GRAPE は
Gravity Pipe の略であり、 DR は東大情報の平木さんが中心になって進めて
きた
Data Reservoir プロジェクトをさすわけですが、一応現在の公式には
GRAPE-DR は
Greatly Reduced Array of Processor Elements with Data Reduction
というものの略語、ということになっています。
で、これは一体なんじゃい、というのがお話です。
GRAPE-DR の基本的な考え方は、
-
従来の GRAPE と同様、可能な限り1チップに演算器を詰め込む。メモリバンド幅はあまり増やさず、それでも効率がでるような計算だけを対象にする。
-
従来の GRAPE とは違い、プログラム可能にする。これによって応用範囲を飛躍的に広くする。
この2つの要求はもちろん完全には両立しないわけで、どの辺で手を打つか、
また、実際にどんなことに使えるか、が問題になります。
基本的な考え方は GPU がアルゴリズム固定のシェーダユニットからプログラ
ム可能なシェーダに切り替わったのと同じように、固定パイプラインプロセッ
サをプログラム可能なプロセッサに置き換える、で、 GPU の場合と同様に
SIMD で演算する(全プロセッサが同じ命令を実行する)というものです。
現在開発中のチップ(開発名は SING) では、512個のプロセッサエレメントを
集積します。 それぞれのプロセッサはサイクル毎に単精度乗算と倍精度加減
算を実行でき、また2サイクル使うことで倍精度乗算も実行できます。予定の
クロックは 500MHz で、このクロックで動作すれば単精度ピーク 512 Gflops、
倍精度でもピーク 256 Gflops となります。倍精度乗算には加算ユニットも使
うので、倍精度乗算していると加算器は2サイクルに1度しか使えなくなってス
ループットは同じになるために倍精度ピーク性能は単精度のちょうど半分にな
ります。設計ルールは 90nm であり、既に最新というわけではありませんが
まあ来年にはチップができるので時代遅れということもない、という程度です。
SING チップの特徴は、倍精度演算換算でも 256+256 個と極めて沢山の演算器を集
積した、ということです。このために、 GPU 並の低いクロックでありながら
倍精度で現在のマイクロプロセッサを 1 桁以上上回るピーク性能を実現して
います(というか、する予定です)。
このように多数のプロセッサを集積するためには、1つのプロセッサが非常に
小規模なものでなければなりません。 SIMD 構成は、各プロセッサから命令を
読んで解釈する部分を完全に無くし、演算器とレジスタ等のメモリユニットだ
けにできるので非常に有利です。 SING では 1つのプロセッサは
-
浮動小数点乗算器
-
浮動小数点加減算器
-
整数 ALU
-
3ポート 32ワードレジスタファイル
-
1ポート 256ワードメモリ
-
2ポート 4ワード補助レジスタ
これだけでできています。レジスタファイルの語数、ポート数、メモリの語数
が極度に少ないのが近代的なプロセッサからはだいぶずれていますが、これに
よってこれらのメモリ部分がプロセッサの面積に占める割合を 1/2 以下にし
ています。逆にいうと、演算器がプロセッサ面積の半分程度をしめるようになっ
ています。 演算器とメモリユニットはマルチプレクサでつながれるわけです
が、ここでも入力ポート数を節約するためにいろいろ
いじましい工夫をしてマルチプレクサのサイズを押さえています。
このように演算器以外の部分を切り詰めることで、およそ 0.6mm 角というゴ
マ粒以下のサイズに単精度 1 Gflops 倍精度 512 Mflops のプロセッサをつめ
こんだわけです。
プロセッサが小さくても、メモリインターフェースやプロセッサ間ネットワー
クが面積を食ってはなんにもなりません。 SING では、メモリインターフェー
スは 500MHz, 64 bit 幅、4GB/s 程度と高価にならず設計もまあできる範囲に
し、プロセッサ間ネットワークについては基本的に放送と、総和等の縮約計算
のためのツリーネットワークしかありません。さらに、ツリーネットワークは
複数のプロセッサをグループにしてそれが葉ノードにがつくようにしてネット
ワークハードウェアの回路規模をを小さくしています。 このために全プロセッ
サの結果の総和はハードウェアではできず、一旦プロセッサグループの中で総
和をとる必要があり、これはグループ内プロセッサの数に比例した時間がかか
ります。しかし、粒子系の計算や密行列の演算など色々な応用で、この、グルー
プ間の総和だけで性能を出すのに十分であることがわかっています。
SIMD で多数のプロセッサを集積する、というアイディアは我々が最初ではあ
りません。既にみたように GPU はそういうものになっていますし、数値計算
専用でも ClearSpeed 社の
CSX600
が既にあります。これは東工大に多数納入されることになったというアナウン
スが 2005/11 にありました。なんとなく東工大で妙な計算機というと不吉で
すが、まあ、気のせいでしょう。これは今年既に出荷が始まっているはずです。
CSX600 は倍精度のピーク性能が 50 Gflops ですが、行列乗算ではピークの
1/2 しか出ないようです。理由はちょっとわからないですが、 CSX600 は SING
がもっているような縮約計算のためのツリーをもたないようなので、 I/O バ
ンド幅とプロセッサのローカルメモリサイズの関係から行列乗算のピーク性能
が決まっているのかもしれません。
この、行列乗算でチップ当り 25 Gflops という性能は、商業的になりたたせ
るのは困難な数字、といって差し支えないと思います。現在の 2 コアの PC用
プロセッサに対して 2 倍弱の性能なのに、販売価格は(推定)数倍するからで
す。SING の場合には CSX600 の 10 倍性能をつみあげたので、価格が同等なら
3年は戦えるはずです。
CSX600 の演算器の数が少ない理由は良くわかりません。テクノロジーは
130nm で1世代前ですから、さらにダイサイズが小さめならこれくらいになる
かもしれません。よほど沢山売れない限り、チップのコストは初期コストが殆
どで、量産コストはあまり問題ではないので、ダイサイズを小さくするのはあ
まり賢明な戦略とは思えないのですが。
CSX600 が商売になるかどうかはともかく、このような方向で高いピーク性能
を実現できることは明らかだと思います。実用になるか、特にどれくらい幅広
いアプリケーションで性能がでるかは今のところは未知数です。
GPU との大きな違いは、メモリバンド幅にあまり重点を置いていないことです。
これにより製造コストは結構下がります。まあ、どうせ開発コストが大きい、
ということはありますが。しかし、 GPU の項で述べたように、 CPU側に結果
を回収しないといけない場合にはローカルメモリに高いバンド幅があっても結
局無駄になるので、応用範囲はさして変わらないものと考えています。
まあ、新しいアーキテクチャなので、結局のところどれくらい使えるかは使っ
てみないとわからないわけです。発案者としては結構なんでもできるんではな
いかと実は思っているわけですが、、、
計画としては、 GRAPE-DR システムは 2008年度末に完成、 単精度 2 Pflops
のピーク性能を実現する、ということになっています。
これは少なくとも、従来のベクトル計算機で動いていた計算法でそのまま性能
がでる、というものではありません。メモリバンド幅と計算速度の比がベクト
ル計算機とは数百倍違うからです。 その代わりに、ピーク性能あたりの価格
は2桁以上下げることができるはずです。
個人的には、半導体技術の進歩を有効に演算速度の向上に使うために
は、メモリバンド幅と計算速度の比を落とすしかない、と思います。それでは
性能がでないアルゴリズムがあるといっても、それはベクトル機に最適化され
たアルゴリズムだからであり、計算量が10倍になってもかまわないからメモリ
バンド幅を1/100 にできないか?というと必ずしもそういう範囲では物事を考
えていない、ということはあると思います。
GRAPE-DR のような計算機が出現することは、そのような、計算アルゴリズム
の新しい可能性を開く(というか開かざるをえなくする)という意味でも意義が
あることではないかと個人的には思っています。 Illiac-IV が、
SIMD 並列計算しないと性能がでない、というアーキテクチャを提出したこと
で、並列アルゴリズムや並列化コンパイラの研究が進んだ、というのと似たこ
とになって欲しいな、ということです。Illiac-IV 自体は成功とはいいがたい
ものだったかもしれませんが、コンパイラ技術はベクトル化コンパイラに受け
継がれています。
まあ、そううまくいくかどうかはわかりません。