
从数量到质量全面转型
● 从数量到质量的全面转型
每次图形芯片换代总是体现出芯片厂商基于新标准对更高画质和更高渲染效率的追求,最令人兴奋的Direct3D的新功能总是一次次震撼我们的双眼。而在这些兴奋的背后,离不开图形芯片在底层性能方面的提升。我们今天所要展示的底层性能,不基于指令和数据级别,而是通过微软在DirectX SDK开发包中给出的几种测试工具来考验我们的显卡。
围绕微软提出的DirectX图形应用程序接口,NVIDIA和ATI历经长时间对抗都在不断改进其芯片架构。从DirectX 9开始支持更长的指令,像素单元分支操作和32位浮点,到DirectX 10统一了Pixel Shader(顶点着色器)、Vertex Shader(像素着色器)和Geometry Shader(几何着色器)三种着色器,再到我们今天看到的微软此次推出全新图形API——DirectX 11,它的目的更加明确,就是能够充分利用显卡资源,旨在游戏以及通用计算方面达到更高的执行效率。
广受欢迎的DirectX 11游戏——尘埃2
事实上芯片变大有两个主要原因。一个是因为性能的增加。要提高运算性能就会需要更多的资源,这会增加晶体管的数量。另一个就是为了发展可编程化。需要让单一的可编程处理器包括个别进行处理的固定功能硬件,这必然也会增加晶体管数量。可是这样会让性能出现大幅度下滑,因此为了保持同样的性能也需要大幅度增加运算资源。结果就是对于GPU的情况需要从固定硬用向可编程硬件转换,晶体管数和核心尺寸也因此而增加。
直到今天我们看到的DirectX 11出现,这个问题得到了一个平衡的解决方案。DirectX 10带来了众多绚丽无比的新特效,但“滥用”各种特效最终导致GPU不堪重负。在DirectX 10经历了种种波折,瓶颈尽显时,微软也开始将重心集中在如何提升算法和效率上面,而不是一味的加入新特效或提高模型复杂度。因此我们看到的DirectX 11,已经将技术重心放在如何用最小的硬件开销在先进图形技术的辅助下实现最佳的渲染效果。
DirectX 11发布后,人们发现微软并没有在Shader Model方面做出重要提升,虽然版本升至Shader Model 5.0,但是更重要的是它实际上可以被看作是DirectX 10和DirectX 10.1的功能补全,你也可以认为它是DirectX 10和DirectX 10.1的超集,如果换个角度大胆设想,我们今天看到的DirectX 11才是微软想要的DirectX 10完美形态。
在今天的文章中,我们将会在《浅析DirectX11技术带给图形业界的改变》的基础之上再次对高端主流显卡基于DirectX的底层性能做回顾,同时我们会分析几种热门技术对于图形领域的重要影响和硬件结构的适应性。当然我们也不忘记使用14款大家熟悉的显卡来对基于DirectX的底层性能做全面分析。相信通过这篇文章,用户能够获取更多有用的信息和资料,对以后的显卡选购也会做出更明智的判断。
濮元恺所写过的技术分析类文章索引(持续更新) | |||
显卡只能玩游戏? 10年GPU通用计算回顾 |
|||
别浪费你的电脑 分布式计算在中国 |
Computex独家泄密 解析AMD下代GPU |

最令人兴奋的Direct3D新功能
● 最令人兴奋的Direct3D新功能
DirectX 11发布带来了很多令人兴奋的新特性,其中使用Computer Shader进行图形后处理和多线程渲染、乱序透明等功能都是以前的GPU硬件从未想过从未做过的。这些功能标识着GPU的发展结束了一位增强性能来获取更大浮点吞吐以适应增长的三角形数量和更复杂的Shader指令,而是转向使用使用先进渲染技术结合GPU通用计算来实现复杂特效。
回顾历次DirectX的更替过程,几乎都对GPU架构产生了颠覆性的影响,它们大部分要求GPU改变现有的着色器Shader单元结构,或者为着色器Shader单元追加资源,这些改进都是为了让GPU的指令数提升,寄存器数量增加,纹理规模提升,材质Texture精度提升。这样的改进难免带来晶体管数量的增长,也就说说GPU内部的每个着色器Shader单元变得更加庞大。
本次DirectX 11升级,我们看到以下特性是非常值得关注的:
● 着色器版本提升到Shader Model 5.0,采用面向对象的概念,并且完全可以支持双精度数据。
● Tessellation曲面细分技术获得微软正式支持,逐渐走向成熟;
● Multithreading多线程处理,让图形处理面对多线程编程环境不再尴尬;
● 提出微软自己的Compute Shader通用计算概念,把GPU通用计算推向新的巅峰;
● 新的Texture Compression纹理压缩方案,在画质损失极小的环境下带来了硬件资源的节约。
今天的测试重点是14款高端性能级显卡的DirectX 11底层性能,相信通过这篇文章,用户能够获取更多有用的信息和资料,对以后的显卡选购也会做出更明智的判断。

