GeForce GTX Titanの性能

GK110アーキテクチャのGTX Titanのスペックやベンチマークを調べ、GTX680(GK104)やRadeon HD 7970(GCN)と比較しました。

【重要】情報の信頼性は保証しません。

【注意】GK110はGeForce GTX TitanやTesla K20Xなどが該当します。GK104はGeForce GTX680などが該当します。GK110とGK104をまとめてKeplerアーキテクチャと呼びます。Keplerの前世代がFermiアーキテクチャで、GF100のGeForce GTX480からGF118のGeForce GT610までが該当します。GCNアーキテクチャははRadeon HD 7xxx世代(とおそらくRadeon HD 8xxx世代)が該当します。

■基本スペック

コア数が2880になり(GK104比で7/4倍)、メモリバスが384bit(GK104比で3/2倍)になりました。トランジスタ数は71億です。ベースクロックは836MHzです。

3SMXで1GPCなので、GPC数は5です。GK104は2SMXで1GPCだったので、トライアングルセットアップ能力はコア数ほど上がっていません(1クロックあたりのトライアングル数はGK104比で5/4倍)。テクスチャユニットは224個、ROPは48個です。

GK110は倍精度のスループットを1/8にするかしないかを変更できます。1/8にしなかった場合、コアクロックが下がります。

■命令スループット

CUDA C Programming Guide

1スレッドあたりの最高スループットの逆数を示します。1が最も好ましく、2や3ならば2倍・3倍遅い命令という意味です。Fは浮動小数点数、Iは整数演算です。

