Streaming Processorによる科学技術計算

量子力学に基づくシミュレーション(量子シミュレーション)は、化学や材料化学で実験を理解、予測、主導するのにますます重要な役割を果たしている。実際量子化学は、計算機センターのCPU時間を相当使っている。化学の問題に対して量子力学が相当な予測能を持つ事は分かっているし、計算機能力が過去相当向上したため、量子化学は将来有望である。しかし計算能力が依然限られている事は、量子化学を様々な重要な問題、例えばもっと有効な医薬品や、環境問題を解決する新触媒の開発、に応用する際、依然深刻な問題である。そこでこのボトルネックを、新しい優れたアルゴリズムやコンピューターアーキテクチャの開発で、何とか解消したいというのが、この研究の目的である。

現在の汎用CPUでは、チップ上素子の多くがキャッシュ(高速メモリー)や制御回路に使われている。その理由は (1) CPU動作速度より主メモリー(DRAM)読み書き速度が格段に遅く、近い将来にも改善されない。命令/データの局所性を生かすためキャッシュが必要である。(2) パイプライン/並列処理で、サイクルあたりの命令発行数を増やすため、複雑な制御回路が必要である。汎用CPUでは、どの様なプログラム、例えば命令/データの局所性や並列性が少ない場合でも、高速処理できる事が期待されている(アムダールの法則)。現在の汎用CPUの姿は進化の宿命である。それに対してデータの局所性が極めて高く、キャッシュが殆ど不要で、並列度も極めて高い問題がある。画像処理やある種のシミュレーションがその例である。これらの問題に対しては汎用CPUは最適設計とは言い難い。

GPUによる科学技術計算

このような問題を特殊計算機で高速化した成功例として、天体運動や古典シミュレーションのためのGRAPEシリーズが有名である。これは汎用性を犠牲にして古典2体力のみ高速に計算する特殊回路である。また画像処理専用のgraphics processing unit (GPU)も、今後有望と思われる。GPUとは、全てのパソコンやゲーム機が持っている描画装置で、CPUの3次元データをディスプレー平面に投影表示する。3次元の頂点座標に投影行列をかけ2次元座標を計算するので、多数の独立な行列積計算を高速にできるハードウエアを内蔵している。回路が単純で、またゲーム機に使われ出荷量が多いため、GPUの理論演算性能や価格性能比は汎用CPUより1桁高い。

GPUを他の用途に使う、general-purpose GPUの試みは以前から有ったが、プログラムが難しく、低精度(単精度未満)の数値計算しかできない欠点があった。しかしGPUの状況は急速に変化している。MicrosoftがShader Model 4という新規格をGPUに要求し、GPUベンダーがunified shader modelという、ソフトウエアで制御する回路でGPUを構成し始めたからである。今後のGPUは全て、プログラム可能で、単精度浮動小数点数 (float, Real(4)) の計算ができる。並列度が高い問題に特化した、streaming processor (SP)と呼ばれる製品が、各社で開発/販売されている。

   
単精度
倍精度
Core数
価格
 
CELL (SONY) 2006
256
30
8
4万
ゲーム機 (PlayStation 3)
GT200 (NVIDIA) 2008
930
90
240
6万
GPU
RV770 (AMD) 2008
1200
240
800
4万
GPU
GRAPE-DR 2007
1640
820
2048
165万
プログラム可能なGRAPEシリーズ
Larrabee (INTEL) 2009
1000?
?
16?
?
IA互換

汎用CPUの計算速度は2008年現在、単/倍精度で 50/100 GFLOPS 程度なので、これらSPを補助に使うと価格性能比が格段に上がる。またプログラミングモデルも標準化の試みがある。現在最も使い易いのは、NVIDIA社のGPU (グラフィックカード) だろう。NVIDIA社は、Compute Unified Device Architecture (CUDA) という、並列C言語のコンパイラー/ライブラリーを無償公開している。このプログラミングモデルでは、GPU上でデータ並列処理したい手順 (kernel) と、グラフィックボード上のDRAMにデータを転送する手順を拡張Cで記述する。これをコンパイラー (NVCC) で処理すると実行形式が作られる。

2006年に発表されたGeForce 8800 GTX(図1)は、1.35 GHzで動作する、16個の独立な stream multiprocessor (SM) から成る。各 SM では、8個の scalar processor が Single Instruction Multiple Data (SIMD) 動作する。つまり各クロックで、SMの命令ユニットは同じ命令を8個のscalar processorに送り、それらは違うデータに対して同じ処理を行う。SM上では複数のthreadが同時実行され、それらは同期したり、shared memoryを使いデータ交換ができる。(詳細はCUDA Programming Guideを参照。)

NVIDIA GEFORCE 8800 GTX SCHEME
図1.NVIDIA GeForce 8800 GTXの構造

このアーキテクチャで高速実行できる、細粒度高並列で、通信量が少ないアルゴリズムを考える事は、プログラマーの責任である。

GPUによる科学技術計算の利点

  1. 市場が大きいため、価格性能比が良い。GPUは全てのゲーム機やパソコンに搭載されるため、大量生産される。半導体価格は出荷個数の対数に反比例し、沢山作ると安くなる。高性能だが少数しか作られない専用計算機と大きく違う点である。
  2. 単純な並列処理に特化するため、汎用CPUより回路が単純で、同じダイ面積で高い理論演算性能を持つ。他方複雑な逐次処理では性能は低い。
  3. Windows Vista対応には、GPUがShader Model 4をサポートする必要が有る。SM4では単精度数演算の機能が必要で、また実行可能な命令数も事実上無限。今後のGPUは全てこの機能を持つ。

GPU計算の欠点

  1. 単精度計算は高速だが、倍精度計算は遅い。つまりかなりの計算を単精度で行える場合は高速化できる。倍精度演算器は単精度の5倍の規模が必要な事、科学技術計算の市場の狭さを考えると、倍精度で価格性能比が悪くなるのはやむを得まい。
  2. 汎用CPUとは異なり、メモリーアクセスは遅く、threadに割り当てられるリソースも僅かである。Pipeline stallを隠すため、細粒度で多数の並列処理が必要である。ハードウェアが汎用CPUとかなり異なり、別のアルゴリズムやプログラムが必要である。またGPUの計算速度(数百GLOPS)に比べて、CPU-GPU間の通信速度(PCI Express, 数十GB/sec)はとても遅い。
  3. ホストで行う逐次処理は遅いので、アムダールの法則から、全計算の殆どをGPUで行わないと速くならない。つまり計算の核心部分は、GPU用に再度書き直す必要がある。

参考文献