2年前,D3D11顯卡剛出來沒多久的時候,我曾經做過一個《NV GTX480對ATI HD5870:另一個視角》,用DX SDK的D3D11例子來對當時巔峰的顯卡進行各個單項的性能評測。時過境遷,現在NV GTX680已經上市,硬指標對比如下表所示。
GTX 680 | GTX 580 | |
---|---|---|
制程(nm) | 28 | 40 |
晶體管數量(Million) | 3540 | 3000 |
Die大小(mm^2) | 294 | 520 |
顯存(MB) | 2048 | 1536 |
SM數量 | 8 | 16 |
核心配比 | 1536:128:32 | 512:64:48 |
核心頻率(MHz) | 1006-1058 | 772 |
shader頻率(MHz) | N/A | 1544 |
顯存頻率(MHz) | 6008 | 4008 |
像素填充率(GP/s) | 32.2 | 37.06 |
紋理填充率(GT/s) | 128.8 | 49.41 |
顯存帶寬(GB/s) | 192 | 192.4 |
總線寬度(bit) | 256 | 384 |
API | D3D11.1 OpenGL 4.2 OpenCL 1.2 |
D3D11.1 OpenGL 4.2 OpenCL 1.1 |
Gflop/s | 3090.4 | 1581.1 |
TDP(watts) | 195 | 244 |
Gflop/s-watt | 15.85 | 6.48 |
從指標上可以看出,GTX680的 SP數量急劇提高(512->1536),但SM數量見到原來的一半(16->8),所以每個SM內的SP個數從32猛增到192。這對scheduler是極大的考驗。
由於配置上的較大不同,性能能有多高看理論值不行,還是得實際跑程序才能知道。這次的評測仍然分三輪進行,分別評測傳統圖形流水 線,DirectCompute和Tessellation的性能。測試的機器仍是兩年前的Dell T5400 Workstation(Xeon E5440 4-core,4GB內存),依次裝上GTX580和GTX680。兩塊顯卡都是Zotac的公版。操作系統是Win7 64bit,使用傳統界面以消除Areo界面的PS開銷。顯卡驅動分別是Forceware 295.73和Forceware 301.10。DX SDK的版本是June 2010。
第一輪 傳統圖形流水線
第一論測試的是兩塊顯卡在游戲常見的場景中的圖形性能表現,選用的sample是Cascaded shadow depth map,contact hardening shadows, variance shadows 11和Dynamic shadow linkage 11。測試結果如下:
GTX 680 | GTX 580 | |
---|---|---|
CascadedShadowDepthMap | 332.04 | 337.63 |
Contact Hardening Shadows | 1225.67 | 851.30 |
VarianceShadows11 | 305.40 | 309.83 |
DynamicShaderLinkage11 | 2716.49 | 2620.81 |
很失望吧,除了Contact hardening shadows,GTX 680並沒有比GTX 580提高多少,甚至還有所下降。但領先的那個例子恰恰是計算量和帶寬要求最大的。
第二輪 DirectCompute
盛傳GTX 680的GPGPU能力不如從前,第二輪就來測試DirectCompute這個GPGPU能力。
GTX 680 | GTX 580 | |
---|---|---|
NBodyGravityCS11 | 675.10 | 374.28 |
AdaptiveTessellationCS40 | 1031.88 | 938.46 |
HDRToneMappingCS11 | 3308.63 | 2815.89 |
GTX 680在三個例子中都得到了領先的地位,最明顯的是NBodyGravityCS11,達到了1.8x的提升。我認為和這個例子的計算量大、但分支較少有關。一個SM包含那么多的SP,對於分支diverse的代價是很大的。
第三輪 Tessellation
Tessellation一直是NV的強項,這次GTX 680的tessellator再次有了提升。
GTX 680 | GTX 580 | |
---|---|---|
DetailTessellation11 | 1077.48 | 983.20 |
PN-Triangles | 2481.89 | 2376.34 |
SimpleBezier11 | 4373.63 | 3884.52 |
SubD11 | 923.32 | 578.62 |
也達到了全部領先的程度。最復雜的SubD11提升1.6x。
以上三個測試可以看到,GTX 680並沒有傳說中的GTX 580×3的性能,至少,在DX SDK sample的分辨率和復雜程度下沒達到。但是可以看到的一個趨勢是,對計算量和帶寬要求越大的例子,GTX 680的提升就越大,所以其實在大部分時候它的能力是沒有完全發揮出來的。分支的程度也比較影響GTX 680,所以應該在shader/kernel級別明智使用分支。另一個重要的事情在於驅動,對比2年前的測試,雖然GTX 580比GTX 480只是多了32個SP,但由於驅動的改進,性能卻有非常明顯的提升,部分例子甚至達到了3倍。目前GTX 680的驅動剛處於非常初級的狀態,相信過一段時間成熟了才會達到GTX 680的最佳狀態。
額外測試
在測完DX SDK的例子之后,我與順便測試了KlayGE的例子。這里選了兩個比較有代表性的例子,分別是Deferred和Forward流水線。分辨率是1280×800,高於DX SDK sample的800×600。
GTX 680 | GTX 580 | |
---|---|---|
Deferred rendering | 150.55 | 139.84 |
Shadow cubemap | 267.38/330.78 | 259.08/239.07 |
Deferred rendering的例子情況類似於前面的評測。比較有趣的是Shadow cubemap的例子。和《不爭氣的geometry shader》 一樣,這里分別測試了6 pass cubemap和1 pass cubemap。斜杠之前的FPS是6 pass的。在以前的顯卡上,不管是NV還是AMD,通過geometry shader完成render to cubemap都比6 pass還慢。但在GTX 680上,GS終於翻身了,徹底打敗6 pass的做法。從這個角度也可以看出GTX 680的硬件性能提升。
總的來說,GTX 680並沒有官方宣傳的“恐怖”性能。但憑借工藝的進步,在那個Die大小的情況下能達到這樣的速度是很不容易的。期待下半年的旗艦GK110。