转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=887

自从NVIDIA的GTX480推出以来,网上能见到不少对比评测。但大家一般都是用3DMark之类大型的评测方法,得到的结果比较笼统。我在这里打算评测的方法是用DX SDK Feb2010的sample,对GPU的不同模块分开评测。这样的结果对于图形相关人员更有意义。

我的评测打算分三轮进行,分别评测传统图形流水线,DirectCompute和Tessellation的性能。测试的机器是两台Dell T5400 Workstation(Xeon E5440 4-core,4GB内存),分别装一块GTX480和一块HD5870。两块显卡都是公版配置。操作系统是Win7 64bit,使用传统界面以消除Areo界面的PS开销。显卡驱动分别是Forceware 197.41和Catalyst 10.3。

第一轮 传统图形流水线

第一论测试的是两块显卡在游戏常见的场景中的图形性能表现,选用的sample是Cascaded shadow depth map,contact hardening shadows, variance shadows 11和Dynamic shadow linkage 11。测试结果如下:

NVIDIA Geforce GTX 480 ATI Radeon HD 5870
CascadedShadowDepthMap 402.7 366.4
Contact Hardening Shadows 716.8 740.5
VarianceShadows11 391.2 346.5
DynamicShaderLinkage11 1151.2 998

从结果可以看出,对于传统图形流水线,GTX480 有一点优势。尤其是CSM和VSM这两个在不少游戏中都是用到的方法,GTX480分别比HD5870快了10%和13%。Dynamic shader linkage 11这个sample值得注意。Dynamic shader linkage是个D3D11的新功能,相当于让shader也可以使用虚函数的概念。在使用的时候只要访问接口,而实现部分可以动态link上去。对于 对付shader的组合爆炸有为有用。在这个sample里GTX480快了15%。Contact hardening shadows是唯一让GTX480败阵的例子(也许是因为这是个来自AMD的demo)。它的shader里面用了GatherCmpRed这样 D3D11新函数(ATI再D3D10.1里就开始发展Gather),而且涉及到大量的向量计算,更适合于HD5870的架构。

第一轮,GTX480小胜。

第二轮 DirectCompute

DirectCompute 是D3D11的重头戏,第一次把GPGPU带入了主流图形API。那么,在这两块显卡上,DirectCompute的性能又如何呢?这次选择的例子是 NBodyGravityCS11,AdaptiveTessellationCS40和HDRToneMappingCS11。注 意,AdaptiveTessellationCS40是用compute shader来实现tessellation,并非用硬件的tessellator,所以在这一轮出现。测试结果如下:

NVIDIA Geforce GTX 480 ATI Radeon HD 5870
NBodyGravityCS11 275.6 364.7
AdaptiveTessellationCS40 554.4 837.4
HDRToneMappingCS11 1710.9 3393.3

很显然,HD5870完胜,分别领先32%,51%和98%!这足以说明,ATI对DirectCompute的支持相当好。比如HDRToneMappingCS11是可以切换使用PS还是CS来进行post process的,在HD5870上,CS比PS稍微快一点,而在GTX480上,CS只有PS一半多点的速度。值得注意的是,从G80开始,NV的显卡在从GPGPU切换回Graphics pipeline的时候总会有一个不可忽略的开销。这使得程序如果需要来回切换,性能会受到很大的影响。不光DirectCompute如此,CUDA也是如此。

眼尖的同学一定会发现,OIT11这个sample用的也是DirectCompute,为什么没有参与?是因为我发现在GTX480上该sample运行结果不对,没法记入统计。

第二轮,HD5870大胜。

第三轮 Tessellation

D3D11在图形流水线中增加了Tessellation部分,使得Subdivision,曲面等精细活也可以简单地在实时渲染中呈现出来。NVIDIA宣传的时候非常注重Tessellation,号称最高比HD5870快8倍。是驴是马拉出来遛遛才知道,以下是测试结果:

NVIDIA Geforce GTX 480 ATI Radeon HD 5870
DetailTessellation11 1065.1 743.2
PN-Triangles 731.4 715.6
SimpleBezier11 1217.9 1165.1
SubD11 471.7 360.9

眼镜小跌了一把。在这几个sample中,GTX480最多领先43%。其中两个简单的例子还只是<5%的优势。也许是因为这些sample都太简单,发挥不出GTX480的优势。

第三轮,GTX480小胜。

从这次的分块测试结果可以看出,DirectCompute和Tessellation分别是ATI和NV的强项,两者兼具的显卡还没降临地球。如果你做的是纯图形渲染,GTX480是个好选择。如果要作GPGPU+渲染,HD5870则好得多。