ここまでで、
-
従来のベクトルは駄目
-
microprocessor ベースの超並列は駄目
-
microprocessor + SIMD 拡張は駄目
-
専用計算機は駄目
というような話をしてきたわけですが、ここで「駄目」といってきたのはほと
んどの場合相対的なものです。つまり、端的にいうと
「普通の PCに勝てない」
ということなわけです。但し、専用計算機は事情が違って、原理的には初期コ
ストをある程度薄められる程度に量産するなら普通の PC に比べて桁で価格性能比
を上げるのは容易です。シリコンの利用効率で 2-3桁良いからです。
専用計算機の問題は、理論天文学にそんなにお金を出すのが現実的か、という、
単純に技術的というわけではないところにあります。
アメリカならともかく日本では天文学研究全体で使われている予算というのは
大した数字ではないし、その中で理論研究に使われている予算は雀の涙ほどし
かありません。その中の結構な割合を、多体シミュレーションしかできない計
算機に使って下さい、という要求は、仮に実現可能であったとしてもするべき
かどうか、という問題があるわけです。
本当に巨大プロジェクトであれば ALMA のように国際共同にするという方法も
ありますが、これは 10 年単位の時間がかかるわけでそういうのをまとめるた
めに奔走するというのは、やってる人には申し訳ありませんが私の趣味ではあ
りません。
ということで、何か新しいアプローチはないのか?ということをもう少し考え
てみましょう。
ここ数年話題になっているアプローチには以下のようなものがあります。
-
FPGA を使った再構成可能計算
-
GPU を使った計算(いわゆる GPGPU)
-
ゲームコンソールを使った計算。 PS2 とか PS3 とか
まず、これらのアプローチが持つ原理的な限界を押さえておくことにしましょ
う。それには、これらのアプローチがどのようにして高い演算性能を実現しよ
うとしているかを考えてみます。この項では FPGA について考えてみます。
FPGA は Field Programmable Gate Array というもので、内部の論理を書き換
えることができる LSI です。基本的には、小さな SRAM ブロックで論理素子
を表現し、それとフリップフロップを組合せた基本ブロックを多数集積してそ
の間をプログラム可能なスイッチでつないだもの、ということになりますが、
最近のものでは論理素子に初めから加算器とか乗算器(18ビット乗算器とか)が
はいっていたり、また規模の大きな SRAM ブロックがはいっていたりで複雑な
構造になっています。設計自体は、基本的には普通の LSI と同じように回路
設計を回路図なり HDL (ハードウェア記述言語)なりで書くわけですが、カス
タム LSI と基本的に違うのは、 HDL で書いたものを量産された LSI に作っ
てから書き込むことができること、そのために HDL 記述から設計情報にする
細かい作業は基本的には全て自動で行えるようになっていることです。
大雑把にいって、 FPGA に入る回路規模は同じサイズ、テクノロジーで作った
カスタム LSI の 1/10 から 1/100 になります。かなり幅があるのは、例えばフリッ
プフロップが非常に多い回路なら FPGA にかなり効率的に入るとか、逆なら逆
とか、そういったことがあるからです。 動作速度は色々ですが、 半分までもっ
てくるのはかなり大変、 1/10 なら簡単、というところでしょう。従って、カ
スタム LSI に比べると 1/20 から 1/1000 程度の性能、ということになりま
す。
1/1000 まで落ちてしまうと結構話にならないですが、 1/20 くらいだとかな
り美味しい話になります。というのは、カスタム LSI の場合では大きな問題
であった開発の初期コストが基本的には不要になって、チップ1ついくら、あ
るいはチップがのった PCI カードを1枚いくら、で買うことができるからです。
つまり、億を超えるコストではなく、 100 万円程度の予算で専用計算機を作
ることができるわけです。
こういうのを使って計算する、というのを reconfigurable computing といい
ます。 FPGA 自体は 20年ほど前からあるもので、これを使って専用計算機的
なものを作る、というのはスピン系専用計算機 m-TIS-II (当時東大物理の伊
藤・泰地による)が最も早い試みの一つであったと思います。
で、まあ、何が問題か、というのは別にして、 reconfigurable computing は
過去 15 年ほどの間「未来の技術」であり続けています。つまり、いつまでたっ
ても広く使われるようになっていません。
というよりも、使おうというプロジェクトは星の数ほどあったのに、そのほとん
どがあまり良い結果を出していない、といったほうが正確でしょう。
あまりよい結果にならなかった理由はいくつかあると思いますが、その最大
のものは、どうやって設計すればいいかわからない、というものだったと思い
ます。つまり、 HDL という言語で書けるとはいえ、「ハードウェア」を設計
しないといけないわけです。 しかも、その言語自体馴染みのないものです。
このために、多くのプロジェクトでは、シミュレーションが専門の人と
電子工学が専門の人が共同で中身を設計する、という方法をとっていました。
しかし、この方法で効率が良いハードウェアを設計するのは非常に困難です。
例えば、単純に GRAPE のような重力計算パイプラインを FPGA に入れること
を考えてみます。基本的には、これは浮動小数点の乗算器、加算器をまず作っ
て、それを演算する順番に並べれば OK です。割算と平方根もありますが、こ
れらは例えばニュートン法で逐次近似するパイプラインを作ればいいでしょう。
と、こう思って作ると、回路規模は GRAPE-6 パイプラインの5倍程度、
GRAPE-5 に比べるとおそらく 20倍以上になってしまい、普通の計算機と競争
するのは非常に難しいものになります。これは、 GRAPE では、パイプライン
の場所によって演算精度を変えていることや、逆数平方根というより実際には
から を計算する回路を表引きと補間多項式計算を使った
非常に小規模なハードウェアで実現していることなどによります。
これは、ちょっと違う方向から見ると、要するに普通の倍精度浮動小数点演算
器を使ったのでは FPGA で性能を出すことは無理、ということです。無理であ
る理由は単純で、 FPGA の再構成可能論理で乗算器を作ったのでは効率が低く
なりすぎるし、といってきた組み込みの乗算器は数が足りなくてあまり性能が
でないからです。
つまり、 FPGA で性能を出すためには、演算精度等を最適化した演算パイプラ
インを設計する必要があり、それにはシミュレーション対象になる系の
振る舞い、数値誤差の振る舞い等がよくわかった人がパイプライン設計をする
必要があるのですが、普通そういうのは難しい、というのが問題です。このた
め、さらに、設計に長い時間がかかってできた時にはせっかく買った FPGA ボー
ドが時代遅れになってしまい、このためにさらに性能がでない、といった
悪循環もあります。
もっとも、この、設計の問題は、要するに適切なツールがない、というだけの
話ではあります。パイプラインを作るのにどこでどれだけの演算精度がいるか、
というのは実際に計算する人にはわかるし、仮にわからなくても、 cut and
try を繰り返し簡単にできる環境があれば調べることは難しくありません。し
かし、1つの精度の演算パイプラインを作るのに例えば 2 年かかってしまうと、
そういうことは不可能になります。
自分の身内の話になってちょっとアレですが、現在理研にいる濱田君、中里君
が開発した PGR システムはこの問題を解決する可能性がある現在唯一のツー
ルだと思います。
PGR システムでは、以下のようなものをあらかじめ準備します。
-
精度、パイプライン段数を指定可能な演算器生成プログラム
-
ホスト計算機との通信ライブラリ
-
パイプライン制御回路等を生成するプログラム
で、ユーザは、基本的には演算パイプラインで計算したい式を C 言語風の
表現で演算器とその結線を指示します。そうするとそこから必要なハードウェ
ア記述から通信ライブラリまでが全て自動生成され、ホスト計算機のアプリケー
ションプログラムから直接呼べる、記述した演算パイプラインに特化した関数
群まで生成されるわけです。さらに、この関数群は FPGA ハードウェアと同じ
答を出すエミュレーションライブラリとも結合させることができ、ハードウェ
アがなくてもアプリケーションソフトウェアを開発したり計算機精度のチェッ
クをしたりできます。
もちろん、まだユーザが沢山いる、というわけではないし、うまくいくかどう
かは未知数な部分があります。
FPGA を使っていいことがあるためには、上に述べたように計算精度を最適化
することによって速度を上げる可能性がある、ということがかなり重要な条件
になります。 これはもちろん、 FPGA の中に演算器を入れる効率と、普通の
マイクロプロセッサに載っている演算器の効率のどっちが高いかによりますが、
これは現時点で大差ありません。今後、マイクロプロセッサの設計がもっとど
んどん効率が下がる、ということがなければなかなか FPGA が有効になるのは
難しいと思われます。
とはいっても、 FPGA が有効なアプリケーションは結構多いはずで、今までの
ように年オーダーの時間をかけなくても使ってみることができるようになった、
というのは極めて大きな変化だと思います。
で、思うわけですが、では、 FPGA が HPC のあらゆる分野に使えるかという
とそうではないことは明らかです。例えば、仮に倍精度演算が十分速いもので
あったとしても、 FPGA がベクトル計算機の代わりにならないことは自明です。
これは単純な話でメモリバンド幅がチップ当りで普通の PC 並、あるいはそれ
以下しかないからです。演算器とメモリの間に壁があることは普通のマイクロ
プロセッサと変わるところはないので、ベクトル計算機では性能がでて PC で
は性能がでないような計算は FPGA でうまく動く可能性はあんまりない、とい
うことになります。
PC で十分に性能がでるものであれば、 FPGA での計算を検討する価値はある、
とはいえるでしょう。