全新多线程渲染技术
● 全新的多线程渲染技术
虽然超线程概念已经在CPU领域发展了数十年,但大多数程序员还是直到近年来多核心CPU流行之后才开始关心程序的平行化,在此之前大部分通用代码都是简单的单线程,在这些代码里寻找并挖掘多线程化带来的性能提升是非常困难的。
为了改变这一现状,DirectX 11特性还包括很重要一点:支持多线程(multi-threading)。没错,无论是DirectX 10还是DirectX 11,所有的色彩信息最终都将被光栅化并显示在电脑显示屏上(无论是通过线性的方式还是同步的),但是DirectX 11新增了对多线程技术的支持。
从DirectX 10到DirectX 11的多线程变化
得益于此,应用程序可以同步创造有用资源或者管理状态,并从所有专用线程中发送提取命令,这样做无疑效率更高。DX11的这种多线程技术可能并不能加速绘图的子系统(特别是当我们的GPU资源受限时),但是这样却可以提升线程启动游戏的效率,并且可以利用台式CPU核心数量不断提高所带来的潜力。
在DirectX 11中,微软通过将目前单一执行的Direct 3D设备被分为三个独立的接口:设备(Device)、立即执行范畴(immediate Context)和延迟执行范畴(Deferred Context)。
这三者都被分发到各自独立的线程,而且设备和Deferred context还可以分配多个线程,负责将等待执行的任务发送给immediate Context或渲染线程。这样的设计可以将图形生成所需的资源做预先的存取。同时,CPU还可以利用显卡的多线程处理加快DirectX的处理,减少CPU的响应时间而使游戏不再受到CPU的瓶颈限制。

Compute Shader助力图形渲染
● Compute Shader助力图形渲染
微软在DirectX 11引入了DirectX Compute概念,实际上这个概念在以前就存在不少应用。DirectX Compute在通用计算领域的增强,进一步提升了GPU通用计算的动能。OpenCL是GPU通用计算的API标准,它提供了并行计算API和一个扩展的编程语言,DirectX Compute增强了GPU通用性能,但由于重点不同,它与OpenCL完全不是竞争关系,反而进一步增强了OpenCL的实用性——DirectX 11提升GPU通用性能,基于OpenCL的通用计算程序将更富效率。
DirectX Compute概念包括了我们下面即将介绍的Compute Shader技术,实际上我们可以理解为它们是一种技术,两种称谓方式。所以下文我们直接称呼这种让GPU通用计算来辅助图形处理的技术为Compute Shader技术。
GPU是图形处理器,以往的GPU通用计算需要程序员先将资料伪装成GPU可识别的图像,再将GPU输出的图像转换为想要的结果,而通过DX11中的Compute Shader通用计算,任意类型的数据(即使是非图形数据)都可以直接进行计算,而且不受图形渲染流程的束缚,可以随时写入写出,GPU通用计算的效能提高了很多。
由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。
Compute Shader图形流水线
Compute Shader主要特性包括线程间数据通信、一整套随机访问和流式I/O操作基本单元等,能加快和简化图像和后期处理效果等已有技术,也为DX11级硬件的新技术做好了准备,对于游戏和应用程序开发有着很重大的意义。
在DirectX 11以及CS的帮助下,游戏开发者便可以越过复杂的数据结构,并在这些数据结构中运行更多的通用算法。与其他完整的可编程的DX10和DX11管线阶段一样,CS将会共享一套物质资源(也就是着色处理器)。
Compute Shader可发挥的地方很多,游戏中可以使用GPU进行光线追踪、A-Buffer采样抗锯齿、物理特效、人工智能AI等游戏特效运算。在游戏之外,程序员也可以利用CS架构进行图像处理、后期处理(Post Process)等。
Compute Shader技术是微软DirectX 11 API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。
在上图中,图一表示了Compute Shader做图像后处理(Post Process),图片是《地铁2033》的游戏截图,利用Compute Shader技术做景深处理可以得到更好的效率。图二表示利用Compute Shader技术做IA人工智能。图三表示CUDA或者未来的Compute Shader结合OptiX技术做光线追踪。图四表示SPH流体模拟,流体的模拟,是典型的通用计算应用实例,对Shader性能要求较高。
用更加通俗易懂的话来解释,Compute Shader技术实际上就是一道把GPU通用计算和传统图形处理沟通起来的桥梁。未来更多的特性特效将通过GPU通用计算来实现。借助这一技术GPU中的流处理器单元可以变为类似CPU的计算中心,处理一系列如后期渲染、图像质量增强、高质量阴影过滤、景深效果以及高级环境光遮蔽效果。
Computer Shader的初衷,就是使用通用计算的手段来进行后处理。由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。