アーキテクチャ GK110 GK104 GCN
F32加算 1 1 1
F32乗算 1 1 1
F32積和 1 1 1
F32算術関数(*) 6 6 おそらく3か4
I32加算 8/7 8/7 1
I32乗算 6 6 4
I32積和 6 6 4
I32除算(**) 複数命令 複数命令 複数命令
I32シフト 3 6
I32比較 8/7 8/7
I32 SAD 6 6 4(***)
I24加算 おそらく8/7 おそらく8/7 1
I24乗算 複数命令 複数命令 1
I24積和 複数命令 複数命令 おそらく1
I24算術関数
論理演算 8/7 8/7 1
F64加算(#) 3 24 2
F64乗算(#) 3 24 4
F64積和(#) 3 24 4
F64算術関数(*)(#) 4以上orマイクロコード
I64加算 4
I8,I16->F32型変換 3/2 3/2
64型変換(#) 3/2 8
型変換(#) 6 6
ローカルメモリ同期 128 128
(*)GeForceの算術関数はCUDA Coreから独立したSFUで並列実行可能、スループットは逆数、逆平方根数、二進対数、2の指数、正弦関数、余弦関数のもの(**)GeForceは”below 20 instructions”との記述あり、おそらく100cycle前後(***)8bit整数は1、16bit整数は2と思われる。GCNのホワイトペーパーと命令エンコーディングより推測(#)GeForce GTX Titanのスループットは倍精度フルクロック時

メモ:GCNのF32所算は最大15cycle、F64除算は最大41cycle

なぜかCUDA 4.2のドキュメントと値がかなり食い違っているのですが…見なかったことにすればいいんでしょうかね。ここでは最新版の値を使いました。

GK110とGK104の違いは倍精度浮動小数だけでなく、こっそり「32bit整数シフト」が2倍高速化されています。CUDAなどでスレッドIDをシフトして使うことはよくあるので、これは助かります。といっても、GeForce GTX460に代表されるGF104やGF114の時代のスループットに戻っただけですが。

ところで、GK104ではWarp内スレッドデータ交換命令(__shfl()など)が追加されたので、この命令のスループットがすごく気になるのですが、誰か知りませんかね。スレッド同期が128cycleも待たされるらしい(上記ソースの表の下にある”Synchronization Instruction”参照)ので、この命令も遅かったらGPGPUが大変しにくくなるのですが。あとAtomic演算も不明です。

■L2キャッシュ

1.5MBに増えました。GK104は512kB、GF100/110は768kBでした。

■メモリアーキテクチャ

GK110ではTexture Cache(容量24kB?)とUniform Cahce(容量8kB?)がなくなりました。その代わり、容量48kBのRead-only Data Cahceが新設されました

参考:NVIDIAが世界最多トランジスタ数のチップ「GK110」を公開

Read-only Data CacheはTexture Cacheとして使うだけではなく、テクスチャ読み込み以外の場合でもRead-only Data Cahceを参照することができるようになりました(L1キャッシュには入りません)。CUDAにおいてconst __restric修飾子をつけた場合に使われるようです。HLSLのTexture2D.Load()時にもバイパスされるかどうかは不明です(もしできるならシャドウマップやバイキュービック補間に非常に有用なのですが)。

参考:GTC 2012 – 見えてきた次世代科学技術計算向けKepler(メモリ編)

■レジスタ数

総レジスタ数は変わりませんが、GPUネイティブの命令フォーマットが変わり、1スレッドあたりの最大レジスタ数が255に増えました。GK104は63、Fermiは128でした。ループをアンロールしまくってもL1キャッシュに退避されてしまう可能性が下がります。ただし総レジスタ数は変わっていないので、使いすぎるとOccupancyが下がります。

■新しいアトミック演算命令

64bit単位のatomicMax()、atomicMin()、atomicAnd()、atomicOr()、atomicXor()に対応しました。

■倍精度演算での2命令ディスパッチ

レジスタファイルの読み込みがなければ、倍精度演算命令を1Warpにつき同時に2命令ディスパッチできます。

■Dynamic Parallelizm

GPUが自らカーネル関数を起動できる機能です。マンデルブロ集合のように、高い解像度が必要な部分とそうでない部分が混在するとき、そうでない部分を実行しなくて済みます。個人的にはかなり革新的な技術だと思っています。(2/23追記:残念ながらTesla以外では使えないようです)(3/1追記:manaviのAndo Hisaさんの記事によると、GeForceでも使えるそうです。ただ、計算時間が無限に増えていくDynamic ParallelizmをWindows上で使うとTDRによりドライバごと殺されそうです)

■Hyper-Q

CUDA Work Distributorが32個に増え、CPUとGPU間で同時に32 MPIプロセスが並列実行できます。GK104以前は1個でしたが、カーネル関数の起動自体は同時に16までできました。(2/23追記:残念ながらTesla以外では使えないようです)(3/1追記:manaviのAndo Hisaさんの記事によると、GeForceでも使えるそうです)

■GPU Boost 2.0

GPU温度を基準としたブーストと、電圧変更に対応しました。

■Display Overclocking

垂直同期を取ったままディスプレイのフレームレート以上の速度でレンダリングできるようになります。

ここから、ベンチマークの結果を見ていきます。

「NVIDIA GeForce GTX Titan 徹底攻略」 – シングルGPUの最強候補を完全検証(mynavi)

Nvidia’s GeForce GTX Titan reviewed(techreport)

Benchmarking GeForce GTX Titan 6 GB: Fast, Quiet, Consistent(tom’s hardware)

「GeForce GTX TITAN」レビュー。999ドルの超巨大GPUは速いのか?(4gamer)

GK110がついに使える!──「GeForce GTX TITAN」の“破格”なパワーを知る(ITmedia)

GeForce GTX TITANはWQHD解像度で60fpsをキープ可能?(ASCII)

■ピクセルフィル、テクスチャフェッチ

テクスチャとROPのフィルレートを、3DMark VantageとBeyond3D suiteから見ます。整数とFP32のテクスチャフィルタ能力が大きく上がっています。

GPU Titan GTX680 HD 7970
理論ピクセルフィル[Gpixels/s] 42 34 34
理論テクスチャフィル(int8)[Gtexels/s] 196 135 134
理論テクスチャフィル(fp16)[Gtexles/s] 196 135 67
参考:メモリ帯域[GB/s] 288 192 288
Color fill [Gpixels/s] 16.3 12.9 13.8
int8 textire filtering [Gtexels/s] 143 108 124
fp16 texture filtering [Gtexels/s] 126 102 67
fp32 texture filtering [Gtexels/s] 54 35 33

■テセレーション

テセレーション性能を見ます。techreportのTessMarkを見ると、テセレーション性能が5割ほどの伸びています。テセレーションはSMX(厳密にはPolyMorph Engine 2.0)の数に応じて増えます。TeslaのようなGPGPUにしか使わない場合ただの無駄機能になってしまうのですが、そんなことは気にせず載せてきたNVIDIAはなかなかワイルドです。

GPU Titan GTX680 HD 7970
理論値[Gtris/s] 4.4 4.2 2.1
TessMark X16 49689 34055 36127
TessMark X32 29292 19387 15639
TessMark X64 12708 8503 4853

—-

■3DMark Vantage Feature Test

困ったことにtechreportとmynaviで全然違います。Parallax occlusion mappingがやたら遅かったり、SLIやCFで上がるはずのパフォーマンスが下がったりしていて、考察できるような状態ではないです。とりあえず、TitanはどのベンチマークでもGTX680から40%程度パフォーマンスが向上していることは分かります。

techreport版

GPU Titan GTX680 HD 7970
Parallax occlusion mapping 140 96 134
Cloth 92 62 65
Particle 143 101 102
Perlin noize 303 188 276

mynavi版

GPU Titan GTX680 HD 7970
Parallax occlusion mapping 16.9 13.8 13.4
Cloth 138.5 95.9 126.7
Particle 94.1 67.6 115.8
Perlin noize 148.3 110.4 98.2

■Sandra 2013 汎用処理

処理の中身はよく分からないけどGPGPU性能を見るベンチマーク。4gamer、mynavi、tom’s hardwareの3サイトでベンチマーク結果が公開されています。4gamerとtom’s hardwareはほとんど同じ結果ですが、manaviのほうは結果が悪いです。CPUなどの環境の違いで変わってくるので不思議ではないのですが、とりあえず両方の結果を載せます。

32bit小数ではTitanよりRadeon HD 7970の方が速く、64bit小数ではTitanの方が速いです。相変わらずOpenCLとDirectComputeでブレがありまくりです。GeForceについては、32bitではDirectCompute>CUDA>OpenCLで、64bitではCUDA=OpenCL>>>DirectComputeです。Radeonでは常にOpenCLの方が速いです。

それにしてもmynaviはDoubleの1/8クロック有効と無効で1割以下の差がないのが気になります。クロック差を考えたら2割弱の差がないとおかしいのですが。

tom’s hardware

GPU Titan Titan(Double) GTX680 HD 7970
FP32 OpenCL 4.000 3.330 2.420 5.150
FP64 OpenCL 0.330 1.870 0.213 1.530

mynavi

GPU Titan Titan(Double) GTX680 HD 7970
FP32 OpenCL 3.27 2.91 2.19 4.86
FP32 DirectCompute 4.85 4.48 3.22 3.31
FP32 CUDA 3.94 3.67 2.88 NA
FP64 OpenCL 0.31 1.71 0.19 1.23
FP64 DirectCompute 0.11 1.11 0.08 0.66
FP64 CUDA 0.34 1.84 0.21 NA

■Sandra 2013 暗号

AES256暗号化、AES256復号、SHA-256ハッシュ化の速度を見ます。整数演算だけなので、浮動小数点数の能力は関係ありません。tom’sは有効桁数が少なすぎるので、manaviのみ示します。太字は各処理・各GPUのなかで最も速かった値です。

相変わらずRadeonのOpenCLがやたら速いです。GK110の方が40%もコア数が多いのに、なんでこんなに違うのか不思議でしょうがありません。考えられるのは、整数シフトと型変換のスループットです。特にAESやSHAはシフト(と論理演算)を沢山使います。GCNがそれらを何クロックでできるのか不明ですが、もしかしたら1クロックでできるのかもしれません。

シフトといえば、GK110はGK104よりスループットが2倍速くなりました(命令スループット参照)。AES復号やSHAが2倍以上速いのは、単にコア数が増えたからだけではなく、シフト演算の高速化が影響したからだと思われます。

DirectComputeとOpenCLに差があるのも不思議です。DirectComputeは32bitの整数型しか用意されていないので、8bit単位のアクセスでは遅くなるはずです。なので、SHAの結果がどうも納得できません。

GPU Titan Titan(Double) GTX680 HD 7970
AES Enc OpenCL 12.30 10.40 7.28 28.80
AES Enc DirectCompute 10.47 9.27 4.81 17.78
AES Enc CUDA 11.15 10.00 8.19 NA
AES Dec OpenCL 16.23 15.47 7.18 28.88
AES Dec DirectCompute 13.32 8.88 4.71 18.19
AES Dec CUDA 10.96 10.25 8.38 NA
SHA OpenCL 9.84 8.47 4.72 28.24
SHA DirectCompute 16.92 13.13 6.11 13.46
SHA CUDA 11.57 10.46 5.69 NA

■Sandra 2013 Video Shader

マンデルブロ集合をHLSL/GLSLを使って描画するベンチマークらしいです(Dynamic  Parallelizmは非使用)。マンデルブロ集合の計算は、乗算や比較・分岐の比率が高くなります。

32bit浮動小数はHD 7970が、64bit浮動小数はTitanが若干速いです。64bitの方はTitanとHD7970のTFLOPS値(1.13 vs 1.00)の差を考えれば納得できます。しかし32bitのTFLOPS値は4.5 vs 4.0でTitanのほうが速くないとおかしいので、Titanの方が効率が悪いことになります。とはいえGTX680の3.09TFLOPSからはFLOPS値に見合うだけの性能アップをしていることから、Titanが悪いのではなくKepler自体の問題に思えます。しかし考えられる原因が多すぎてこれだけでは何とも言えません。

さっきとは打って変わって、Direct3DとOpenGLで差が全くありません。これが普通なのですが。

GPU Titan Titan(Double) GTX680 HD 7970
FP32 D3D11 1.60 1.37 1.00 1.63
FP32 OpenGL 1.58 1.36 1.00 1.63
FP64 D3D11 0.17 0.87 0.11 0.80
FP64 OpenGL 0.17 0.86 0.11 0.80

■PCI Express

GK110はPCI Express Gen3に対応します。しかし、Intelのチップセット(X79やZ77など)では強制的にGen2まで落とされます。実際mynaviではGen2で動作していることがベンチマークから読み取れますし、Legit Reviewsというサイトに記載されているGPU-ZのスクリーンショットではGen2と判定されています。一方、ITmediaやASCIIはGen 3と判定されており、よくわかりません。

■まとめ

GK110はGK104に比べ、倍精度浮動小数点数演算と整数シフトのスループットが改善されました。GPGPU能力はGK104から順当に向上していますが、処理によってはGCNより効率が悪いままのものもあります。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中