GRAPE-DRによる量子シミュレーションの加速

SONYとIBMがCELL processorを発表する前に、戎崎(理研、情報科学研究科客員教授)と、牧野(東大、現国立天文台)両氏は、プログラム可能なGRAPEシリーズの開発をしていた。彼らは、計算量より通信量が格段に少なく、定型的で高い並列処理ができる問題のみ、高速処理する事を目指した。IntelやAMDのCPUより高速な汎用CPUを設計しようとした訳ではない。IntelやAMDでも多くの優秀な設計者が取り組んでいるし、半導体価格は出荷数が決定的に重要なので、競争してもまず勝ち目は無い。むしろアプリ屋にとって重要な問題だけ高速実行できる計算機を目指した。ここで重要なのは解きたい問題を持つアプリ屋が、回路設計に参加する事である。実際設計は常にtrade-offなので、どんな機能が省略できるかが決定的に重要である。これは純粋な情報科学屋にはできない事で、アプリ屋が判断するしか無い。

準汎用計算機、GRAPE-DRチップは、多数の(512個)倍精度浮動小数演算器と、最小限の内部メモリー(演算器あたり33+256語)を持つ。確実に動作させるため、512個のProcessor elementsには外部FPGAからデータや命令が与えられる。戎崎、牧野両氏は、設計したこのチップで、分子動力学計算や行列積計算が、最速の汎用CPUの10倍程度に加速できそうだと分かったが、もっと複雑な問題、例えば量子化学計算ができるか、必要な最小のハードウェアを知りたかった。そこでGRAPE-DRで量子化学計算を高速化する方法を、私と松原氏(理研)が考える事になった。 私が量子化学について、松原氏がハード関係について担当した。

図2.GRAPE-DRチップの構造

アルゴリズム開発

量子化学でよく使われ、かつGRAPE-DRで高速化できそうな対象として、密度汎関数計算を選んだ。元々遅いアルゴリズムを加速する事には意味が無いので、最良と思われるアルゴリズムを選んだ。また理論やアルゴリズムが成熟し、改良の余地が少ないものを選んだ。そのアルゴリズムで大型分子の計算をし、計算量やデータ量を調べ、どの部分をGRAPE-DRで実行すべきか検討した。つまり細粒度で高い(512×4以上)並列度があり、計算量が通信量より2桁程度多く、作業領域が殆ど要らない(64語以下)部分を抽出した。汎用CPUのコードから、この並列化可能部分を抜き出すのはできそうにないので、実際にはGRAPE-DRで実行できるよう、アルゴリズム考え直す必要があった。

実装の苦労

チップやボード完成までは、エミュレータでプログラム動作を調べるのだが、プログラム作成はとても大変だった。Gaussian03を改造するのも大変だったが、これは難しいうちに入らない。当時GRAPE-DRにはチップ仕様書、アセンブラ仕様書、エミュレータしか無かった。コンパイラーが無いので、牧野氏が決めた謎のアセンブラでコードし、数学関数ライブラリが無いので、初等関数や割り算もコードし、制御FPGAプロセッサがループ1個しか持てなかったので、その他は全てunrollした。開発初期にありがちな事だが、無いもの尽くしである。積分コードを書いた経験のある量子化学者は今では少ないと思うが、機械語で書いたのは私だけではなかろうか。常識人ならコンパイラーも数学ライブラリも無い時点で手を引くと思う。が私には常識が無く、あえてやる事にした。うまくいけば密度汎関数計算が誰でも10倍は速くなるし、こんなハイリスクローリターンな事は誰もやらないだろうから。またチップは作り直せないので、設計段階で量子化学計算での障害を探す必要があった。

開発状況

コンパイラーは、平木研(東大院工情報科学)と、中里氏(理研、現会津大学)と、二つ開発中だったが、実用には程遠かった。アーキテクチャ依存の少ないフロントエンドの開発を目的にしており、より重要だが開発の難しいバックエンドは手付かずのためである。GRAPE-DRは回路単純化のため制御ハザードが結構有り、また命令レベル並列性を使わなければ高いパフォーマンスが出ない。例えば

  • 4データに対するベクトル演算器なので、メモリー量は実質1/4。
  • 加算器、乗算器、データ転送を同時実行するには、ポート数がぎりぎり。
  • レジスタ書込後1命令 (4 cycle) は値が更新されない。
  • ローカルメモリー書込後2命令 (8 cycle) は読み出し不可。
  • Tレジスタがそれらのバイパス回路。間接メモリアクセスにも使う。

コンパイラー開発者も、どれだけユーザーがいるか分からない状況では、大変な作業はしたくなかったのだろう。私もアセンブラで相当コードを書き、手で最適化の経験を積んだ後、自分用バックエンドを作るべく、コンパイラーの教科書やGCCの記述書を読んだ。がバックエンドの作成はさすがに量子化学者の仕事ではないと思った。数学ライブラリも、最適化前の実用的でないものが僅かにあっただけで、結局必要なものを自分で作った。今考えるとこれも量子化学者の仕事ではなく、GRAPE-DRのプロジェクトの資金でやるべき事だろう。資金はチップ作成で使い切ってしまったようなので、やむを得ないが。皮肉にもフロントエンドには、NVIDIAのCUDAコンパイラーが使えそうで、それが吐いた中間コードをGRAPE-DRのアセンブラに直すのが簡単だろう。精度の問題を除けば、数学関数も同じものが使えると思われる。

チップ自体は設計通りの物ができたらしいが、次の問題は制御FPGAのプログラミングのようだ。これは (1)PCI express busでホストと命令/データ通信を行い、(2)型変換をしながら、GRAPE-DRチップにデータを送り、又結果を回収し、(3)GRAPE-DRチップに命令列を送る、という作業をする。アセンブラ、ホストドライバ、制御FPGAのプログラムを全て扱う必要がある。これは牧野氏と、総研大の博士課程の学生、小池氏が行っているが、なかなか大変な様だ。1〜2人でやるのが無理かもしれない。この部分がネックとなり、量子化学計算は、GRAPE-DR実機でまだテストできていない。

GRAPE-DRを 1チップ又は4チップ搭載したボードは、それぞれ60万円 / 160万円で販売されている。販売数が少ないし、開発費を回収するためか、私の期待より2倍の価格になった。貧乏化学者にもスパコンを届けたい、という私の目的には、GPUの方が適しているかもしれない。

前ページ

参考文献