Compute Shader技术处理景深
● Compute Shader技术处理景深
景深是人眼视觉系统中成像的重要特征。人眼对现实世界成像时,自动调节焦距以适应不同的取景距离,眼睛注视的物体便处于聚焦平面(focus plane)上,因此清晰成像于视网膜;而处于聚焦平面之外的物体,成像便模糊不清。透镜(瞳孔)的焦距、直径,以及物距共同决定了物体成像时的模糊程度。从Shader Model 2.0标准开始,景深处理已经能够被GPU硬件执行了,而进入DirectX 11时代这种执行效率在Compute Shader技术支持下得到了迅猛提升。
以往的虚拟现实系统中,几乎都未引入景深效果,整个场景成像后都是清晰的,这样,整个场景则显得不够真实、自然,并且缺少景深所带的深度暗示。加人景深效果,有助于立体照片的合成以及缓解虚拟现实系统中常有的眼睛疲劳,增强场景的真实感、沉浸感。
使命召唤4游戏封面
CS技术原则上可以处理一切效果。不过现在用得最多的,大体上是DOF(Depth of Field),也就是景深效果。HDR(High-Dynamic Range)高动态光照渲染目前已经不需要CS技术来实现,但是用CS技术来实现这些效果还是非常划算的。景深主要适合于第一人称视角游戏(First-person games)如使命召唤等游戏,景深效果可以让玩家沉浸在富于电影级别特效体验的游戏中,高效处理景深将成为实现真实游戏特效的重要环节。
Compute Shader可发挥的地方很多,游戏中可以使用GPU进行光线追踪、A-Buffer采样抗锯齿、物理特效、人工智能AI等游戏特效运算。在游戏之外,程序员也可以利用CS架构进行图像处理、后处理(Post Process)等。
发布DX11显卡之后不久AMD放出了一个名为ladybug的DX11 Demo,其中就有Depth of Field效果的演示。
在硬件支持Compute Shader之后,相应的硬件必须要比当代硬件更加灵活,因为在运行CS代码的时候,硬件必须支持随机读写、不规则列阵(而不是简单的流体或者固定大小的2D列阵)、多重输出、可根据程序员的需要直接调用个别或多个线程、32k大小的共享寄存空间和线程组管理系统、粒数据指令集、同步建构以及可执行无序IO运算的能力。

