FP64倍精度演算機能の比較
もともと3Dグラフィックス処理用として開発された生い立ちを持つGPUは、32ビット浮動小数点(FP32)以上の演算精度をそれほど必要としなかったため、長らく倍精度64ビット浮動小数点(FP64)演算のサポートという発想そのものがなかった。しかし、数年前からGPGPUが広く取り沙汰されるようになり、それと同時にGPGPUにおけるFP64演算のサポート問題が浮上し、GPUメーカーは何らかの対応を迫られた格好になる。
いち早くFP64に対応したのはATI Radeon HD 3800シリーズの方であり、これを搭載した「Firestream 9170」が「世界初のFP64対応GPGPU製品」として2007年末にリリースされている。
Radeon HD 4800シリーズにおいてもFP64演算機能はサポートされ、機能自体はRadeon HD 3800シリーズと同等のものになる。具体的には1SIMDユニット(5SP)全体がFP64計算に従事することで実現される。
NVIDIAはCUDA/TESLAを有しGPGPU戦略ではリードしながらもFP64対応はATI遅れることとなったが、なんとか今回のGeForce GTX 200シリーズで初めてFP64演算に対応を果たしている。具体的には、SM(8SP)あたりに一基ずつ専用の倍精度対応の積和算器(DFMA:Double Floating-point Mul and ADD unit)を実装させることで対応させている。複数SPでFP64を肩代わりするのではなく、専用ユニットとしてFP64積和算器が実装されているため(レジスタファイルの空き状況等に依存するものの)、SP側のFP32演算器とFP64演算器とは同時実行も可能だとされる。
気になるのは「Radeon HD 4870とGeForce GTX 280とではどちらがFP64性能に優れているのか」という部分だろう。FP32性能ではRadeon HD 4870が1.2TFLOPS、GeForce GTX 280は933GFLOPSであった。
Radeon HD 4870では5SP全体がFP64に従事するので倍精度時の演算能力は5分の1となり、240GFLOPS(=750MHz×160SIMD×積和算)となる。GeForce GTX 280ではSM(8SP)あたりに一基ずつのFP64積和算器があるので、GeForce GTX 280全体では30SM=3SM×10TPCだから30基あることになる。つまり、GeForce GTX 280(シェーダクロック1.3GHz駆動時)では78GFLOPS(=1.3GHz×30SM×積和算)となる。
FP64演算性能に限定して比較すると、FP64積和算器を専用搭載しながらも、Radeon HD 4870はGeForce GTX 280の約3倍のFP64演算能力があることになる。
ところが、FP64演算機能の利用には両者、少々クセがある。
GeForce GTX 200シリーズではSP側のFP32演算器とFP64演算器は同時利用できるものの、FP64演算機能自体はGPGPUモードでしか利用できない。もっともDirectX、OpenGLの双方でもFP64を効果的に扱える仕組みが提供されていないので、使いようがないというのが本当のところだ。
Radeon HD 4800シリーズでは、FP64のポテンシャルはありながらも、実は、「Radeon」としてはFP64演算機能は利用できない。後に登場するRadeon HD 4800シリーズベースのGPGPUシステム「FireStream」型番製品でのみ有効化されると予告されている。ATIは「FP64演算は一般アプリケーションでは不要」というスタンスをとると同時に、FireStreamのFP64サポートに「GPGPU専用機としてのプレミア感」を出そうという方針のようだ。