メニーコアプロセッサによる科学技術計算 1

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

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

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

その先駆けとなった、2006年に発表されたGeForce 8800 GTX(図1)は、1.35 GHzで動作する、16個の独立な stream multi-processor (SM) から成る。各 SM では、8個の scalar processor が Single Instruction Multiple Data (SIMD) 動作する。つまり各クロックで、SMの命令ユニットは同じ命令を8個のscalar processorに送り、それらは違うデータに対して同じ処理を行う。SM上では複数のthreadが同時実行され、それらは同期したり、shared memoryを使いデータ交換ができる。 このアーキテクチャで高速実行できる、細粒度高並列で、通信量が少ないアルゴリズムを考える事は、プログラマーの責任である。