Directcompute技术处理透明顺序排序
● DirectCompute技术处理透明顺序排序
同时借助Direct Compute技术,DirectX 11可以实现次序无关透明。即物体不管以任何顺序进行摆放,GPU都能按照正确的前后关系计算透明。这个特性完全模拟了真实世界的透明行为。OIT次序无关透明使用了 Direct Compute 中的原子操作和 append buffer,在 GPU 内部完成 per-pixel fragment lists 和 sort,性能和精度都比传统的 alpha blending 有很大的提升。
简单的Alpha透明,效果显得杂乱无章;OIT透明,物体轮廓骨架显得非常清晰
上图所展示的Mecha主要是展示的OIT(order-independent transparency透明顺序排序)技术。以往的DirectX中对于透明物体的叠加处理是非常复杂的,因为透明物体的层次关系相当复杂,特别是烟雾、火、水、玻璃等等东西混合在一起的时候,程序很难判定物体的层次顺序。
这些以前都依赖程序员的手工指定,并且有些透明物体像烟雾、火焰等等这些透明的物体没有严格形状模型,并且变化相当迅速,处理这些透明物体会消耗程序员和GPU相当大的精力和性能。
微软在DirectX 11中引入了OIT技术来实现多个透明物体的快速混合,通过OIT技术可以很好的应付多重乱序透明处理,从而实现实现透明物体的快速正确排序。
实际上OIT技术是DirectCompute11中的一部分,OIT的对透明物体排序的实现都是通过DirectCompute11来实现的,并且实现起来非常简单。另外,在OIT中微软首次提到了使用原子操作,至于原子操作的具体意义对于非图形编程人员就不需要了解了,另外微软还提到OIT还提供了单独的缓存来提高处理透明物体的排序。
OIT效果的运算方面,原则上是可以通过流处理器单元来独立实现的。但是DirectX 11中定义OIT效果需要原子操作。基本上,DirectX 11新引入的几种特效中,除了曲面细分之外其他的都走得Compute Shader技术和原子操作。微软的说明里OIT是走CS5.0路径的,也就是说原子操作性能将大幅度影响到OIT效果的最终表现。
事实上很多测试结果也说明OIT效果确实可以从存储系统尤其是cache的优化中得到显著的好处,原子操作是很依赖Cache和Shared Memory。如果是传统手段实现的话,肯定是一层一层的贴图,像这种顺序比对忽略的操作肯定是要一来原子操作+数列和归约的。原子操作跟内存控制一样,必须通过固定单元来实现,Shader只是运算器,不能达成控制功能。

本次4大测试项目简介(1)
● 本次4大测试项目简介(1)
我们针对上文分析的DirectX 11新功能和全新的实现方法,进行了4个项目的测试,本次测试没有任何曲面细分性能,所以我们没有涉及到GPU的几何处理器单元特别是Tessellation性能的单项测试。我们将测试重点放在多线程渲染、Compute Shader实现后处理和Direct Compute技术实现次序无关透明。这4个测试项目较为全面的反应了一颗支持DirectX 11的GPU如何高效运用新API所提出的技术特性,同时可以检验GPU芯片对于新技术的支持程度。
14款显卡首先要经历的是DirectX 11 SDK Nbody Gravity项目,DirectX 11 SDK N Body Gravity应用于高级实时渲染的3D图形和游戏,它首次出现在2007年的SIGGRAPH会议中所表现的三个应用之一。
DirectX 11 SDK Nbody Gravity项目源于Nbody仿真,它在数值上近似地表示一个多体系统的演化过程,该系统中的一个体(Body)都持续地与所有其他的体相互作用。一个相似的例子是天体物理学仿真,在该仿真中,每个体代表一个星系或者一个独立运行的星系,各个体之间通过万有引力相互吸引,如图所示。在很多其他计算机科学问题中也会用到N-body仿真,例如蛋白质折叠就用到Nbody仿真计算静电荷范德华力。其他使用Nbody仿真的例子还有湍流流场仿真与全局光照计算等计算机图形学中的问题。
该示例显示了计算系统中的所有粒子之间的相互作用。在这种情况下,涉及的互动之间所有可能的paritcle对重力的影响。在计算N*N相互作用的过程中,我们使用了Splatting。
在NVIDIA当年最初G80架构的Geforce 8800GTX GPU上计算每秒100多亿个引力系统的性能,是一个经过高度优化的CPU实现的性能的50多倍。Nbody仿真问题的研究贯穿了整个计算科学的历史。在20世纪80年代,研究人员引进了分层和网格类型的算法,成功降低了计算复杂度。自从出现了并行计算机,Nbody仿真的并行化也开始被研究了。同时从CPU到GPU的现有研究成果不仅仅是为了降低运算的功耗,还可以降低分层度,节省远域计算的时间。
N Body Gravity测试具备两个显著的特点,首先是高并行度,该测试拥有大量相互碰撞的粒子,粒子之间会产生复杂而又数量较多的力量变化。同时该测试拥有较高的运算密度,GPU在处理此类问题时可以有效展现其强大的并行运算能力。
MultiThreadedRendering11项目是一个典型的多线程渲染测试,此示例说明了如何提升多线程环境中的分割渲染效率。全新的Direct3D 11渲染功能的核心,拥有一个驻留在D3D设备的新接口,称为D3D设备上下文。D3D设备上下文可以完成两种效果之一:立即或延迟。一个直接的上下文命令直接提交到设备驱动程序,如传统的渲染。递延范围内分批为在命令列入名单的命令,该命令列表可以执行在任何时候通过一个即时的范围内,可能在不同的线程运行。
通过指定的整体场景不同片段推迟背景不同(在不同的CPU内核上运行),GPU在多核CPU或者多线程CPU的帮助下可以实现显着的性能提高。借助这种技术,只要开发者采用DirectX 11作为开发平台,那么代码本身就能直接支持多核平台,DirectX 11在底层接管了多核平台的资源分派问题。DirectX 11预示着多线程游戏真正步入现实,我们才可以说多核心处理器被真正派上了用场。对于一套四核游戏平台,当某个渲染场景中有人像和它的三个镜像,DirectX 11就会启动四个线程进行并行处理。

