G80 performance

by syoyo

[En]

TODO…

[Ja]

G80 での数学関数のパフォーマンスはどんなものかと少し調べてみました [1,2]。
(G80 の場合サイクル数 = レイテンシ = throughput のようです)

– floating point mul/add などの基本演算は 4 サイクル
– log は 16 サイクル
– その他の逆数、exp, sin などは 32 サイクル

以外と個々の演算はサイクル数がかかりますね。
ただ、サイクル数はベースクロックでの値のようで、ALU は内部で2倍のクロックで動いているため、
この半分になると見るとよいみたい。
(さらに SP には 2 器 ALU が搭載されているので、
基本演算なら実質 SP あたり 1 サイクルでできることになります)

そして、ピークパフォーマンスの比較は [2] によれば、

– G80(GTX): 345 GFLOPS
– Core2(X6800): 46.9 GFLOPS
– Core2(Q6800): 85.3 GFLOPS

となります。GPU は Dual core で x8, Quad core で x4 早いと。
G90 が出れば Quad core でも x8 くらいの開きになるでしょうか。

G80 は個々の演算のサイクル数の遅さを物量でカバーしている、といえるでしょうか。

とりあえず、今回の結果から、(近似の)数学関数を 1 要素あたり 16~32 以下のサイクル数で SSE で計算
できるようにしてみようという目標ができました。

そうすれば、Quad core で x4 程度の開きなら無理して GPU を使わずに
MUDA 使いなよ、と言えるんじゃないかなぁと思います。

もちろん、
MUDA は今は SSE コードを吐いていますが、
GPU で実行することの価値が十分あることが分かれば、
MUDA コンパイラのバックエンドで *UDA や CTM なコードを吐いて
GPU で実行という手もあります。

要は MUDA は各種ターゲット向けの SIMD 最適なコードを自動で吐けること、
というのが目標なわけです。

[1] http://developer.download.nvidia.com/compute/cuda/1_0/NVIDIA_CUDA_Programming_Guide_1.0.pdf

[2] http://www.behardware.com/art/imprimer/659/

Advertisements