本次4大测试项目简介(2)
● 本次4大测试项目简介(2)
HDRToneMapping CS11测试项目同样是针对Computer Shader能力进行测试,该项目展示了如何设置和运行计算着色器(Computer Shader),这是最令人兴奋的Direct3D 11的新功能之一。虽然该测试只是检验了这项技术在HDR(High-Dynamic Range)高动态光照渲染中的加速能力,但是这个概念应该很容易扩展到其他后处理算法,以及更一般的计算。
HDRToneMappingCS11显示了在CS用做快速并行图像上减少计算平均照度,然后使用计算照度做色调映射。直到真正的Direct3D 11硬件出现,样本只运行在软件参考设备。做好后处理(Post Process),以及更普遍的计算使用的CS。当然该测试同样可以使用Pixel Shader单元实现后处理,不过我们鼓励开发者开始与现在的CS实验。
在CS是书面向任何输出的资源也被称为散射能力(位置的能力)。这使得更广泛的和复杂的算法是硬件实现上的图形。在CS提供机制,以共享数据,以及线程之间同步执行。这些能力显着降低冗余取数操作,特别是对算法的缓冲区或纹理,涉及内核或减少计算。
有一个专门的Direct3D 11的API明确推出GPU上的线程称为CS数目。这使得算法的线程上执行的最佳数量,并且还提供了可预测的内存访问和寄存器的使用。这导致更好的性能和优化创造更多的可能性。在CS是不附加任何具体的图形流水线阶段,它有它自己的一套状态。这意味着你的渲染管线和后处理单元是由相互分离的代码,允许创造,更易于维护。
OIT11示例演示了在Direct3D 11独立透明度的技术。换句话说,基元(Primitives),可以得出在任何秩序,透明度将正确处理。该技术提供的作品,因为它们是由缓冲透明的像素。这些像素,然后按深度,并在后端到前端与tranparency秩序呈现。本示例使用计算着色器生成一个前缀之和排序前最后的渲染的像素片段。

性能测试的硬件、软件平台状况
● 性能测试的硬件、软件平台状况
● 测试系统硬件环境
测 试 平 台 硬 件 | |
中央处理器 | Intel Core i7-870 |
散热器 | Thermalright Ultra-120 eXtreme |
内存模组 | Apacer 猎豹二代双通道套装/PC3-12800 |
(SPD:1757 9-9-9-24-1T) | |
主板 | ASUS P7P55D |
(Intel P55 + ICH10R Chipset) | |
显示卡 | |
NVIDIA 产 品 | |
GeForce GTX 480 | |
(GF100 / 1536MB / 核心:700MHz / Shader:1401MHz / 显存:3696MHz) | |
GeForce GTX 470 | |
(GF100 / 1280MB / 核心:607MHz / Shader:1215MHz / 显存:3348MHz) | |
GeForce GTX 465 | |
(GF100 / 1024MB / 核心:607MHz / Shader:1215Mhz 显存:3208 Mhz) | |
GeForce GTX 460 1024MB | |
(GF104 / 1024MB / 核心:675MHz / Shader:1350Mhz 显存:3600 Mhz) | |
GeForce GTX 460 768MB | |
(GF104 / 768MB / 核心:675MHz / Shader:1350Mhz 显存:3600 Mhz) | |
GeForce GTX 285 | |
(GT200 / 1024MB / 核心:648MHz / Shader:1476MHz / 显存:2848MHz) | |
GeForce GTX 275 | |
(GT200 / 896MB / 核心:633MHz / Shader:1404MHz / 显存:2268MHz) | |
GeForce GTX 260 | |
(G200 / 896MB / 核心:576MHz / Shader:1242Mhz 显存:1998 Mhz) | |
GeForce GTS 250 | |
(G92 / 512MB / 核心:738MHz / Shader:1836MHz / 显存:2200MHz) | |
Radeon HD 5870 | |
(RV870 / 1024MB / 核心:850MHz / Shader:850MHz / 显存:4800MHz) | |
Radeon HD 5850 | |
(RV870 / 1024MB / 核心:725MHz / Shader:725MHz / 显存:4000MHz) | |
Radeon HD 5830 | |
(RV870 / 1024MB / 核心:800MHz / Shader: 800MHz / 显存:4000MHz) | |
Radeon HD 5770 | |
(RV840 / 1024MB / 核心:850MHz / Shader: 850MHz / 显存:4800MHz) | |
Radeon HD 4870 | |
(RV770 / 1024MB / 核心:780MHz / Shader:780MHz / 显存:3700MHz) | |
硬盘 | Hitachi 1T |
(1TB / 7200RPM / 16M | |
电源供应器 | AcBel R8 ATX-700CA-AB8FB |
(ATX12V 2.0 / 700W) | |
显示器 | DELL UltraSharp U2410 |
(24英寸LCD / 1920*1200分辨率) |
Thermalright Ultra-120 eXtreme
我们的硬件评测使用的内存模组、电源供应器、CPU散热器均由COOLIFE玩家国度俱乐部提供,COOLIFE玩家国度俱乐部是华硕(ASUS)玩家国度官方店、英特尔(Intel)至尊地带旗舰店和芝奇(G.SKILL)北京旗舰店,同时也是康舒(AcBel)和利民(Thermalright)的北京总代理。
● 测试系统的软件环境
操 作 系 统 及 驱 动 | |
操作系统 | |
Microsoft Windows 7 Ultimate RTM | |
(中文版 / 版本号7600) | |
主板芯片组 驱动 |
Intel Chipset Device Software for Win7 |
(WHQL / 版本号 9.1.1.1125) | |
显卡驱动 | |
AMD Catalyst for Win7 | |
(WHQL / 版本号 10.3) | |
NVIDIA Forceware for Win7 | |
(WHQL / 版本号 258.96) | |
NVIDIA Forceware for GTX460 | |
(Beta / 版本号 258.96) | |
|
2560*1600_32bit 60Hz |
测 试 平 台 软 件 | ||
3D合成 测试软件 |
3Dmark 06 | |
Futuremark / 版本号1.2 | ||
3Dmark Vantage | ||
Futuremark / 版本号1.2 | ||
3D游戏 测试项目 | ||
微软DirectX SDK | DirectX 11 SDK Nbody Gravity | |
Microsoft / 版本号 Demo | ||
MultiThreadedRendering11 | ||
Microsoft / 版本号 Demo | ||
HDRToneMapping CS11 | ||
Microsoft / 版本号 Demo | ||
OIT 11 | ||
Microsoft / 版本号 Demo | ||
辅助测试软件 | Fraps | |
beepa / 版本号 3.2.3 |

DirectX 11 SDK Nbody Gravity
● DirectX 11 SDK Nbody Gravity
DirectX 11 SDK Nbody Gravity项目源于Nbody仿真,它在数值上近似地表示一个多体系统的演化过程,该系统中的一个体(Body)都持续地与所有其他的体相互作用。一个相似的例子是天体物理学仿真,在该仿真中,每个体代表一个星系或者一个独立运行的星系,各个体之间通过万有引力相互吸引,如图所示。
在很多其他计算机科学问题中也会用到N-body仿真,例如蛋白质折叠就用到Nbody仿真计算静电荷范德华力。其他使用N-body仿真的例子还有湍流流场仿真与全局光照计算等计算机图形学中的问题。

MultiThreadedRendering11单线程
● MultiThreadedRendering11单线程
MultiThreadedRendering11项目是一个典型的多线程渲染测试,此示例说明了如何提升多线程环境中的分割渲染效率。全新的Direct3D 11渲染功能的核心,拥有一个驻留在D3D设备的新接口,称为D3D设备上下文。
D3D设备上下文可以完成两种效果之一:立即或延迟。一个直接的上下文命令直接提交到设备驱动程序,如传统的渲染。递延范围内分批为在命令列入名单的命令,该命令列表可以执行在任何时候通过一个即时的范围内,可能在不同的线程运行。
第一部分的测试使用了单线程模式,线程数量可以在程序中自动控制。我们通过监控任务管理器看到单线程模式下,一颗4核心CPU的占用率大约在25%。也就是说只有一个CPU核心带领GPU执行渲染任务,这是以往DirectX的渲染模式。

MultiThreadedRendering11多线程
● MultiThreadedRendering11多线程
MultiThreadedRendering11项目是一个典型的多线程渲染测试,此示例说明了如何提升多线程环境中的分割渲染效率。全新的Direct3D 11渲染功能的核心,拥有一个驻留在D3D设备的新接口,称为D3D设备上下文。
D3D设备上下文可以完成两种效果之一:立即或延迟。一个直接的上下文命令直接提交到设备驱动程序,如传统的渲染。递延范围内分批为在命令列入名单的命令,该命令列表可以执行在任何时候通过一个即时的范围内,可能在不同的线程运行。
第二次测试我们开启了多线程渲染模式,我们看到CPU占用率提升到了50%左右,其中一颗核心负载将近100%,其他核心负载也相应有所提升。

HDRToneMapping CS11
● HDRToneMapping CS11
HDRToneMapping CS11测试项目同样是针对Computer Shader能力进行测试,该项目展示了如何设置和运行计算着色器(Computer Shader),这是最令人兴奋的Direct3D 11的新功能之一。虽然该测试只是检验了这项技术在HDR(High-Dynamic Range)高动态光照渲染中的加速能力,但是这个概念应该很容易扩展到其他后处理算法,以及更一般的计算。
这项测试我们选择了DirectX 11所推荐的Computer Shader渲染模式,在测试中NVIDIA显卡出现了负载不饱和状态,所以整体得分不理想。联系到NVIDIA在Fermi架构中对并行计算的支持和多级多分配多线程能力,这个得分还是比较让人失望的,我们只能希望NVIDIA通过新驱动开发继续优化带有缓存的Fermi架构。

OIT11次序无关透明与测试总结
● OIT11次序无关透明与总结
OIT11示例演示了在Direct3D 11独立透明度的技术。换句话说,基元(Primitives),可以得出在任何秩序,透明度将正确处理。该技术提供的作品,因为它们是由缓冲透明的像素。这些像素,然后按深度,并在后端到前端与tranparency秩序呈现。本示例使用计算着色器生成一个前缀之和排序前最后的渲染的像素片段。
在DirectX 11 SDK Nbody Gravity项目中,A卡全线表现优异,HD5870在这种高密度运算中表现非常出色。该项目对着色器单元个数和频率都提出的很高要求,同时高并行度也保证了这类高端显卡的发挥。不过A卡在这个项目的高画质模式下平均衰减大于N卡大约5个百分点,我们希望NVIDIA通过驱动优化不断释放Fermi架构的运算能力。
HDRToneMapping CS11测试同样成为A卡的领地,这项测试使用Computer Shader技术进行HDR渲染,我们原来预计并行计算能力较强的NVIDIA显卡能够获得较好的成绩,但是结果告诉我们已经发布将近1年的HD5000系列显卡显然更为成熟和优秀。
OIT11次序无关透明由于大量使用了Computer Shader 5.0原子操作,所以原子操作性能较差的GPU显然遇到了严重问题,无法流畅完成测试。虽然GT200支持很好的原子操作,但是效率会被代码循环模式和路径的所影响。再加上CS4.1的寄存器仅仅是CS5.0的1/4,我们怀疑出现了寄存器严重溢出,所以这些老架构产品几乎全军覆没。
本次测试中,在197.75和258.96驱动下,NVIDIA Fermi架构GF100显卡出现了大幅度性能波动,其中不得不提的是258.96驱动提升HDRToneMapping CS11成绩将近40%。我们随后通过GPC Benchmark软件分析得到的结果佐证了这一波动。原因是自257.15驱动以来,NVIDIA大幅度提升了GF100系列GPU的全局存储器性能(约为50%),这一优化导致常用数学方法测试也获得了重大提升。
我们期待未来的驱动程序还能继续对Fermi架构带来有益帮助,我们也相信加入全能缓存之后的GPU拥有更大优化空间,据此我们建议用户不断更新驱动版本以获得最新最可靠的性能。
本次测试我们承接《浅析DirectX11技术带给图形业界的改变》进行,我们补足了在上一篇文章中缺失的多线程渲染、ComputerShader等技术,同时这次测试的显卡种类更全,项目更有特色,希望给读者选购自己适合的产品带来帮助。