革命性DX11架构!GTX480470权威评测

2010-04-06 18:01  出处:PConline原创  作者:佚名   责任编辑:zhengwanglun 

  一次又一次的跳票,让整个业界对于NVIDIA的Fermi捏了一把冷汗;比对手晚整整半年,GF100吊足了玩家的胃口也在考验他们的耐心;历史上因难产而失利的NV30和R600依然历历在目,NVIDIA遭受了前所未有的压力。

  与自身架构存在问题的NV30和R600不同,GF100难产的主要原因是台积电40nm工艺不够纯熟,当然这也与NVIDIA采用大核心策略有关系,30亿晶体管可不是个小数目,整整比对手多出了50%,设计和制造难度之大可想而知。

  与简单扩充规模加入DX11支持的RV870不同,GF100采用了全新的图形架构,是近五年来GPU架构改进最大的一次,NVIDIA针对客户和用户的需求,大幅加强了对GPU并行计算和DX11图形计算的优化支持,用NVIDIA的话说这是迄今为止最完美的GPU。

革命性DX11架构!GTX480/470权威评测

  那么GF100核心到底有何革命性的改进?首款高端显卡GTX480/470的具体表现如何?能否击败对手的HD5870/5850甚至5970?发烧玩家们苦苦等待半年之久是否值得?一切的一切都将在本文中揭晓!

第一章 让游戏运行效率更高!DirectX 11全面解析

  图形API每逢世代交替都是有人欢喜有人忧:DX9让9700成为经典,让5800跌入低谷;DX9C让6800风光无限,让X800暗淡无光;DX10成就了8800的霸主地位,让HD2900一败涂地;DX11则让HD5800抢得先机。

  正因为如此,AMD-ATI在经历了R600的惨败之后,开始信奉“先入为主”的理念(AMD的口号是“先行者胜”),对于微软新的图形API十分热衷,不但第一时间对过渡性的DX10.1提供支持,而且以迅雷不及掩耳之势发布了全线DX11显卡。

  但ATI只是在上代产品基础上加入了新的ShaderModel指令集而已,对于GPU图形架构的改进十分有限甚至原封未动。NVIDIA并不认同这种做法,他们认为在革命性的图形API到来之际,必须对GPU架构做相应的调整,以适应未来新技术与新指令的需要,提高GPU渲染效率。

  那么我们首先必须了解,DirectX 11 API究竟带来了什么,对GPU提出了什么新的要求?

第一章/第一节 革命性的DirectX 10回顾

    在过去的十几年时间里,DirectX已经稳步成为微软Windows平台上进行游戏开发首选API。每一代DirectX都带来对新的图形硬件特性的支持,每次版本变更都能帮助游戏开发者们迈出惊人的一步。就拿近几年来说,DX9、DX9C、DX10及相关显卡的发布都带来了令人惊讶的游戏画面,给与玩家无与伦比的游戏体验。

  尤其是DX10发布后,以Crysis为代表的FPS游戏画面达到了巅峰,显卡实时渲染出来的人物及风景效果足以媲美照片、CG动画甚至是电影,让人叹为观止!

决不忽悠!DX10游戏性能免费提升2.5倍   决不忽悠!DX10游戏性能免费提升2.5倍
首款DX10游戏《失落星球》DX9对比DX10,牺牲一半速度,画面改进有限

  但DX10也不是完美无暇的,其缺陷也很明显,那就是运行效率比较低。当游戏开启DX10模式后,性能下降幅度非常夸张,以至于第一代DX10显卡GeForce 8800和Radeon HD2900都无法在特效全开的情况下流畅运行当时的任何一款DX10游戏!

  以三年前发布的DX10代表作Crysis来说,其画面堪称完美,但时至今日依然没有任何一款单核心显卡能在VeryHigh模式下流畅它!即便是顶级的双核心显卡运行起来也很吃力,是因为GPU的发展速度太慢吗?不是的,两年时间显卡的性能已经提高了3-4倍,GPU的发展脚步并没有放缓,问题归根到底还是DX10运行效率较差所致。

  下面就先来回顾一下DX10的主要特性:

  统一渲染架构让GPU运算单元的利用率更高,但新加入的几何着色器却加重了流处理器的负担,超级复杂的画面场景也给流处理器造成了更大的压力。因此在这几年内,纵使GPU的流处理器数量大增2-3倍、频率也稳步提升,但依然不够用。

第一章/第二节 过渡性的DirectX 10.1回顾

  DX10带来了众多绚丽无比的新特效,“滥用”各种特效导致GPU不堪重负。而GPU自身的发展受到诸多因素的制约,如果制造工艺跟不上的话运算能力很难取得突破。因此,必须通过不断改进架构运算效率来进一步提升3D图形性能。在DX10之后,微软也开始将重心集中在如何提升算法和效率上面,而不是一味的加入新特效或提高模型复杂度。

  此后微软发布了DX10.1 API,对DX10进行了小修小补,DX10.1主要更新内容有:

  DX10.1的更新内容虽然不少,但相比DX10没有什么革命性的改进,大部分内容都是提高GPU的资源利用率、将一些可选标准列为必须,其实不少项目DX10显卡通过修改驱动就能实现。因此DX10.1没能得到游戏开发商足够多的重视,并没有像当年的DX9C那样迅速成为主流。

  ATI从HD3000系列开始,也就是第二代DX10显卡中,就全面提供了对DX10.1 API的支持。而NVIDIA则认为DX10.1没有带来任何新的特效,DX10显卡也可以用不同的渲染模式达到相同的效果,因此迟迟没有加入支持。

  直到以《潜行者:晴空》和《鹰击长空》为代表的几款游戏大作支持DX10.1,并且使用新的指令集大幅提升游戏运行效率之后(主要是改进了“透明抗锯齿”和“屏幕空间环境光遮蔽”的性能),NVIDIA意识到了DX10.1的重要性,在去年下半年发布的GT240/220/210等低端显卡中加入了DX10.1的支持。

  DX10.1虽然画面方面改进有限,但运行速度确实加快了

  实际上,DX10.1只不过是微软的一个试水石,其目的非常明确,那就是尽可能的提高DX10的渲染效能,达到节约GPU资源的目的,而DX11正是基于这种设计理念而来的。

第一章/第三节 全新的DirectX 11诞生,为高效率游戏而生

  从游戏画面逼真度来看,短期内恐怕没有哪款游戏能够达到Crysis的高度,但是这款依靠暴力模型、着色技术和诸多特效堆积而成的游戏,对显卡的要求之高令人叹为观止,至今都没有哪颗GPU敢打包票说能在最高特效下面流畅运行。也就是说CryEngine 3是丝毫没有考虑现有GPU的性能而开发的一款超级引擎。

  以高效率著称的虚幻引擎缔造者Tim Sweeney称,想要把现有游戏模型复杂度提高数十倍是很容易的事情(比如CG模型和影视渲染),但同样的你也需要数十倍与现有主机机能的显卡才能流畅运行,比如三路甚至四路顶级系统,而这种系统的市场占有率连1%都不到,独孤求败的Crysis还卖不过快餐式的使命召唤系列、Cryengine至今无法染指游戏机领域就是这个道理。

  所以,架空硬件的引擎是不可取的,唯有充分利用有限的GPU资源,通过各种辅助技术最大化画面表现力,才是图形技术公司和游戏开发商首当其冲要解决的内容。

  因此,在DX10发布四年、成为主流之后,业界将期望都寄托在了DX11身上,虽然DX11并没有带来全新的特效,但却通过各种手段提升了GPU的渲染效率,当GPU有了富裕的运算资源之后,游戏开发商就可以大胆的去使用更多的特效和技术,如此一来DX11游戏很容易就能从画面到速度全面超越DX10游戏!

    DX11最关键的特性有以下五点:

1. Tessellation:镶嵌式细分曲面技术(第二章做专门解析)
2. Multi-Threading:多线程处理
3. DirectCompute 11:计算着色器(第三章做专门解析)
4. ShaderModel 5.0:着色器模型5.0版
5. Texture Compression:纹理压缩

  DX11的五大关键特性也有主次之分,其中Tessellation和DirectCompute 11堪称革命性的技术,前者可以大幅提升游戏画质、后者可以大大提高游戏效率,因此笔者将其单列一章专门做详细介绍。那么首先我们来看看另外的三大关键特性。

第一章/第四节 Shader Model 5.0

  Shader(译为渲染或着色)是一段能够针对3D对象进行操作、并被GPU所执行的程序,ShaderModel的含义就是“优化渲染引擎模式”,我们可以把它理解成是GPU的渲染指令集。历代DirectX每逢重大版本升级时最主要的更新内容就包括在了ShaderModel之中:

  ShaderModel 1.0 → DirectX 8.0
  ShaderModel 2.0 → DirectX 9.0b
  ShaderModel 3.0 → DirectX 9.0c
  ShaderModel 4.0 → DirectX 10
  ShaderModel 5.0 → DirectX 11

  高版本的ShaderModel是一个包括了所有低版本特性的超集,对一些指令集加以扩充改进的同时,还加入了一些新的技术,现在我们就来看看DX11 SM5.0都有哪些新特性:

  由于统一渲染架构的特性,Shader Moder 5.0是完全针对流处理器而设定的,所有类型的着色器,如:像素、顶点、几何、计算、Hull和Domain(位于Tessellator前后)都将从新指令集中获益。

  其中,覆盖采样及Gather4纹理拾取两项指令是从在DX10.1基础上发展而来的,SM5.0要比SM4.1更加智能和灵活,它可以针对特定颜色分别采样、还能自动识别可做阴影映射的值,精度和效率都进一步提高。

  由于DX10.1与DX10在指令方面的相似性,现有的DX10.1游戏可以很容易的通过更新程序代码升级支持DX11,从而获得更好的运行效率,比如《BattleForge》和《STALKER》这两款DX10.1游戏率先对DX11提供了支持。

第一章/第五节 Multi-threading多线程处理

  如果一个软件能够对多核心多线程处理器进行优化的话,那么在使用双核或四核处理器时,其运行效率将会提升2-4倍,遗憾的是如今的游戏都无法支持多核处理。

  通过大量的游戏性能测试来看,GPU占绝对主导,而CPU只是考验单核效能,通过对CPU极限超频可以让游戏性能提高不少,但使用四核或者带HT技术的“八核”处理器几乎不会有任何性能提升。在多核成为大势所趋的情况下大量CPU资源被白白浪费,瓶颈可能依然卡在CPU上面。

  DX11当中新增的多线程处理技术,则是专门针对多核应用而生的,它通过引入“延迟执行”的指令将一个渲染进程拆分为多个线程,并根据处理器核心/线程数设定延迟执行内容的数目。多线程的涵义是非常广的,每一帧画面可以被分为几个图层,每个图层又可以分为N个区块,所有的这些都可以被并行调度到延迟执行的线程之中。

    这是一项很聪明的技术,标记为“立即执行”的线程与传统的渲染没有区别,而标记为“延迟执行”的线程则可以在后台将图形生成所必须的资源做预先的存取,比如纹理拾取、像素生成、常数缓冲等操作都可以多线程并行处理,通过多核CPU富裕的资源来减少程序等待时间,从而使得渲染不再受到CPU的瓶颈制约。

  多线程技术是非常灵活的,它既可以在游戏中通过程序代码来控制,也可以通过DirectX自动分配,还能够通过驱动程序进行优化。即便是驱动没有针对多核进行优化,DX11运行库也会通过模拟的方式提供新的功能,也就是说所有DX11游戏都将或多或少的从多核多线程CPU中获益。

  多线程技术的引入对于双卡甚至多卡互联系统更为重要,以往多颗GPU在DirectX中只能模拟成一个虚拟GPU,所有的GPU必须共享指令缓冲区并接受CPU调度,渲染线程的拆分与合并指令延迟都很大,GPU越多则效率越低!而在DX11当中,如果用多核CPU搭配多路SLI系统的话,每颗CPU都可以单独控制一颗GPU的渲染线程,在均分CPU负担的同时,提高了GPU资源利用率,从而大幅提升游戏性能。

  NVIDIA称,GTX480 SLI在DX11游戏中的性能几乎达到了单卡的两倍,而不再是以往的1.8倍左右,这其中DX11多线程技术功不可没,当然也需要驱动程序的大力优化支持。

    其实多线程技术也能应用在DX9/DX10甚至是OpenGL上面,但由于API及函数指令的限制,开启多线程会产生很多重复的指令,导致性能提升有限甚至不升反降,因此微软并不建议在旧API模式开启多线程模式,除非程序员做过严格的测试与优化。
第一章/第六节 两种新的纹理压缩格式

  丰富的纹理细节对于最终图像的质量尤为重要,目前的游戏也都在朝着超大规模、超精细的纹理细节方向发展。但是,大规模的纹理非常占用显存以及带宽。而纹理压缩就是为了解决这个问题,将大规模的纹理以一种优化的算法进行压缩。试想,如果图象的纹理都不进行压缩的话,那么2GB的显存容量恐怕都不够用。

  但是,目前纹理压缩技术并不支持HDR(高动态范围)图像,这也是开启HDR很占用显存的一个很大的原因。为了解决这个问题,DirectX 11加入了两种新的压缩算法——BC6H和BC7。其中,BC6H是专门针对HDR图像设计的压缩算法,压缩比为6:1;而BC7是专门给高品质RGB[A]纹理设计的压缩算法,压缩比为3:1。

  上图展示的是图像通过BC6H压缩模式进行压缩的前后效果对比图。其中左边的图像为原始图像,中间的是在压缩过程中损失的一些细节,而右边的就是压缩后的图像。可以看出,从画质上来看几乎没有损失(肉眼看不出),但是却可以大幅度降低显存的占用。

  这幅图展示的是BC7针对LDR纹理的压缩与传统的BC3纹理压缩对比。可以看出传统的BC3纹理压缩损失了大量的纹理细节,压缩之后的效果也很不好。而采用BC7算法压缩后的纹理,丢失的细节很少,效果也非常好,这就是改进纹理压缩的魅力。

第二章 DX11中最有价值的技术:Tessellation的妙用

  NVIDIA认为,DX11当中最有价值的技术就是Tessellation,因为其它所有的技术用DX10指令集都可以实现,只不过速度慢一些而已,唯独Tessellation无可替代,它以较小的性能损失大幅改善了游戏画面,将程序员多年来的梦想变为现实,因此好评如潮。

  但是,Tessellation是一项由竞争对手ATI所倡导,经过多年的改进与完善而来的技术,那么在Tessellation被纳入DX11范畴之后,NVIDIA会不会比ATI做得更好呢?

第二章/第一节 Tessellation是ATI原创的技术,但孤掌难鸣

  Tessellation一词相信大家并不陌生,早在DX9C时代,微软XBOX360游戏主机中由ATI设计的Xeno显示芯片就支持;从DX10时代到DX10.1时代,ATI HD2000/3000/4000系列显卡全都整合了一个叫做Tessellator的模块,虽然当时没有任何游戏能够支持该技术,但ATI通过几个演示Demo展现了Tessellation技术的魅力。

  事实上,在更早的DX8时代,ATI就已经和微软联手开发了TruForm(N-Patch)技术,也就是Tessellation的前身,并被纳入DX8.1的范畴。但由于该技术有一些不可控制的BUG,因此被DX9和DX10无情的抛弃了。

  Tessellation之所以未成气候,就是因为此前的技术还不够完善,另外GPU处理能力不足也是一大因素,因此ATI即便有微软的鼎力相助,也未能将该技术发扬光大。到了DX10时代,ATI虽然在全线GPU当中整合了Tessellator模块,无奈孤掌难鸣,并没有得到游戏开发商的支持。

  直到DX11时代,GPU自身的性能有了长足的进步,硬件上真正具备了细分曲面的实力,再加上微软重新改写API渲染流程,专为Tessellation开辟了新的着色器,这才让Tessellation技术得以重见天日。

第二章/第二节 Tessellation技术实现的原理

  Tessellation这个英文单词直译为“镶嵌”,也就是在顶点与顶点之间自动嵌入新的顶点。Tessellation经常被意译为“细分曲面”,因为在自动插入大量新的顶点之后,模型的曲面会被分得非常细腻,看上去更加平滑致密。下面这张图形象的反映出Tessellation技术的原理和所实现的效果:

  通过上面这张示意图,我们就可以更容易理解Tessellation技术是怎么回事了,它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。

  Tessellation技术是完全可编程的,它提供了多种插值顶点位置的方法来创造各种曲面:
 
1. N-Patch曲面,就是和当年TruForm技术一样,根据基础三角形顶点的法线决定曲面;
2. 贝塞尔曲面,根据贝塞尔曲线的公式计算顶点的位置;
3. B-Spline、NURBs、NUBs曲线(这三种曲线均为CAD领域常用曲线,在Maya中均有相应工具可以生成)
4. 通过递归算法接近Catmull-Clark极限曲面。

  Tessellation技术最初主要被用以“细分曲面”,随着该技术被纳入DX11范畴,得到大范围推广之后,插值顶点的算法也越来越多,因此用途也越来越广,产生了很多非常有创意的应用,在本章后面几节当中笔者会为大家做更详细的介绍。

  Tessellation技术还经常与Displacement Maps(贴图置换)技术搭配使用,从而将平面纹理贴图改造成为具有立体感的几何图形,大大增强3D模型或场景的真实性。

  除了大幅提升模型细节和画质外,Tessellation最吸引程序员的地方就是:他们无需手动设计上百万个三角形的复杂模型,只需简单勾绘一个轮廓,剩下的就可以交给Tessellation技术自动镶嵌,大大提高开发效率;而且简单的模型在GPU处理时也能大幅节约显存开销,同时大幅提升渲染速度!

第二章/第三节 DX11版Tessellation的改进

  前面笔者提到过,ATI的HD2000以上级别显卡其实都具备Tessellation的功能,但它们却无法与DX11中的Tessellation技术相兼容。这是因为微软并没有原封未动的将R600的Tessellation技术抄到DX11之中,而是对其进行了优化,使之能与渲染流程完美的结合在一起,可以更高效率的细分出更多的多边形和曲面。

  与DX9C/DX10时代孤零零的Tessellator模块不同,在DX11当中,微软加入了两种全新着色器来全力配合Tessellator的工作,分别位于镶嵌器的前后。

  其中Hull Shader(外壳着色器)用来控制自动生成顶点的数量和算法,也就是Tessellator的细分级别,然后交给Tesselator进行镶嵌处理,最后由Domain Shader(域着色器)按照程序要求生成所需曲面,并自动进行法线平移、置换贴图,产生新的模型。

  与DX9/10中的Tessellation技术相比,DX11新增的两种着色器都受统一渲染架构支配,因此处理能力非常富裕,DX11版Tessellation不仅效率更高、而且细分级别更丰富。但是,更高的细分等级对Tessellator模块本身的处理能力提出了苛刻要求,这需要芯片厂商在设计之初就考虑周全,在本文架构解析部分,笔者会详细分析ATI和NVIDIA两者的设计思路。

  下面,我们就通过大量生动的实际案例,来感受Tessellation技术的魅力,来说明游戏厂商和芯片厂商为什么如此重视这项技术。

第二章/第四节 Tessellation的妙用:虚假贴图终结者

  首款DX11测试程序——Heaven Benchmark中,几乎所有的场景都是由Tessellation技术动态生成的,其中最有代表性的场景就是地图中央的飞龙,但最具震撼力的是周围凹凸不平的砖墙、石阶和瓦片:

  开启Tessellation后,翼龙身体上的“斑点”变成了“尖刺”,虽然只是一座雕像而已,但怪物明显变威猛了许多。身体各部位包括尖刺的平滑过渡都十分自然,让人找不出任何模型设计的缺点,看来Tessellation自动插入顶点并细分曲面在实际应用中相当智能。

  在这幅图中,大家注意观察左侧的墙壁(以及凸出石块的阴影)、右侧的台阶和下方的鹅卵石路,关闭Tessellation时,石块间的缝隙使用传统的视差映射贴图技术渲染而成,也有一定的立体效果,但不够明显,而且缝隙间不存在真正的阴影。视角拉的很近的话,立体效果就会消失,因为那只是欺骗人眼的贴图而已。

  而Tessellation技术生成的是实实在在的顶点和曲面,所有的岩石、台阶和石块都是独立存在,而不再是平面上的虚拟贴图而已。一经对比,视觉反差十分强烈!

  传统的屋顶瓦片就是“纸糊”的,类似与生活中用于糊墙的“砖纹、木纹”墙纸,远看还行近看一点立体感都没有,连小孩子都骗不了。经过Tessellation技术处理后,凹凸不平、错落有致的瓦片震撼登场!

  在以往的游戏中,多是以高精度的纹理贴图来欺骗玩家的眼睛,使得周围环境看上去更真实一点。只有以《孤岛危机》、《狂野西部》、《潜行者》为代表的次世代游戏才使用了“虚拟位移贴图”或“视察映射贴图”这种高级特效,生成有一定立体感的砖墙或缝隙。

  而Tessellation技术的出现,则终结了一切虚假贴图,达到了完全真实的凹凸效果,让游戏朝着虚拟现实方向迈进了一大步!

第二章/第五节 Tessellation的妙用:布料旗帜

  随风飘扬的衣物和旗帜一直都是3D渲染的难题,此前想要达到逼真的布料效果,必须使用物理加速技术。虽然物理引擎可以达到和谐自然的动态效果,但衣物本身的细节还不够丰富,原因是游戏不可能将一块小小的布料做得太过复杂,这样会消耗太多的资源,得不偿失。

  有了Tessellation技术之后,可以一定程度上代替物理引擎,不仅可以大幅加强布料本身的细节、实现动态逼真的效果、而且消耗资源很少,可谓是一举三得。

  在DX11代表作《科林麦克雷:尘埃2》中,就大量使用了Tessellation技术,虽然细分级别并不高,但其魅力已经显露无疑。

  在线框模式下我们可以看到,原本由屈指可数的曲线勾勒出来的旗帜,已经被细分得密密麻麻,此时旗帜的运动细节变得更加丰富,在外力作用下可以产生更逼真的摆动效果。

第二章/第五节 Tessellation的妙用:波澜壮阔的水面

  《尘埃2》中,除了旗帜之外,还有一个很有创意的应用,就是用Tessellation构建动态水面:

  《尘埃2》是专为ATI显卡优化的游戏,其中虽然大量使用了Tessellation技术,但都是轻量级的。看完下面这款NVIDIA的演示Demo之后,大家将会对Tessellation技术刮目相看:

  这款Demo的名称叫做Island11,在后文中Demo解析部分,将会有更多精美截图供大家赏析。

第二章/第六节 Tessellation的妙用:不可思议的长发

    不管墙壁、旗帜还是水面,Tessellation都是被用来“细分曲面”,因此无需太多介绍大家都很容易理解其工作原理。那么看了下面的截图之后,不知道您会做何感想?

  这是款NVIDIA专为GF100开发的演示Demo,名字叫做Hair,在后文中将会详细介绍这款Demo,通过更多的截图分析其工作原理。

● 本章小结:DEMO抛砖引玉,Tessellation前景光明

  通过实例分析介绍可以发现,Tessellation技术所实现的功能并没有局限在“细分曲面”的范围内,随着DX11逐渐走向普及,开发商和程序员基于新的API开发游戏时,更多有创意的应用将会呈现在大家面前,目前的这些SDK和DEMO都只是起到抛砖引玉的作用。

第三章 DirectCompute:不止是通用计算

    此前在测试阶段,微软将DirectX 11中包含的GPU通用计算称为Compute Shader或DirectX Compute,而在正式版本中又改名为DirectCompute,一字之差何苦呢?显然,微软为了将GPU通用计算和主要是3D应用的DirectX区别开,进一步凸出DirectCompute的重要性并与OpenCL分庭抗力,由此足以见得微软对GPU通用计算的重视程度。

    DirectCompute主要针对GPU计算,但由此可以衍生出一些在图形渲染方面的特殊应用,因此笔者将其单列一章,对一些重要技术进行详细介绍。

第三章/第一节 DirectCompute与Stream/CUDA/OpenCL的关系

    提起GPU通用计算,自然会让人想到NVIDIA的CUDA、ATI的Stream以及开放式的OpenCL标准,再加上微软推出的DirectCompute,四种技术标准令人眼花缭乱,他们之间的竞争与从属关系也比较模糊。

    首先我们来明确一下概念:

1. OpenCL类似于OpenGL,是由整个业界共同制定的开放式标准,能够对硬件底层直接进行操作,相对来说比较灵活,也很强大,但开发难度较高;

2. DirectCompute类似于DirectX,是由微软主导的通用计算API,与Windows集成并偏向于消费领域,在易用性和兼容性方面做得更出色一些;

3. CUDA和Stream更像是图形架构或并行计算架构,NVIDIA和ATI对自己的GPU架构自然最了解,因此会提供相应的驱动、开发包甚至是现成的应用程序,通过半开放的形式授权给程序员使用。

  其中ATI最先提出GPGPU的概念,Folding@Home和AVIVO是当年的代表作,但在被AMD收购后GPGPU理念搁浅;此后NVIDIA后来者居上,首次将CUDA平台推向市场,在这方面投入了很大的精力,四处寻求合作伙伴的支持,并希望CUDA能够成为通用计算的标准开发平台。

  在NVIDIA大力推广CUDA之初,由于OpenCL和DirectCompute标准尚未定型,NVIDIA不得不自己开发一套SDK来为程序员服务,这套基于C语言的开发平台为半开放式标准(类似与Java的授权形式),只能用于NVIDIA自家GPU。AMD始终认为CUDA是封闭式标准,不会有多少前途,AMD自家的Stream平台虽然是完全开放的,但由于资源有限,对程序员帮助不大,因此未能得到大量使用。

  于是在2008由苹果牵头,以苹果OpenCL草案为基础,联合业界各大企业共同完成了标准制定工作。随后Khronos Group成立相关工作组,工作组的26个成员来自各行各业,且都是各自领域的领导者,具体包括3DLABS、Activision Blizzard、AMD、苹果、ARM、Barco、博通、Codeplay、EA、爱立信、飞思卡尔、HI、IBM、Intel、Imagination、Kestrel Institute、摩托罗拉、Movidia、诺基亚、NVIDIA、QNX、RapidMind、三星、Seaweed、TAKUMI、德州仪器、瑞典于默奥大学。

  OpenCL标准一经成立,IT三巨头Intel、NVIDIA和AMD都争先恐后的加入支持。AMD由于自家Stream推广不利、支持OpenCL并不意外;Intel潜心研发的Larrbee GPU一大卖点就是强大的计算能力,支持OpenCL有百利而无一害;NVIDIA虽然在大力推广CUDA开发平台,但无奈势单力薄,小有所成但前途未卜,OpenCL虽然与CUDA C语言有交集但并不冲突,是相辅相成的互补关系,NVIDIA自然也大力支持。

  OpenCL组织中唯独微软不在其列,微软有自己的如意算盘。经过多年的发展,DirectX凭借快速更新换代策略、相对轻松的开发与移植方式,在与OpenGL的交战中已全面占据上风,OpenGL的传统强项——专业绘图领域也在被DirectX不断的蚕食。因此微软打算用相同的策略来对抗尚未站住根基的OpenCL,于是DirectCompute诞生了。

  就如同GPU能同时支持DirectX与OpenGL那样,NVIDIA和AMD对DirectCompute和OpenCL都提供了无差别支持,真正的GPU通用计算之战,不在CUDA与Stream之间,因为Stream根本不是CUDA的对手,而是OpenCL与DirectCompute之争,DX11时代才刚刚开始……

第三章/第二节 DirectCompute 10/11版本间的区别

  虽说DirectCompute标准才刚刚问世,但目前已经有了三个版本,它与微软的DirectX版本是一一对应的(10.0、10.1、11.0),毕竟DirectCompute目前还只是DirectX的一个子集,羽翼未丰之前难以自立门户。

  新一代windows7操作系统已经内置了DX11及DirectCompute,对GPU通用计算提供原生支持。Win7对GPU的要求放得很宽,只要支持DX10即可,当然DX10.1更好DX11最完美。

  DirectCompute是与DX11一同发布的,因此相比“过去式”的10.0版,DirectCompute 11作出的改进比较多:

  可以看出,同DX11类似,DirectCompute 11的改进主要集中在降低系统资源开销与提高效能方面,也就是说新的DX11显卡会有更强的通用计算效能。而旧的DX10显卡虽然会慢一些,但实现的功能也不会差多少,如此一来就完美的解决的兼容性问题,也能很好的凸出新显卡的优势,用户和厂商皆大欢喜。

  虽然DirectCompute的主要任务是用来处理非图形运算,但很多时候它还是需要做一些图形相关的擦边球任务、或者是辅助图形渲染,比如说视频数据处理、物理运算、人工智能等,这些操作最终还是需要通过显卡输出至屏幕,因此计算着色器会经常与像素着色器打交道,当像素着色器使用到计算着色器的新特性之后,就会衍生出一些意想不到的新特效。

  接下来就为大家介绍一些属于DirectCompute 11的新技术,当然它们也属于DX11的范畴。

第三章/第三节 DirectCompute 11新特效:顺序无关透明化

  烟雾、火焰、流水、玻璃、树叶、栅栏、头发……游戏中所出现的半透明物体数不胜数,程序员很难给这些物体设计一个固定的模型,它们不规则、随机的特性决定了单纯依靠传统的像素着色或者纹理贴图都是行不通的,因此这类物体有了一个新的称呼——Order Independent Transparency (OIT,顺序无关透明化)。

  此前,程序员必须在每帧渲染之前对透明模型进行深度排序或者执行诸如深度剥离的Multi-Pass(多次)算法,以达成模型间正确的透明度。不管哪种办法,都不能像非透明模型那样实现正确的局部的Post-Processing(后处理)效果,而且会消耗很多资源。

  DX11则首次在没有额外专用电路的情况下,透过一个每像素空间数据结构对多个透明表面的排序实现对顺序无关透明化的支持,解决方法就是让GPU参与运算,通过使用DirectCompute 11新增的原子操作,无需直接软件管理就能往分级缓存的不同层级装载数据,依照每个像素透明层数来分配独占的内存。如此一来程序设计的复杂度显著降低,并且数据结构可以采用难以预测的非结构化的内存存取,DirectCompute 11新增的附加缓冲也会派上用场。

  由于DX10不支持原子操作,因此无法支持顺序无关透明化这项新特效,只能依靠传统的方式来实现差强人意的效果。而DX11不但画面更好,而且实现效率非常高,大量使用附加缓冲从而节约了显存带宽消耗。

  在《战地:叛逆连队2》的DX11版本中就运用OIT技术,如在通过建筑和载具的窗户观察窗外的景物,窗外景物同玻璃材质的混合、畸变就用到这样的OIT技术,不过开发商DICE考虑到多人游戏公平性的问题,在多人游戏中DX10和DX11两者的效果会使一致的,只是DX11会提升速度。

  就像大家通过数码相机拍完照片后需要经过PS处理一样,3D模型在GPU内部渲染完成后也会经过后端处理才会显示在屏幕上,这一过程叫做“Render Post-Processing”(渲染后端处理),常见的如“边缘侦测与抗锯齿、各向异性过滤、景深、运动模糊、色彩映射、滤波、锐化”等一些列特效都是在这一阶段加上去的。

  GPU有专门负责渲染后端处理的模块,叫做“Render Back-Ends”(ROPs),也就是通常所说的光栅单元,这个模块位于流处理器与显存控制器之间,也就是说它渲染完毕后将会把数据直接输出到显存与屏幕。

第三章/第四节 DirectCompute 11新特效:渲染后端处理之景深

  在DX10时代,光栅单元的任务量是很重的,如果大量使用后端处理特效的话,很容易出现像素着色器等待光栅单元的情况出现。所以很多DX10游戏的GPU负载还不如DX9C游戏就不足为怪了。而DX11则通过一个巧妙的方式降低了光栅单元的负担,确保流处理器和光栅单元能够协同工作,原理依然是使用计算着色器。

  各种后端处理特效的最终效果虽然千差万别,但它们大多数都有一个共同的特点,那就是需要对比相邻位置像素或者相邻帧之间像素的差别,然后进行对比与合成。这一拾取动作其实只用一个函数就能完成——Gather4,它使得计算着色器能够越权进行数据采集动作,帮助纹理单元和光栅单元的减轻负担,而且计算着色器的数据采集速度是专用单元的4倍!

  具体一点例子,比如DX10级别的运动模糊和景深特效,都是通过几何着色来实现的,通过几何着色控制运动物体的坐标变换与像素监控,或将深度帖图中的纹理信息按照距离拆分到缓冲,然后分为几个不同的视角进行渲染,最后合成完整的图像,实现比DX9C更精确、更流畅的特效。画面效果是更出色了,但几何着色并没有帮助光栅单元做任何事情,数据处理反而翻了好几倍,导致性能下降比较严重。

    而通过使用DirectCompute 11中的新指令,后端处理特效可以最大限度的降低显存读写次数、大幅降低光栅单元的负担,当然流处理器将会承担更多的任务(几何着色、计算着色、像素着色、外壳着色和域着色),但依然能够保持相对的平衡,不会出现DX10当中GPU资源负载不均的情况。

  刚刚发布的DX11大作《地铁2033》就使用了DX11级别的景深效果,清晰和虚化合理分配、主次分明,再搭配Tessellation技术的辅助,几乎接近与电影的拍摄效果,看起来有种赏心悦目的感觉。但该游戏由于使用了太多尖端图形技术,所以要求非常苛刻。

第三章/第五节 DirectCompute 11新特效:渲染后端处理之高清晰环境光遮蔽

    “环境光遮蔽”(Ambient Occlusion,AO)是一种非常复杂的光照技术,通过计算光线在物体上的折射和吸收在受影响位置上渲染出适当的阴影,进一步丰富标准光照渲染器的效果。“屏幕空间环境光遮蔽”(SSAO)就是该技术的一个变种,现已用于《孤岛危机》、《潜行者:晴空》、《火爆狂飙》、《鹰击长空》、《帝国:全面战争》等游戏。

  DX10也能实现SSAO特效,《Crysis》就大量使用了该技术,但其它DX10游戏却很少使用SSAO,因为效率太低。NVIDIA在驱动当中提供了强制SSAO的选项,可以让一些老游戏的画质也得到改善,但性能损失确实很大默认情况下是关闭的。

  DX10.1中的出现让SSAO得到了普及,程序员可以用Gather4函数来进行加速渲染,它只能处理单一的颜色分量,但依然适合处理阴影内核和SSAO,因为深度缓冲是一个单颜色分量。而在DX11中,Gather4再次升级,它可针对特定的颜色分别采样,可自动识别能做阴影映射的值,从而实现更快更好的阴影过滤。

  DX11对于Garher4函数特性的增强使得AO又有了更优秀的版本,称之为High Definition Ambient Occlusion(HDAO),即高清晰环境光遮蔽。HDAO和SSAO都能向下兼容旧硬件,但运行速度会打折扣。换句话说,DX11和DX10.1是在改进算法、优化性能的基础上,使得显卡有能力渲染出更复杂、更完美的特效,而DX10虽然在也能达到同样的画面效果,但速度会很慢,实用性不大。

  在ATI HD5870发布当天,《BattleForge》这款游戏就通过补丁从DX10.1升级至DX11,它只使用了DX11中的一个技术,那就是用DirectCompute 11加速HDAO,通过我们实际测试来看,DX11的确能够让HDAO效率提升20-30%之多。此外DX11大作《异形大战铁血战士》也大量使用了HDAO特效和DirectConpute11技术。

● 本章小结:DirectCompute技术目前主要用于游戏渲染加速

  DirectCompute虽然定位于GPU通用计算,但通过DX11发布半年来的实际情况来看,目前还是主要被用于图形渲染加速,并没有真正进入民用非图形计算领域,毕竟它还只是一个附属在DX11之下的指令集/函数库,而并非是一个单独的API。

  不过,能够大幅提升图形渲染效率也同样具有革命意义。只有让游戏跑得更快,GPU有富裕的运算能力时,游戏开发者才敢使用更多、更新的特效与技术,从而让游戏的画面变得更好,让游戏玩家真正得以体验,而不是以高高在上的形态让人顶礼膜拜。

第四章 GF100图形架构全解析

  有关DX11的相关技术部分讲了那么多,最终还是要体现在产品方面,毕竟对手的HD5000已经问世达半年之久。姗姗来迟的NVIDIA对自己的要求比较高,可谓是慢工出细活,我们首先来看看GF100的设计目标:

  1.史上最快的GPU,出类拔萃的游戏性能

  2.超高的抗锯齿精度和效能,一流的图像质量

  3.不可思议的几何性能,通过DX11实现电影级的逼真度

  4.革命性的计算架构,DX11和通用计算两不误

第四章/第一节 在GT200基础上支持DX11很容易,但NVIDIA不这么做

  从DX10到DX10.1再到DX11,转眼间显卡已经发展到了第四代,但有经验的读者应该可以发现,ATI的新产品只是在R600核心的基础上添加新的ShaderModel指令集并扩充流处理器规模而已,对于GPU图形架构的改进十分有限甚至原封未动。

  NVIDIA方面也是如此,G92/GT200相对于G80也只是强化了并行计算架构,虽然对流处理器的排列组合做了一些微调,但整体架构没有本质变化。到了DX11时代,NVIDIA认为旧的架构已经不适合新技术和新游戏的需要,有必要对GPU架构进行大幅度的改进、甚至是重新设计。

  实际上G80和GT200的架构也是非常优秀的,ATI即便有DX10.1的辅助,同时代产品都没能占得任何便宜。ATI沿用R600的架构推出了DX11产品,按理说NVIDIA为GT200添加DX11支持也不是什么难事,性能也不会差,那为什么NVIDIA不这样做呢?

  因为NVIDIA发现了GPU新的瓶颈:从NV30到GT200核心,GPU的渲染能力提升了150倍,但几何性能的增长居然连3倍都不到!这个问题此前未能得到重视,因为游戏中的几何图形转换大多交给CPU来计算,而到了DX11时代,新增的Tessellation技术对GPU几何图形处理能力提出了新的要求,此时如果继续沿用上代架构显然会制约DX11性能,成为新的瓶颈!

  于是GF100架构应运而生了,NVIDIA没有像对手那样以新瓶装旧酒的方式加入DX11支持,而是将整个GPU架构推倒重来,完全针对Tessellation技术而优化设计,确保拥有最强的DX11性能。

  下面我们就来看看NVIDIA是如何做到的?

第四章/第二节 GF100芯片图与核心架构图

● GF100核心规格:

  512个流处理器(现在被称为CUDA核心)

  4个GPC(图形处理器集群)

  4个Raster Engine(光栅化引擎)

  16个SM(流处理器簇)

  16个PolyMorph Engine(多形体引擎)

  64个纹理单元

  48个光栅单元

  384bit GDDR5显存控制器

  这其中,流处理器、SM、纹理单元、光栅单元等大家都不陌生,是GPU的基本模块,其数量多少代表了GPU的规模与性能。而GPC、Raster Engine、PolyMorph Engine这几个模块比较新鲜,这也就是GF100与以往GPU最大的不同之处。

● GTX480、GTX470显卡规格

  值得注意的是,NVIDIA首发的两款高端显卡GTX480/470都没有采用完整规格的GF100核心,原因来自多个方面:台积电40nm良品率、产能还有单卡功耗。

  其中GTX480屏蔽了一组SM,因此比完整的GF100少了32个流处理器和4个纹理单元;GTX470屏蔽了两组SM,比完整的GF100少了64个流处理器和8个纹理单元,另外还屏蔽了一组显存控制器,少了64bit位宽和8个光栅单元。

第四章/第三节 GPC是什么?GF100居然是四核心GPU 

  不管GPU架构改不改,流处理器数量总是要扩充的,准确的说是以级数规模增长,这样才能大幅提升理论性能。在流处理器数量急剧膨胀之后,如何管理好如此庞大的规模、并与其它模块协调工作成为新的难题。

  ATI RV870包括流处理器在内的所有核心规格都比RV770翻了一倍,ATI选择了“双核心”设计,几乎是并排放置两颗RV770核心,另外在装配引擎内部设计有两个Rasterizer(光栅器)和Hierarchial-Z(多级Z缓冲模块),以满足双倍核心规格的胃口。

  如果说Cypress是“双核心”设计的话,那么GF100的流处理器部分就是“四核心”设计,因为GF100拥有四个GPC(图形处理器集群)模块,每个GPC内部包含一个独立的Raster Engine(光栅化引擎),而在以往都是整颗GPU共享一个Raster Engine。

  Raster Engine由三个流水线阶段组成。在边缘设置阶段中,可提取顶点位置、计算三角形边缘方程。没有朝向屏幕方向的三角形都通过背面剔除而删掉了。每一个边缘设置单元在一个时钟周期中最多都能够处理一个点、线或三角形。光栅器(Rasterizer)为每一个基元而运行边缘方程并计算像素的覆盖。如果开启了抗锯齿功能,那么就会为每一个多采样以及覆盖采样执行覆盖操作。每一个光栅器在每个时钟周期内均可输出8个像素,整个芯片每个时钟周期内总共可输出32个光栅化的像素。光栅器所生成的像素将被发送至Z坐标压缩(Z-cull)单元。Z坐标压缩单元获取像素图块(Pixel Tile)并将图块中像素的深度与显存中的现有像素进行比较。完全处于显存像素后面的像素图块将从流水线中剔除,从而就不再需要进一步的像素着色工作了。

  我们知道RV870的Rasterizer和Hierarchial-Z双份的,而GF100则是四份的,虽然命名有所不同但功能是相同的。

  GF100的四个GPC是完全相同的,每个GPC内部囊括了所有主要的图形处理单元。它代表了顶点、几何、光栅、纹理以及像素处理资源的均衡集合。除了ROP功能以外,GPC可以被看作是一个自给自足的GPU,所以说GF100就是一颗四核心的GPU。

  在每个GPC内部,是由四组SM共享一个Raster Engine,现在我们进一步细分GF100,来详细看看SM的结构。

第四章/第四节 每组SM拥有一个独立的多形体引擎 

  GF100拥有四个GPC,每个GPC内部拥有四组SM,每组SM内部包括了32个CUDA核心:

  G80=8 TPC=8x2 SM=8x2x8 SP

  GT200=10 TPC=10x3 SM=10x3x8 SP

  GF100=4 GPC=4x4 SM=4x4x32 SP

  现在我们就可以了解到,GF100与上代的GT200和上上代的G80相比,SM的变化非常大。GF100每组SM当中拥有32个流处理器,而GT200/G80的每组SM都是8个流处理器。在SM内部流处理器数量翻三倍的同时,GPC/TPC的构成也发生了变化,G80每个TPC内部拥有2组SM,GT200是3组SM,而GF100每个GPC内部则是4组SM。

  对于CUDA核心与SM结构的微调,大家都很容易理解。GF100与GT200最大的不同其实就是PolyMorph Engine,译为多形体引擎。每个SM都拥有一个多形体引擎,GF100核心总共有多达16个。那么多形体引擎是干什么用的呢?为什么要设计如此之多?

● 为什么要设计多形体引擎?

  之前的GPU架构一直都使用单一的前端控制模块来获取、汇集并对三角形实现光栅化。无论GPU有多少个流处理器,这种固定的流水线所实现的性能都是相同的。但应用程序的工作负荷却是不同的,所以这种流水线通常会导致瓶颈出现,流处理器资源未能得到充分利用。

  实现光栅化并行处理的同时还要保持API的顺序是非常困难的,这种难度阻碍了这一领域的重大创新。虽然单个前端控制单元的设计在过去的GPU中曾有过辉煌的历史,但是随着对几何复杂度的需求不断增长,它现在已经变成了一个主要障碍。

  Tessellation的使用从根本上改变了GPU图形负荷的平衡,该技术可以将特定帧中的三角形密度增加数十倍,给设置于光栅化单元等串行工作的资源带来了巨大压力。为了保持较高的Tessellation性能,有必要重新平衡图形流水线。

  为了便于实现较高的三角形速率,NVIDIA设计了一种叫做“PolyMorph”的可扩展几何引擎。每16个PolyMorph引擎均拥有自己专用的顶点拾取单元以及镶嵌器,从而极大地提升了几何性能。与之搭配的4个并行光栅化引擎,它们在每个时钟周期内可设置最多4个三角形。同时,它们还能够在三角形获取、Tessellation、以及光栅化等方面实现巨大性能突破。

● 多形体引擎的工作原理:

  多形体引擎拥有五个阶段:顶点拾取、Tessellation、观察口转换、属性设置以及流式输出。每个SM都拥有一个多形体引擎,因此每一阶段中所运算得出的结果都被实时发送至SM处理。该SM能够执行游戏的着色程序、将结果迅速返回至多形体引擎中的下一阶段,从而保证了最高的执行效率。在五个阶段都执行完毕之后,结果会被传递给光栅化引擎。

  第一个阶段是从一个全局顶点缓冲区中获取顶点。所获取的顶点于是被发送至SM,以进行顶点着色以及外壳着色。在这两个阶段中,顶点从一个物体空间转变成了世界空间,而且还算出了Tessellation所需的参数(例如细分级别)。Tessellation系数(或LOD)将被发送至Tessellator进行镶嵌处理。

  在第二个阶段中,多形体引擎读取Tessellation系数。Tessellator将修补面(控制点网格所定义的光滑表面)分成小方块并输出许多顶点。修补(u、v)值定义了网格以及形成网格的连接方式。

  全新的顶点被发送至SM,域着色器与几何着色器均在这里执行。域着色器能够根据外壳着色器与Tessellator的输入来运算每个顶点的最终位置。在本阶段中,通常会附上一个Displacement Mapping(贴图置换)以提升修补面的细节表现。几何着色器能够执行任何后期处理、按需增加或删除顶点以及基元。结果最终将被发回至Tessellation引擎。

  在第三个阶段,多形体引擎会执行观察窗口转换以及视角校正。接下来就是属性设置,把后期观察口顶点属性转变成了平面方程,以进行高效的着色器评估。最后,可以选择将顶点“流出”至存储器,使其能够用于更多处理。

● RV870只有一个控制引擎:

  ATI似乎也意识到了单个控制引擎不足以满足如此庞大规模流处理器并行处理的需要,因此设计了两个Rasterizer(光栅器)和Hierarchial-Z(多级Z缓冲模块)。但其它的模块如Tessellator(镶嵌器)、Vertex Assembler(顶点装配器)、Geometry Assembler(几何装配器)都只有一个:

  4:2的光栅化引擎,16:1的多形体引擎(包括Tessellator),GF100的几何图形性能有多么强大已经可以想象。Tessellation作为ATI发明的技术,对于图形渲染流程与负载的改变ATI不会不知道,如此鸡肋的设计只有一个原因,那就是不做任何改动抢先进入DX11时代,至于执行效率问题暂时抛诸脑后。

  NVIDIA则比较务实,他们要的不是抢第一赚噱头,而是做最完美的DX11显卡。当NVIDIA的工程师通过计算机模拟测试得知几何引擎将会成为DX11新的瓶颈之后,毫不迟疑的选择了将单个控制模块打散,重新设计了多形体引擎和光栅化引擎,并分散至每组SM或每个GPC之中,从而大幅提升了几何性能,彻底消除了瓶颈。

  当然这种革命性的设计代价很大,消耗了NVIDIA工程师无数的精力、资源和时间。事实上多形体引擎正是GF100核心最大的变化所在,也是它无法在去年及时发布的本质原因。
  讲完了GPC(内含光栅引擎)和SM(内含多形体引擎)之后,就轮到了GF100的最小单元——流处理器,现在NVIDIA将它称为CUDA核心。

第四章/第五节 CUDA核心:第三代流处理器

    论单个CUDA核心,GF100与GT200/G80的基本功能是相同的,沿用了之前的1D标量流处理器设计,无论程序要求什么类型的指令,都可以通过线程分配器打散之后交给CUDA核心处理,从而保证任何指令都能获得100%的执行效率。

  虽说像素和顶点等4D指令依然是主力,但在进入DX10时代后Z缓冲区(1D)或纹理存取(2D)等非4D指令所占比重越来越多,此时NVIDIA的标量流处理器架构处理起来依然如鱼得水,但对ATI的5D超标量流处理器架构提出了严峻的考验。

CUDA核心的改进:

  每一个CUDA核心都拥有一个完全流水线化的整数算术逻辑单元(ALU)以及浮点运算单元(FPU)。GF100采用了最新的IEEE754-2008浮点标准,2008标准的主要改进就是支持多种类型的舍入算法。新标准可以只在最终获取数据时进行四舍五入,而以往的标准是每进行一步运算都要四舍五入一次,最后会产生较大的误差。

  GF100能够为32bit单精度和64bit双精度运算提供FMA(Fused Multiply-Add,积和熔加)指令,而GT200只在64bit时才能提供。FMA不仅适用于高性能计算领域,事实上在渲染紧密重叠的三角形时,新的FMA算法能够最大限度的减少渲染误差。

● 16个载入/存储单元:

  每一个SM都拥有16个载入/存储单元,从而在每个时钟周期内均可为16个线程运算源地址与目标地址。支持的单元能够将每个地址的数据载入和存储到高速缓存或显存中。

● 四个特殊功能单元:

  GF100每个SM内部还拥有额外的四个SFU(Special Function Units,特殊功能单元),可用于执行抽象的指令,例如正弦、余弦、倒数和平方根,图形插值指令也在SFU上执行。每个SFU在一个时钟周期内针对每个线程均可执行一条指令,一个Warp(32个线程)的执行时间可超过八个时钟周期。SFU流水线从分派单元中分离出来,让分派单元能够在SFU处于占用状态时分发给其他执行单元。复杂的程序着色器在特殊功能专用硬件上的运行优势尤为明显。

  而ATI的SFU则需要共享SP资源,在每一个Shader单元内部拥有5个流处理器,其中比较“胖”的一个具有SFU的功能,也就是说ATI的架构有1/5的流处理器可以零时充当SFU使用。在大量使用特殊函数运算时,A卡的处理能力会损失不少,而N卡则因为额外的SFU单元辅助效率会更高。

  另外ATI所有的流处理器在执行整数型加、乘指令时仅支持24bit精度,而NVIDIA CUDA核心支持所有整数指令全32位精度,符合标准编程语言的基本要求。整数ALU还经过了优化,可有效支持64位以及更高精度的运算,这一点是对手无法比拟的。

● 双Warp调度器:

  SM可对32个为一组的并行线程(又叫做Warp)进行调度。每个SM拥有两个Warp调度器以及两个指令分派单元。这样就能够同时发出和执行两个Warp。

  GF100的双Warp调度器可选出两个Warp,从每个Warp发出一条指令到16个核心、16个载入/存储单元或4个特殊功能单元。因为Warp是独立执行的,所以GF100的调度器无需检查指令流内部的依存关系。通过利用这种优秀的双指令执行(Dual-issue)模式,GF100能够实现接近峰值的硬件性能。

  大多数指令都能够实现双路执行,两条整数指令、两条浮点指令或者整数、浮点、载入、存储的混合指令以及SFU指令均可同时执行。但双精度指令不支持与其它指令同时分派。

第四章/第六节 GF100图形架构:纹理单元贵在精而不再多 

  GF100的每个SM都拥有4个纹理单元,这样整颗核心总共就是4x16=64个纹理单元,数量居然仅与G92处在同一水平。要知道GTX480被屏蔽了一组SM之后纹理单元只剩下60个,而自家上代GTX285和对手HD5870都拥有80个纹理单元。难道说NVIDIA认为DX11时代纹理贴图并不重要,因此在扩充流处理器规模的同时忽略了纹理?

  在以往的GT200架构中,是三个SM共享一个纹理引擎,该引擎含有八个纹理定址单元和过滤单元。更早的G92则是两个SM共享一个纹理引擎。

  GF100的纹理单元确实是少了,但NVIDIA重新设计了纹理单元,通过改进效率来提升纹理性能,而不是以暴力扩充规模的方式实现,因为NVIDIA发现庞大规模的纹理单元也存在瓶颈,而且会浪费很多晶体管。

  NVIDIA的方法听起来很简单,但做起来很复杂——就是将纹理单元从外围模块搬入到了SM之中,从而提升了纹理高速缓存的利用率、并达到了更高的时钟频率。道理就类似于AMD和Intel把内存控制器整合在了CPU内部,从而大幅提升了内存带宽和延迟。

  我们知道,N卡的流处理器工作频率非常高,达到了核心频率的两倍甚至更高,而其包括纹理单元、光栅单元及周边控制模块在内的其它部分工作频率比较低。现在NVIDIA将纹理单元转移到了SM内部之后,大幅提高了工作频率,全新的一级缓存将以1200-1400MHz的全速运行,纹理单元虽然还是以半速工作但也受益匪浅。

  在GF100架构中,每个SM都拥有自己专用的纹理单元并共享一级纹理高速缓存,GF100专用的1级纹理高速缓存经过重新设计,可实现更高的效率。而且,通过配备统一的2级高速缓存,纹理可用的最大高速缓存容量达到了GT200的三倍,为纹理密集的着色器提升了命中率。

  每个纹理单元在一个时钟周期内能够计算一个纹理地址并获取四个纹理采样。返回的结果可以是经过过滤的也可以是未过滤的。支持的模式包括双线性、三线性以及各向异性过滤模式。

  而且,纹理单元的内部架构还得到了大幅增强。在阴影贴图、屏幕空间环境光遮蔽等实际使用情况中,净效应就是所实现的纹理性能得到了大幅提升。

  GF100的纹理单元还新增了对DirectX 11中BC6H与BC7纹理压缩格式的支持,从而减少了HDR纹理与渲染器目标的存储器占用。

  纹理单元通过DirectX 11的Gather4特性,还支持抖动采样。这样一来,单一纹理指令就能够从一个128×128的像素网格中获取四个纹理像素。GF100在硬件上采用了DirectX 11四偏置点Gather4,大大加快了阴影贴图、环境光遮蔽以及后期处理算法的速度。凭借抖动采样,游戏就能够高效地执行更加平滑的软阴影或定制纹理过滤器。

第四章/第七节 GF100图形架构:一级缓存与二级缓存

  GF100核心拥有很多种类的缓存,他们的用途不尽相同,其中一级缓存、共享缓存和纹理缓存位于SM内部,二级缓存则是独立的一块,与光栅单元及显存控制器相连。

● 64KB可配置共享缓存与一级高速缓存

  以往的GPU都是没有一级缓存的,只有一级纹理缓存,因为这些缓存无法在通用计算中用于存储计算数据,只能用于在纹理采样时暂存纹理。而在GF100当中,NVIDIA首次引入真正的一级高速缓存,而且还可被动态的划分为共享缓存。

  在GF100 GPU中,每个SM除了拥有专用的纹理缓存外,还拥有64KB容量的片上缓存,这部分缓存可配置为16KB的一级缓存+48KB共享缓存,或者是48KB一级缓存+16KB共享缓存。这种划分方式完全是动态执行的,一个时钟周期之后可自动根据任务需要即时切换而不需要程序主动干预。

  一级缓存与共享缓存是互补的,共享缓存能够为明确界定存取数据的算法提升存取速度,而一级缓存则能够为一些不规则的算法提升存储器存取速度。在这些不规则算法中,事先并不知道数据地址。

  对于图形渲染来说,重复或者固定的数据比较多,因此一般是划分48KB为共享缓存,当然剩下的16KB一级缓存也不是完全没用,它可以充当寄存器溢出的缓冲区,让寄存器能够实现不俗的性能提升。

  而在并行计算之中,一级缓存与共享缓存同样重要,它们可以让同一个线程块中的线程能够互相协作,从而促进了片上数据广泛的重复利用并减少了片外的通信量。共享存储器是使许多高性能CUDA应用程序成为可能的重要促成因素。

● 共享式二级高速缓存

  GF100拥有一个768KB容量统一的二级高速缓存,该缓存可以为所有载入、存储以及纹理请求提供服务。二级缓存可在整个GPU中提供高效、高速的数据共享。物理效果、光线追踪以及稀疏数据结构等事先不知道数据地址的算法在硬件高速缓存上的运行优势尤为明显。后期处理过滤器需要多个SM才能读取相同的数据,该过滤器与存储器之间的距离更短,从而提升了带宽效率。

  统一的共享式缓存比单独的缓存效率更高。在独享式缓存设计中,即使同一个缓存被多个指令预订,它也无法使用其它缓存中未贴图的部分。高速缓存的利用率将远低于它的理论带宽。GF100的统一共享式二级高速缓存可在不同请求之间动态地平衡负载,从而充分地利用缓存。二级高速缓存取代了之前GPU中的二级纹理缓存、ROP缓存以及片上FIFO。

  统一的高速缓存还能够确保存储器按照程序的顺序执行存取指令。当读、写路径分离(例如一个只读纹理路径以及一个只写ROP路径)时,可能会出现先写后读的危险。一个统一的读/写路径能够确保程序的正确运行,同时也是让NVIDIA GPU能够支持通用C/C++程序的重要因素。

  与只读的GT200二级缓存相比,GF100的二级高速缓存既能读又能写,
而且是完全一致的。NVIDIA采用了一种优先算法来清除二级缓存中的数据,这种算法包含了各种检查,可帮助确保所需的数据能够驻留在高速缓存当中。

● ATI的一二级缓存设计:

  我们再来看看ATI的缓存设计,其中一级缓存部分与NVIDIA类似,每组SIMD阵列拥有32KB的本地共享缓存和8KB的一级纹理缓存,在通用计算中纹理单元可用于负责数据拾取,这样与SIMD捆绑在一起的4个纹理单元可共享8KB的一级缓存。

  RV870总共拥有20组SIMD阵列,这样总共就是160KB的一级(纹理)缓存和640KB的共享缓存。而GF100则拥有1024KB的可动态配置的一级缓存+共享缓存,不但容量更大而且效率更高。

  二级缓存部分与GT200/G80的设计相同,L2与显存控制器绑定在了一起,每个64bit显存控制器独享128KB L2,四个就是512KB。而GF100拥有单块768KB完全共享的二级缓存,同样是容量更大效率更高。

  可以看出,ATI的一二级缓存都是完全分散的,为了协调一二级缓存之间的数据交换,ATI特意设计了一个可全局共享的64KB数据缓存。至于独享式缓存与共享式缓存的效率与性能,无需多言,大家可参照CPU的发展即可略知一二。

第四章/第八节 GF100架构解析:光栅单元与高倍抗锯齿

  从HD4000时代开始,ATI改进ROP单元设计之后抗锯齿效能大增,在标准的4xMSAA模式下已经与N卡不相上下,而在最高的8xMSAA模式下大幅领先于N卡。NVIDIA虽然提供了比较巧妙的高精度CSAA模式,但画质方面还是比不上正统的MSAA,基于8xMSAA的更高级别8xQ AA与16xQ AA也毫无用武之地,因为N卡的8xMSAA效能偏低。

  为了一雪前耻,NVIDIA在GF100当中重新设计了ROP单元(后端渲染单元,俗称光栅单元)。主要是大幅提升了数据吞吐量与效率,上页介绍过GF100的L2已经不再与ROP及显存控制器绑定在一起,而且是全局共享的,因此存取效能与带宽大幅提升。

  GF100的每个ROPs包括8个ROP单元,比GT200翻了一倍。这8个ROP单元可在一个时钟周期类输出8个32bit整数像素、4个16bit浮点像素或2个32bit浮点像素。原子指令性能也得到了大幅提升,相同地址的原子操作执行速度最高可达GT200的20倍,邻近存储区的操作执行速度最高可达7.5倍。

  在GF100上,由于压缩效率的提升以及更多ROP单元能够更有效地渲染这些无法被压缩的较小基元,因此8倍速多重采样抗锯齿(8xMSAA)的性能得到了大幅提升。

  在上代架构中,由于ROP资源有限,在进行高倍抗锯齿采样的同时还执行渲染后端处理任务时(如SSAO、运动模糊、景深等),效率会非常低下。典型的比如《鹰击长空》、《晴空》等等。

  GF100不仅ROP资源非常丰富,而且可以在DirectCompute 11的帮助下减轻ROP部分的负载,提高执行效率,此时开启高倍抗锯齿就没什么压力了。

● 将CSAA精度提升至32倍,并优化算法实现更高画质

  解决了8xMSAA效率抵消的问题之后,NVIDIA在此基础上更上一层楼,开放了更高级别的32x CSAA抗锯齿模式,上代产品最高只能提供16xQ CSAA而且实用性并不高。同时新的抗锯齿模式还优化了“透明覆盖”(Alpha-to-Coverage)采样的算法,实现更高的画质:

  受到API与GPU计算能力的限制,当今的游戏能够渲染的几何图形数量还很有限。树叶的渲染是一个尤其突出的难题。针对叶子的一种常用技术就是创建一个包含许多树叶的透明纹理模版,利用“透明覆盖”来除去树叶之间的缝隙。覆盖采样的数量决定了边缘的画质。如果只有四个覆盖或八个采样,那么将会出现非常糟糕的锯齿以及镶边现象,尤其是在纹理靠近屏幕的时候。采用32倍速覆盖采样抗锯齿(CSAA),GPU共有32个覆盖采样,从而最大限度减少了镶边效果。

  透明多重采样(TMAA)也能够从CSAA中获益匪浅。由于“透明覆盖”不在DirectX 9 API当中,所以DirectX 9游戏无法直接使用“透明至覆盖”。而TMAA恰恰对这样的游戏有所帮助。取而代之的是,它们采用了一种叫做“透明测试”的技术,该技术能够为透明纹理产生硬边缘。TMAA能够转换DirectX 9应用程序中旧的着色器代码,使其能够使用“透明覆盖”。而“透明覆盖”与CSAA相结合,能够生成大幅提升的图像质量。

第五章 Fermi计算架构解析

第五章/第一节 Fermi计算架构解析:GPU并行计算的历史

    自从NVIDIA于1999年发布第一颗GPU(GeForce 256)开始,GPU就已经与并行计算结下了不解之缘,GPU被扩展成为可进行浮点运算的可编程处理器,而不仅仅是图形处理器。GPU无论计算能力还是内存带宽都要远胜于CPU,其性能不应该被限制在游戏和3D渲染之中。

  针对非图形应用程序的GPU编程的探索始于2003年。通过使用高级绘制语言如DirectX、OpenGL和Cg,将多种数据平行算法导入GPU。诸如蛋白质折叠、股票期权定价、SQL查询及MRI重建等问题都能通过GPU获得非凡的加速表现。早期将图形API用于通用计算的努力被称之为GPGPU(GPU通用计算)。

  虽然GPGPU模型展现了不俗的加速性能,但仍然有不少缺陷:

  首先,它要求程序员全面掌握与图形API以及GPU架构相关的知识;
  其次,问题必须以顶点坐标、纹理及着色器程序的形式表达出来,这就大大增加了程序的复杂程度;
  第三,不支持基础的编程特性如面向内存的随机读写,极大地限制了编程模型;
  最后,缺乏双精度支持(直到最近才具备这一特性)意味着有些科学应用程序将不能在GPU上运行。

  为了解决这些问题,NVIDIA采用了两种关键技术——G80统一图形及计算架构和CUDA。CUDA是一种软硬件架构,可以使用多种高级编程语言来针对GPU进行编程。这两种技术代表着一种新的应用GPU的方式。跟以前通过编程将专门的图形单元同图形API结合到一起不同,程序员可以利用CUDA的扩展来编写C语言程序,并面向一个通用的平行处理器。NVIDIA将这种新的GPU编程方式称为“GPU计算”,它意味着更广泛的应用程序支持、更多编程语言的支持以及同早期GPGPU编程模型的彻底分离。

  第一款支持C语言的GPU,它让程序员可以利用GPU的运算能力而无需掌握一门新的编程语言;

  第一款以单一的非统一的处理器取代分离式顶点及像素管线的GPU,这种处理器可以执行顶点、几何、像素及计算程序;

  第一款利用标量线程处理器的GPU,从而使得程序员无需手工操控向量寄存器。

  G80还采用了单指令、多线程(SIMT)的执行模型,多个独立线程同时执行单个指令,并针对线程间通信采用了共用存储器和障栅同步。

  之后NVIDIA又对G80架构进行了重大改进,第二代统一架构GT200将流处理器的数量从128增加到了240个。每一个处理器的寄存器数量增倍,使得任何时候都可以在芯片上处理更多的线程。采用了硬件存储器存取合并技术以提高存储器存取的效率。此外,还采用了双精度浮点运算支持以满足那些科学及高性能计算(HPC)应用程序的需求。

  在设计每款新一代GPU时,都必须遵循这样的原则——提高当前应用程序的性能及GPU的可编程性。应用程序的速度提高会立竿见影地带来诸多好处。正是GPU在可编程性方面的不断进步才使得它演变成为当前最通用的并行处理器。也正是基于这样的理念,GT200架构的继任者又被赋予了更多新的功能。

第五章/第二节 Fermi计算架构:完全按照客户需求设计

  在竞争对手还在游戏性能方面苦苦追赶之时,高瞻远瞩的NVIDIA已经在朝着更高的目标迈进了。3D和游戏当然是一个重要方面,是GPU的老本行,而并行计算则是GPU的未来,两者不但不冲突而且是相辅相成的,NVIDIA的目的是游戏和计算两手抓、两手都要硬。

  在前文中笔者提到过,GF100是近年来GPU架构变化最大的一次,它不仅仅体现在图形架构方面,其实他在并行计算架构方面的改进更彻底,现在要讲的才是Fermi架构的精华部分。

  G80是统一图形及并行计算的雏形,而GT200是对G80在性能及功能性方面的扩展。而对于Fermi,NVIDIA利用了从之前两款处理器以及为它们所编写的应用程序所获得的经验,并采用了一种全新的方法而设计和创建了世界上第一款计算GPU。在为Fermi的研发开展准备工作时,NVIDIA听取了自推出G80和GT200以来大量从事GPU计算的用户的反馈,并将以下关键领域作为改进的重点:

1. 提高双精度浮点运算的性能——高性能计算与科学计算很少用到单精度。

2. ECC支持——ECC使得GPU计算用户在数据中心中可放心地部署大量的GPU,并确保数据敏感型应用程序如医学影像及财务期权定价等不出现内存错误。

3. 真正的缓存层次——有些并行算法无法使用GPU的共用存储器,用户需要一个真正的缓存架构以提供帮助。

4. 更大的共用存储空间——许多CUDA程序员需要超过16KB的共用存储器来实现应用程序的加速。

5. 更快速的情境转换——用户需要在应用程序之间实现更快速的情境转换,以及图形与计算应用之间更快的互操作。

6. 更快速的原子操作——用户需要为他们的并行算法实现更快速的“读-修改-写”原子操作。

  针对以上的这些需求,Fermi工作小组设计了一款处理器,总计算能力得到了很大的提升,通过架构上的创新还大大增加了可编程性以及计算效率。Fermi在架构上的亮点体现在:

● 第三代流处理器簇(SM)

每个SM有32个CUDA核,是GT200的4倍
双精度浮点运算的峰值性能是GT200的8倍
双Warp调度器同时调度和分配来自两个不同warp的指令
64KB的RAM,可配置为共享缓存+L1缓存

● 第二代并行线程执行ISA

统一寻址空间,提供完全的C++支持
针对OpenCL和DirectCompute做优化处理
完全的IEEE 754-2008 32-bit/64-bit精度支持
完全的32-bit整数路径,64-bit扩展
内存存取指令支持向64-bit寻址的转换
通过Predication提升性能

● 改进的内存子系统

并行DataCacheTM 层次,拥有可配置的L1和统一的L2缓存
第一款提供ECC内存支持的GPU
显著提升原子内存操作性能

● NVIDIA TM引擎

应用程序情境切换性能10倍于上代产品
同时执行多个核心程序
线程块乱序执行
双重叠式内存传输引擎

第五章/第三节 Fermi计算架构:恐怖的双精度性能

  Fermi是NVIDIA新一代图形架构的开发代号,包括GeForce、Quadro、Tesla在内的三种产品都将基于Fermi架构设计;GF100是该架构第一颗GPU的核心代号;GTX400系列则是NVIDIA第一代DX11显卡,GTX480和GTX470是该系列基于GF100核心的高端显卡产品。基于Fermi架构的计算处理器则被称为Tesla C2050/C2070。

  第一款基于Fermi架构的GPU就是GF100,不管是民用级的GeForce还是专业级的Tesla,其GPU核心及架构是完全相同的。此前已经详细介绍了它的图形架构,此处着重介绍并行计算方面的内容。

  首先我们来看看Fermi的计算架构与图形架构有何不同呢?原来对于图形架构最重要的光栅化引擎与多形体引擎都不见了,GF100的四块GPC也不再区分,剩下的只有SM、CUDA核心还有缓存。

  Fermi的16个SM分布在通用L2缓存的周围。每个SM都是一个垂直的矩形条,包含一块橘色区域(调度和分配)、一块绿色区域(执行单元)和一块淡蓝色区域(寄存器和L1缓存)。

  Fermi的流处理器簇已经是第三代了,其改进其实之前在图形架构部分也介绍过,因为这些对于图形渲染或多或少还是有点用的,当然对于科学计算来说简直是革命性的:

  首先CUDA内核中的FPU采用了最新的IEEE 754-2008浮点标准,为单精度和双精度算法都提供了FMA指令,FMA在做乘法和加法运算的时候只在最后作一次舍入,不会在执行加法的时候就出现精度损失,FMA的精度比把操作分开执行时更高。

  其次,NVIDIA上代的GT200和对手最新的RV870在执行整数型加、乘指令时仅支持24bit精度,因此整数算法需要多指令的模拟序列。而对于Fermi,全新设计的整数ALU支持32位精度,面向所有符合标准编程语言要求的指令。同时,还对该整数ALU进行了优化,使其有效地支持64位及扩展的精度操作。它支持各种指令,包括Boolean(布尔)、shift(位移)、move(数据传输或赋值)、compare(比较)、convert(转换)、bit-field extract(位平面提取)、bit-reverse insert(位反转插入)和population count(计数)。

  最最重要的一点,Fermi的双精度运算能力达到了单精度的一半,而上代GT200的双精度能力只有单精度的1/8,对手的RV870是1/5,显而易见此次双精度运算能力的提升是革命性的。

    此外,Fermi架构中的双Warp调度器是完全独立的,无需对指令流内的相依性进行检测,在这种双指令发射模型下,Fermi的硬件性能非常接近与理论峰值。

第五章/第四节 Fermi计算架构:首次支持C++

  Fermi是第一个支持新并行线程执行(PTX)2.0指令集的体系结构。PTX是级别较低的虚拟机和ISA,目的是为了支持并行线程处理器的运作。在程序安装的时候,PTX指令会被GPU驱动转译成机器代码。

    PTX的主要目标包括:

1. 提供一个能跨越数代GPU的稳定ISA
2. 让经过编译的应用程序充分利用GPU的性能
3. 提供一个支持 C、C++、Fortran以及其他编译器对象并且与机器无关的ISA
4. 为应用程序和中间件开发者提供一个代码分发ISA
5. 为优化映射PTX 代码至对象机器的代码产生器和转移器提供一个一般化的ISA
6. 让库以及性能核心程序(performance kernel)代码编写更容易
7. 提供一个可以跨越GPU内核规模(从几个到多个)的可伸缩编程模型

    PTX2.0具备许多新的特性,大大提升了GPU(图形处理器)的可编程性、精度及性能。这些特性包括:完全的IEEE 32位浮点精度;所有变量和指针都有统一的寻址空间;64位寻址;以及针对OpenCL和DirectCompute的新指令。尤为重要的是,PTX2.0完全支持C++编程语言。

● 统一寻址空间实现完全的C++支持

  Fermi和PTX 2.0 ISA采用统一的寻址空间,将存取操作的三个不同的寻址空间(线程的私有局部空间、线程块的共用空间、全局空间)进行了统一。在PTX 1.0中,存取指令都具体对应这三个寻址空间中的一个,程序就可以在一个编译时确知的指定寻址空间中存取数值。这样很难为C和C++指针提供完全的支持,因为一个指针的目标寻址空间在编译时可能根本无从知晓而只有在运行时才能动态确定。

    PTX 2.0把三个寻址空间都统一为一个单独、连续的寻址空间,因此只需一套存取指令,而不再需要三套针对不同寻址空间(局部的、共用的及全局存储器)的存取指令。统一寻址空间为40位,可以支持1 Terabyte的可设定地址的内存,而存取ISA支持64位以适应未来的增长。

  采用统一的寻址空间让Fermi可以真正支持C++程序。在C++中,所有的变量和函数都存在于对象中,而对象又通过指针进行传递。有了PTX 2.0,就可以利用统一的指针传递任意存储空间里的对象。Fermi的硬件地址转译单元自动将指针参考映射到正确的存储空间。

    Fermi和PTX 2.0 ISA还支持C++虚拟函数、函数指针、针对动态对象分配、解除分配的“new”和“delete”操作以及针对异常处理的“try”和“catch” 操作。

● 针对OpenCL和DirectCompute的优化

    OpenCL及DirectCompute同CUDA的编程模型有非常密切的对应关系,CUDA里的线程、线程块、线程块格、障栅同步、共用存储器、全局存储器以及原子操作都能在OpenCL和DirectCompute中看到,可以说OpenCL和DirectCompute的整个框架就是照搬CUDA的,因此基于CUDA的Fermi天生就已经为OpenCL和DirectCompute提供了优化。

    此外,Fermi还为OpenCL和DirectCompute的表面(surface)格式转换指令提供了硬件支持,允许图形与计算程序能简单地对相同的数据进行操作。PTX 2.0 ISA还为DirectCompute提供了population count、append以及bit-reverse 指令的支持。

第五章/第五节 Fermi计算架构:首次支持显存ECC

    NVIDIA在与程序员的沟通与反馈中发现,虽然共享内存能够惠及许多问题,但它并不能够用于解决所有问题。一些算法会自然而言地关联到共享内存,另一些则要求高速缓存,还有一些要求二者的组合。最佳的内存层级结构应能够同时为共享内存和高速缓存带来优势,同时让编程人员可以选择在二者之上进行设计。Fermi内存层级结构支持两种类型的程序行为。

  为加载/存储操作添加一个真正的高速缓存层级结构会带来严峻挑战。传统的GPU架构为纹理操作提供了只读“加载”路径,同时为像素数据输出提供了只写“输出”路径。然而,这一方法在执行要求同时进行读写的通用C或C++线程程序时表现非常不佳。例如,向内存发起一个寄存瀑然后再读回会形成写后读威胁。如果读和写路径不同,可能会直接覆盖掉整个写/“导出”路径,而无法正确发起读操作,从而使得读路径上的任意高速缓存不能与写数据保持一致。

  Fermi通过为加载和存储提供单个统一的内存请求路径解决了这一挑战,这一方法为每一个SM多处理器提供一个一级高速缓存,同时设置统一的二级高速缓存,以支持所有操作(加载、存储和纹理)。每个SM多处理器上的一级高速缓存可以进行配置,以支持共享内存和缓存本地与全局内存操作。64KB的内存可分出48 KB用作共享内存,16KB用作一级高速缓存;或者16KB用作共享内存,48KB用作一级高速缓存。当提供48KB的共享内存时,需要广泛使用共享内存的程序(如电子动态模拟)的性能将可以提高三倍。对于预先无法确定内存访问情况的程序,设置48KB的一级高速缓存将能够比直接访问DRAM带来显著改进的性能。

  在任意一种配置中,一级高速缓存都可以通过缓存复杂程序的临时寄存器溢出对性能有所帮助。前一代GPU将寄存器直接交给DRAM,从而增加了访问延迟。通过使用一级高速缓存,性能能够随着临时寄存器容量的增加逐步提升。

  Fermi采用了一个768KB统一二级高速缓存,用于支持所有加载、存储和纹理请求。二级高速缓存在GPU之间提供了有效、高速的数据共享。针对以前未知的数据地址的算法,如Physics Solver、光线追踪以及稀疏矩阵相乘等,将能够从这一高速缓存结构中受益最大。此外,要求多个SM来读取同一数据的过滤器和卷积内核也能够从中受益。

● 第一款支持ECC显存的GPU

  Fermi是第一个在显存中提供了基于纠错码(ECC)的数据保护功能的GPU。CPU计算用户使用ECC来在高性能计算环境中增强数据完整性。ECC是诸如医疗成像以及大型集群计算等领域中一个迫切需要的特性。

  自然发生的辐射可能导致内存中的数据被更改,导致软错误。ECC技术能够在单位软错误影响系统之前就予以发现并进行纠正。由于此类辐射所致错误的可能性随已安装系统的数量直线增长,ECC是大型集群部署中的一个必备要求。

  Fermi支持单错纠正双错检测(SECDED)ECC代码,能够在数据被访问期间纠正硬件中的任意单位错误。此外,SECDED ECC还确保了所有双位错误和众多多位错误能够被发现和报告,以便能够重新运行程序,而不是继续执行不良数据。

  Fermi的寄存器文件、共享内存、一级高速缓存、二级高速缓存和显存均提供有ECC保护功能,从而不仅是适用于HPC应用的最强大GPU,同时也是最可靠的GPU。此外,Fermi还支持行业标准,能够当在芯片间传输数据时对其进行检查。所有NVIDIA GPU均支持用于CRC检查的PCI-E标准,能够在数据链路层进行重试。Fermi还支持用于CRC检查的同类GDDR5标准,能够当数据在内存总线上传输时进行重试(也称作“EDC”)。

  是否支持ECC,成为GeForce与Tesla的最大区别,当然Tesla还配备了更大容量的显存,为密集型数据处理提供更高的性能。

第五章/第五节 Fermi计算架构:NVIDIA Nexus开发平台

  NVIDIA Nexus是第一个设计用于支持大规模并行CUDA C、OpenCL和DirectCompute应用的开发环境。它通过将支持并行处理的硬件源代码的调试与性能分析工作直接交由Microsoft Visual Studio进行,有效消除了CPU和GPU之间的生产率差距。Visual Studio是Windows操作系统下使用最广泛的集成应用开发环境。

  Nexus支持Visual Studio开发人员使用与在编写和调试CPU代码时用到的完全相同的工具与接口,来编写和调试GPU源代码,包括来源和数据断点、以及内存检测等。此外,Nexus还扩展了Visual Studio的功能,提供了工具来管理大规模并行计算,如支持对数千个并行运行的线程中的某一个进行检测和调试,以及对所有并行线程计算得出的结果进行高效的可视化呈现等。

  Nexus是开发能够同时利用CPU和GPU的协处理应用的最佳环境。它能够在两个处理器间捕获性能事件和信息,并在单个相互关联的时间线内将信息显示给开发人员。在此基础之上,开发人员能够了解到其应用在整个系统中的执行和表现情况,而不是被局限于某个子系统或处理器。

● 本章小节:

  很显然,Fermi并非简单地添加执行单元构建而成,它解决了GPU计算领域的一些最富挑战性的问题。数据局部性的重要性通过Fermi的两级高速缓存结构及其整合的加载/存储内存路径,得到了充分展现。双精度计算性能被提升到了超级计算级别,同时原子操作的执行速度加快了二十多倍。最后,Fermi的全面ECC支持也有力彰显了NVIDIA大举进攻高性能计算市场的野心。

  在软件方面,Fermi架构首次提供了C++和Nexus支持。其中C++是世界上应用最广的基于对象的编程语言;Nexus是全球首个设计用于支持大规模并行GPU计算应用的开发环境。

  凭借其卓越性能、强大功能和出色可编程性的完美组合,Fermi架构将是GPU计算下一代发展的必然方向。

第六章 GeForce附加功能再次得到增强

  前面几章讲述的都是NVIDIA新一代显卡所独有的技术,用户必须购买全新的GTX480/470显卡才能享受。而本章所要介绍的则是之前大家耳熟能想的老技术,但伴随着Fermi的发布,这些技术无论性能、功能还是技术都被NVIDIA大幅增强,老N卡用户都可以从中获益……

第六章/第一节 附加功能增强:PhysX物理加速

  PhysX是NVIDIA的一大法宝,在NVIDIA DX11显卡面世之前,旧的N卡正是凭借该技术与A卡相抗衡。通过笔者此前的网友调查来看,虽然PhysX的关注度没有DX11那么高,但还是拥有很多忠实的用户,一些玩家为了同时追求DX11与PhysX,费尽心机通过破解杂交的方式来让N卡和A卡协同工作。

  如今GTX480/470正式发布,同时支持DX11和PhysX,玩家没必要再瞎折腾了。而且刚刚发布的《地铁2033》这款游戏对DX11和PhysX都提供了支持,看来不光是玩家,开发商对于PhysX也比较热衷,毕竟这是目前唯一一款支持GPU加速的物理引擎,而另一款物理引擎Havok在被Intel收购之后一直处于雪藏状态。

  此前想要实现物理效果必须购买专用的物理加速卡,而NVIDIA收购了Ageia公司之后,将PhysX技术以完全免费的形式附送给了GeForce显卡,让N卡用户多了一个非常炫的功能。

  NVIDIA在游戏界有着举足轻重的影响力,和众多游戏开发商保持着密切的合作关系,大名鼎鼎的“The Way”计划就保证了N卡在几乎所有游戏大作中都有着良好的性能发挥。PhysX物理引擎被NVIDIA收入囊中之后,原本屈指可数的物理游戏逐渐开花结果,以《镜之边缘》、《蝙蝠侠》、《黑暗虚空》为代表的一些重量级大作开始使用PhysX物理引擎,影响力非同小可。

   而且,中国本土游戏开发商也开始使用PhysX引擎来增强画面,比如《MKZ铁甲突袭》和《剑网3》都内置了PhysX支持,可见PhysX技术显然要比其它同类物理技术更易用一些。

  虽然物理加速技术还没有一个统一的标准,但PhysX无论从游戏数量还是画面效果方面,都更胜一筹。随着使用PhysX引擎的游戏越来越多,独一无二的PhysX显然将会成为事实上的标准。

  新发布的GTX480/470显卡在PhysX加速方面的性能有了长足的进步,但NVIDIA上一代显卡如果单独拿来做物理加速卡的话,性能也很足够,特效也不会损失,因为PhysX考验的是CUDA并行计算效能,与DX API支持度无关。然如果N卡用户想要升级到GTX480/470的话,旧显卡没必要淘汰,它还可以当作单独的物理加速卡使用,从而为GTX480/470减负,达到更高的游戏性能。

第六章/第二节 GeForce增强附加功能:3D立体3屏技术

  ATI HD5000系列最诱人的技术恐怕就是Eyefinity了,实现三屏环幕的效果确实相当震撼,为游戏玩家提供了非常宽阔的视野。当然这里说的三屏并不是简单的连接三个显示器,而是将三个显示器虚拟成为一个大的分辨率,然后实现超宽分辨率的游戏,这才是玩家最需要的技术。

  NVIDIA最新的GTX400并没有提供单卡三屏输出,这将会导致N卡失去一个很大的卖点。为了弥补显示输出方面的不足,NVIDIA为双卡SLI系统重新编写了驱动,使得双卡能够实现与ATI完全相同的三屏环绕输出。

  NVIDIA这种解决方案的缺点就是需要两张显卡才能实现,但优点就是显卡并没有限定非得用刚刚发布的GTX480/470,上一代的显卡也可以,只要组成SLI即可。还有个好处就是SLI系统性能比较强劲,足以带动大分辨率玩BT游戏。

  当然,最具有特色的就是,三屏环幕结合3D Vision技术,实现3D立体3屏环绕技术,足以产生令人震惊的显示效果。这一顶尖技术目前还只有NVIDIA能做得到,AMD的3D立体方案还停留在实验室当中。

  现在,玩家不用在3D Vision和Eyefinity这两种技术之间徘徊了,因为NVIDIA也能支持“Eyefinity”技术,只要您组建SLI系统。至于3D Vision则成本较高,好在红蓝模式也能凑合看,如果您预算有限的话不妨继续等待,目前3D立体已经成为大势所趋,相关设备应该很快就会降到一个合理价位。

  三屏的兼容性是几近完美的,只要游戏能支持宽屏模式即可,而NVIDIA 3D Vision对于游戏的支持度也是非常到位,因此3D Vision Surround的效果无须质疑,有兴趣的朋友不妨去NVIDIA合作伙伴的形象店去体验体验

第六章/第三节 增强附加功能:光线追踪

  光线追踪技术我们已经谈论了多年,由于消耗资源太恐怖一直都停留在纸面,未能进入民用阶段,但谁也不能否认它就是图形处理的未来发展趋势。

  为了让光线追踪早日成为现实,NVIDIA将光线追踪与现有的光栅化技术结合了起来,制作了第一个针对民用级市场的交互式光线追踪引擎。

  过去的GPU很难以较高的效率运行光线追踪这种渲染模式,因为光线的方向具有不可预测性,需要大量随机存储的存取,导致GPU反复进行着相同的操作。为了高效期间,GPU一般以线性块的方式进行存取。

  GF100的计算架构在设计之初就将光线追踪考虑在内了,GF100是首款在硬件上支持循环的GPU,它能够执行高效的光线追踪以及大量其它图形算法。通过提升随机存储的性能,GF100的L1、L2大幅提升了光线追踪效率,L1为临近的光线增强了存储器的本地性,L2则增大了显存带宽。

  GF100不仅在标准光线追踪中表现出色,而且在路径追踪等高级全局照明算法中也有不凡的表现。路径追踪采用大量光线来收集场景中的环境光照信息。据实际测试来看,GF100的性能可达GT200的四倍之多。

  为了维持性能,游戏也可以有选择的运用光线追踪。例如,光栅化可以用来执行场景的第一个通道,被确定为反射光的像素可以通过光线追踪来接受进一步的处理。这种混合型渲染模式能够实现更高性能以及更佳的图像质量。

  现在N卡用户都可以去下载NVIDIA的这个Demo,来体验一下传说中的光线追踪到底能有多好的画质、能有多么逼真?当然上代显卡的速度会比较慢,而GTX480/470则要快很多。

第七章 GTX480/470显卡实物解析

第七章/第一节 GTX480/470显卡实物赏析

  GF100是由30亿颗晶体管打造的怪兽级核心,虽然使用了先进的40nm工艺,但功耗发热依然不低,那么采用GF100核心的显卡GTX480/470到底长什么样呢?会不会也是体形超大的怪兽?

革命性DX11架构!GTX480470权威评测

革命性DX11架构!GTX480470权威评测
从上到下依次为:GTX285、GTX480、GTX470

    笔者拿到GTX480和GTX470显卡时,也没有想到它们会如此“小巧”,GTX480与GTX285一样长,GTX470还要更短小一些,并没有想想中的那么夸张。

  如果看图片还不够直观的话,通过下面的数据来了解高端显卡的长度数据:

  HD5970=31CM

  GTX480=HD5870=HD4870X2=GTX295=GTX285=28CM

  GTX470=HD5850=HD4890=HD4870=24CM

  GF100核心要比RV870复杂很多,NVIDIA居然将显卡长度和散热器体积控制的如此出色,着实难能可贵。通过对比图可以看出GTX480的外观较NVIDIA此前的公版卡风格有了很大的变化,下面就来仔细看看。

第七章/第二节 GTX480/470显卡实物赏析

  首先来看看NVIDIA官方公布的GTX480显卡照片,经过处理之后非常漂亮,而且每张都是3000像素以上的超大分辨率,适合NFan们当作桌面使用。

第七章/第三节 GTX480/470显卡实物赏析

第七章/第四节 GTX480实物:外观和散热器实拍图

  前面是NVIDIA官方的图片,下面是我们评测室收到的样卡,接下来将对它进行全方位拆解,将所有细节展示给大家看

  值得一提的是,GF100核心依然仅支持双头输出,并不像HD5000那样可以支持三屏甚至六屏输出。所以这里GTX480虽然设计了三路数字输出,但最高仅支持两个2560x1600的分辨率。其中HDMI是因为挡板实在没有空间才设计为Mini型接口,它需要占据DVI的一个通道,三头无法同时启用。

  NVIDIA称,之所以没有设计Mini DisplayPort是因为DP显示设备太少而且价格昂贵,但HDMI在家电消费领域已经得到普及,而且一些支持3D立体显示的电视机、投影仪和显示器都支持HDMI 1.4标准,因此NVIDIA额外设计了一个Mini HDMI来支持这一最新标准。HDMI虽然可以通过DVI转接而来,但无法支持立体显示,因此原生Mini HDMI是一个必备接口。

  GTX480的散热器实在是不简单,为了充分利用空间,加大散热鳍片密度,四条热管不得不裸露在外(还有一条隐藏在里面);为了加大涡轮风扇的进风量,PCB经过了镂空处理,而且散热器外壳的风扇位置刻意下沉了一段距离,这样就能保证多块GTX480紧挨着插在主板上时,也不会发生散热器吸风受阻影响散热的情况。

  GTX480的散热片是一体式的,外壳直接裸露在外,可以一定程度上加强散热能力。经过镀镍之后的金属外壳也很有质感,使得公版卡别具特色。但该散热片与热管在显卡满载工作时非常烫手,笔者就在拆GTX480显卡时不小心被烫伤了,因为其它所有显卡都用塑料外壳温度并不高,而GTX480的金属外壳几乎与核心温度相同。

第七章/第五节 GTX480实物:全裸拆解与显存解析

  取下散热器,GTX480的庐山真面目一览无余:

  GF100核心与G92一样,已经整合了所有的功能模块和输出模块,并不像GT200/G80那样专门把2D输出模块单独分离出来设计成一颗NVIO芯片,正所谓分久必合、合久必分。单一芯片使得GTX480整卡看上去比GTX285简洁多了。

  GTX480的核心代号是GF100-375,目前已经是A3版本了,看来GF100在发布之前已经过了多个版本的修正与改进。要知道当年8800GTX用的是A2版本的核心,8800Ultra使用的才是A3版本,频率得到了大幅提升。

  GF100-375并不是完整的GF100核心,其中被屏蔽了一组SM,也就是32个CUDA核心和4个纹理单元,而显存位宽和光栅单元都保持不变。

  GTX480所用的显存颗粒与HD5870完全相同,三星0.4ns GDDR5颗粒,32Mx32颗粒,12颗组成1.5GB 384Bit的规格。

  该显存的理论频率可达5000MHz,HD5870的默认频率高达4800MHz,而GTX480的默认频率仅为3700MHz,只比ATI第一代GDDR5显卡HD4870高100MHz。看来NVIDIA对于GDDR5显存颗粒的特性尚未吃透,显存控制器还无法达到更高的频率。

  虽然更大的位宽弥补了频率的不足,GTX480的177GB/s显存带宽也要高于HD5870的154GB/s,但要知道NVIDIA上代产品GTX285凭借512Bit GDDR3也达到了159GB/s的水平,GTX480大幅扩充规模之后当然需要更加海量的带宽,显然GDDR5的频率已经制约到了GF100实力发挥。

  输出接口部分让人有些失望,这是近年来NVIDIA首次在高端显卡上面没有安装DVI屏蔽罩。虽然数字输出不需要低通滤波电路,但在输出2560x1600这样的高分辨率时,屏蔽措施还是很重要的。君不见Dual-Link DVI数据线都非常粗壮,屏蔽措施做得非常好,如果显卡输出部分不安装屏蔽罩的话,很容易受到手机信号的干扰。

  虽然我们收到的NVIDIA测试样卡没有屏蔽罩,但厂商实际上市的公版卡和重新设计的非公版显卡可能会加装屏蔽罩,这种成本不高但比较实用配件还是不要缩水比较好一些。

第七章/第六节 GTX480实物:全裸拆解与显存解析

  GTX480并没有像ATI那样采用先进的数字供电,但规模和做工用料也非常豪华,我们来仔细看看:

  GTX480的供电模块使用了CHiL的解决方案,CHL8266是一颗最高支持6相供电的数字式PWM主控,最大输出电流可达200A,最高输出电压2V,可支持400W的核心。CHL8266兼容Intel最新的VMR11.1规范,支持可编程或动态开关相位的节能技术及高转换效率模式,提供了智能调节负载与电压输出的Gamer模式,非常适合大功率显卡使用。

  CHL8266主控搭配6颗CHL8510 MOS管驱动器构成一套完整6相供电回路,每颗CHL8510最高可输出6A电流,6颗可提供超过400W的功率输出,完全满足GF100核心的需要。

  GTX480的TDP(热设计功耗)达到了250W,双6Pin PCI-E供电接口无法提供如此大的功率输入,因此只好采用了8+6Pin的设计,再加上PCI-E接口本身的供电,最高可达300W功率输入。

第七章/第七节 GTX480实物:外观与散热器赏析

  GTX470比GTX480更苗条一点,散热片并没有裸露在外,和以前的GTX260、8800GTS等显卡的外形比较相似。

  GTX470几乎就是GTX480的缩小版,整体外形与结构完全相同,PCB也经过镂空处理,外壳风扇部分也凹进去一点,确保SLI模式下也有足够的进风量。

  输出接口与GTX480完全相同,第二条PCI插槽位全部用作出风口,热风将被毫无阻挡的吹出机箱外,这样整体风道的散热效率就会比HD5870/5850高一些。

  GTX470的散热器结构与GTX480完全相同,但散热片小一些,热管也少一根,由于体积的缩小,GTX470包括弯曲热管在内的所有散热片都可以被装在外壳里面,没有任何金属裸露在外,不用怕被烫伤了。

第七章/第八节 GTX480实物:外观与散热器赏析

    GTX470的PCB比GTX480更短小,因此元器件的排列密度更高了,不过各大模块的布局依然十分清晰。

   GTX470的核心代号是GF100-275,也是40nm工艺A3步进。这颗核心被屏蔽掉了两组SM,也就是64个流处理器和8个纹理单元,另外还屏蔽了组64bit显存控制器,光栅单元少了8个。

  依然是三星GDDR5 32Mx32显存颗粒,但速度慢了一点,0.5ns理论频率是4000MHz。而GTX470的默认显存频率只有3350MHz,最终显存带宽只比HD5850高一点点。

  320bit的显存位宽只需要10颗显存颗粒就能满足,比GTX480少了两颗,因此GTX470的显存规格就是1280MB,容量也少了256MB。

  GTX470的供电部分也经过了重新设计,电源主控更换为安森美半导体的NCP5388 4相PWM控制器,兼容Intel VMR11.0规范,不支持动态节能技术。这颗主控经常出现在中低端显卡之上,不过该主控同样具有大电流稳定输出的能力。

  供电模块的做工用料比较传统,可谓是比上不足比下有余。

  输出接口同样没有安装DVI屏蔽罩,对于普通1920x1200级别分辨率可能影响不大,但如果使用2560x1600分辨率的显示器或者120Hz 3D显示器的话,就有影响了。

第七章/第九节 首批送测显卡:七彩虹GTX470

  据了解本次GeForce GTX 480/470的产品发布合作伙伴在中国一共是8家厂商,大家可以关注以下八家厂商以保证可以第一时间的买到GeForce GTX 480/470。分别是,七彩虹、翔升、耕昇、影驰、Inno3D、微星、索泰和技嘉。

  令人欣喜的是,七彩虹公版设计的GTX470显卡加装了DVI屏蔽罩,显示输出质量得到了保证,像笔者这样吹毛求疵的玩家可以安心了。
第八章 GeForce GTX 480演示DEMO解析

  无论ATI还是NVIDIA,每次有新显卡发布都会同时公布一个或者多个用显卡实时渲染而成的DEMO。这些美轮美奂DEMO的设计初衷就是通过完美的3D效果征服每一位观众,让大家对新显卡的性能和技术充满憧憬和期待。所以ATI和NVIDIA必定会使出浑身解数,在DEMO中大量采用显卡最新、特有、特长技术。

第八章/第一节 NVIDIA DX10时代经典DEMO回顾

8800GTX:四款Demo

  首款DX10显卡——8800GTX发布时NVIDIA就公布了四款演示Demo,其中主打Demo有点新意,是将一位真人美女模特Adrianne从现实复制到了3D虚拟世界,作为虚拟形象代言人。

8800GTX主打Demo:Adrianne

  与最新图形技术的集大成者Adrianne不同,另外三个比较小的Demo各有侧重点,也都各有各的特色:

 Froggy:测重几何

 Box of Smoke:测重物理

 Waterword:测重纹理

  在G80发布之时,Vista和DX10都尚未正式发布,为了展示G80超前的技术特性,NVIDIA使用了OpenGL来实现了相同的效果,完全体现出了统一渲染架构的威力,以及新一代显卡高精度纹理填充、几何着色、还有物理等效果。

● 8800Ultra:Human Head Demo

    半年后8800Ultra发布,虽然同样是基于G80核心,技术上没有任何变化,但NVIDIA还是放出一款新的Human Head Demo,这款Demo同样给玩家带来了极强的视觉冲击:

  在这个Demo中总共使用了多达17层纹理贴图合成了细致入微的头部皮肤!每一层纹理贴图的分辨率都是4096×4096像素,这样即便是以很近的视角观察人物皮肤,也不会出现失真的情况。如此一来,DEMO的每一帧图像都要对4000多万个像素进行着色,每秒渲染12亿个像素,而且使用了超长像素指令。

  除此之外HDR效果也得到了完美展现。DEMO使用了两个独立的点光源投射在人头上,这两个光源可以通过鼠标随时改变方位及色彩,然后动态的反映在多层皮肤上,通过表面散射技术生成完美无暇的阴影。混合纹理以及动态光影对Shader性能和显存带宽都有苛刻的要求,G80核心在Shader以及纹理方面的性能都得到了大幅提升,而8800Ultra凭借高频率性能又提升了一个档次,由此得以在高分辨率和高画质下流畅运行。

GTX280:Medusa Demo

  GTX280虽然仅支持DX10没有升级到DX10.1,但在性能和特性方面都有了长足的进步,因此NVIDIA发布了更加强大的演示Demo来展示实力,这个Demo叫做美杜莎:

  这个Demo的人物造型设计可以说是意味深长,从美杜莎的身上我们很容易看到6800Ultra Nalu和7800GTX Luna的影子。

  美杜莎Demo是一小段剧情,描述了一位寻宝冒险者被美杜莎杀害的过程:这位冒险者来到神殿之后发现了很多无头石像,但在美杜莎出现之后,他被美杜莎美丽的相貌所吸引,警惕心不复存在;美杜莎主动献出宝物,冒险者不由自主地放下了手中的武器;此时,美杜莎偷偷的施展石化技能,自下而上冒险者的身体慢慢的变成了石块,等他意识到了为时已晚;可怜的冒险者成为了神殿的又一尊石像,神殿宝物完璧归赵,最后美杜莎终于露出了她那恐怖的真实面目,并用蛇尾将冒险者头部击碎……

  美杜莎Demo的特色:超逼真的人物面部表情和肢体动作;高精度多层纹理贴图+超高多边形构成复杂的周边环境;大量使用烟、灰、雾、动态模糊等复杂着色;GPU物理加速:液体流动、衣物运动、火焰效果、破坏效果等;HDR、软阴影、全局光照等光影特效无处不在。

第八章/第二节 GTX480主打Demo:Supersonic Sled

  伴随着GF100核心的发布,NVIDIA又精心设计了几个演示Demo,其中包括一个主打Demo和三个小Demo。首先我们来看看最重要的Supersonic Sled(超音速滑撬车)。

  此次NVIDIA的Demo不同于以往任何一个,首先它是有真实历史作为背景的,而不是架空虚构;其次它既是个Demo又是个小游戏,而且还很耐玩,在展示技术实力的同时寓教于乐,非常高明!最后它还直接支持简体中文界面,方便中国玩家体验:

  在启动Demo之后,首先我们可以看到一段60年代非常古老的黑白电视新闻,讲的是美国科学家在测试人类所能承受极限速度/加速度的实验:

  历史背景:1947年约翰·保罗·斯塔普博士,开始以自己为对象,做各种人体过载和冲击承受力试验,1954年斯塔普博士在美国新墨西哥州创下人类有史以来最快的加速和停止纪录:46.2G。为了研究高速飞行中风挡破损,飞行员对强大气流的承受力,斯塔普博士坐在无风挡的火箭式滑撬车上进行试验,结果表明917公里/小时的近地飞行,高速气流对飞行员没有伤害。为了试验斯塔普多次遭到各种伤害,其中包括肋骨和肢体多处骨折,视网膜脱离,多处血管爆裂和复杂的多器官损伤。新闻界称其为“地球上速度最快的人”和“空军最勇敢的人”。

  研究结果表明只要有适合的姿态和防护装备,人体至少可以承受45g的过载而不会死亡。斯塔普的试验对后来飞行员的飞行座椅和抗荷服、安全带产生了重要影响,同时受惠有伞兵安全带的改进、汽车防撞安全带和所有新车强制使用安全带的法律诞生。

  然后正式进入Demo界面,NVIDIA的Supersonic Sled(超音速滑撬车)就是以当年的火箭车作为蓝本,设有一个液体燃料的主推进器,搭配四个固体燃料助推器,还有一个减速用的固体反推器。

  玩家的任务就是以最快的速度到达终点,而且在轨道尽头紧急刹车停下来不至于坠落山谷,这样才能获得有效成绩。整个过程需要玩家灵活运用火箭助推器和反推器,和朋友一起竞速会很有意思。

  在轨道车运行过程中,两边景物的动态模糊效果非常不错,营造出了一种超高速的感觉,运行速度不同动态模糊的程度也有所差别。此时如果暂停的话,四周又会变得无比清晰。

  虽然这个小人的模型比较简单,但在在轨道车高速运行中,人物面部表情和肢体动作都会产生一些有意思的变化,比如他会双手合一祈祷不要被撞死、因为加速度太高而临时性失重、脸部惊恐的表情还有皮肤被气浪吹变形等等。

  以往的游戏或者Demo,都片面注重对人物主体的刻画,而忽视整个场景的大背景。而此次Demo的环境,比如山脉和峡谷都是由Tessellation技术生成的,可以根据玩家视野的远近动态调整细节,大幅提升了画面表现力又不至于造成性能下降。

第八章/第三节 Supersonic Sled惊艳的物理效果

  Supersonic Sled是一个很好玩的小游戏,但它的主要任务还是为了展示GTX480/470的技术和性能实力。从画面风格来看该Demo偏重于卡通化,因此画质不如Crysis这类追求真实世界的游戏好,它主要向大家展示了两种技术:DX11中的Tessellation和PhysX。

  这款Demo同时支持DX11和PhysX,因此只有GT480/470可以运行,其它N卡和A卡都不行。

  在运行过程中有很多随机因素,比如当固体火箭推进器用完后抛弃时,就有可能砸坏液体发动机喷管,造成推力失衡车毁人亡;如果一次性启动多个推进器,发动机可能会直接爆炸或者甩出滑轨,总之这些都是由PhysX实时产生,操作与玩法不同会有不同的效果。

  当滑撬车以高速接近拱门时,产生的震动和气浪会将其摧毁,玩家用自动视角模式将完整的观察到这一壮观的场面,如果滑撬车速度较慢的话拱门将不受影响,如果滑撬车在逼近拱门时一次开启多个助推器,那么拱门将提前被毁,最终有可能砸坏滑撬车。所以玩家想要在该Demo中取得好成绩的话,必须考虑到这些“意外”情况的发生。

  滑撬车通过小木屋时,超声波气浪将会掀翻屋顶,整个屋子完全散架,有些木料会被带跑很远的距离,速度越快摧毁的越彻底。

  PhysX物理效果在通过峡谷上的大桥时效果最为震撼,即便是钢筋铁骨的轨道也承受不了超音速火车通过时所产生的剧烈震动,滑撬车以高速按照惯性顺利通过大桥后,整座桥将会完全散架,产生的碎片有成千上万个,毁坏程度取决与滑撬车的速度,当然也可以在Demo中手动设定,来仔细观察震撼的物理效果。

  除了线框模式,该Demo还提供了物理模式,可以清楚的看到模型零部件受力的大小,PhysX引擎根据当前的速度和加速度判定各零部件的运动轨迹,如果超出所能承受的范围,则会自动分解或者毁坏。

  总的来说,Supersonic Sled中的PhysX效果是最大的亮点,Demo可玩性也很高,人物的AI和环境的Tessellation效果都不错,但整体画面风格并不惊艳,这与以前Demo作品的风格截然不同。

第八章/第四节  GTX480 Demo:RagingRapidsRide

  本想通过视频的形式向大家演示这款Demo,但因为特殊原因而放弃了,静态的照片很难展现出该Demo的设计初衷与亮点。RagingRapidsRide主要展示了PhysX惊人的交互式动态物理效果。

  这也是一款小游戏,要大家控制小船在崎岖不平的峡谷中穿梭,看谁在最少的时间内超越最多的旗帜。如果您不想玩的话,Demo会自动循环跑,整个过程展示水流与峡谷、船的交互效果,船撞到墙上产生的力反馈,还有撞破旗帜后的物理效果。

  操作起来非常简单,但路线完全是随机生成的,PhysX的效果在流体运动中展现的淋漓尽致。原来PhysX不仅仅局限于爆炸、布料这些方面,处理流体计算已经互动效果才是最有趣的应用。

  GTX480运行该Demo非常流畅,GTX285也不差,N卡用户一定要亲身体验一下才能感受到PhysX的真正魅力,这是以往PhysX游戏中都不具备的。

第八章/第五节  GTX480 Demo:Island11震撼的水面效果

  除了主打的Supersonic Sled Demo外,GTX480还有两个专门用作技术展示的小Demo,相当于DX11 SDK,主要演示了Tessellation技术的两种另类应用。

  首先来看看Island11这款小Demo,NVIDIA使用Tessellation技术构建了不可思议的水面效果:

   如果您还认为水面渲染效果最好的引擎是Crysis,那就OUT了,看看Island11中的截图吧,足以秒杀以往任何一款游戏中的水特效。如此惊艳的画面正是拜Tessellation技术所赐,只要细分出足够多的曲面,水面的动态效果就更逼真。如果不使用Tessellation的话,复杂的模型足以让任何一款显卡渲染到崩溃。

  Tessellation的目的就是让硬件根据软件的要求自动拆分出顶点和曲面,从而以较少的模型实现非常丰富的细节,直接建立复杂的模型当然可以,但代价非常恐怖。

    Tessellation当然也会消耗资源,主要取决于GPU当中Tessellator模块的处理能力,如果能力有限则性能下降很大,如果处理能力特别强那么性能损失就会很少。因此新一代DX11 GPU的设计重点就在于平衡Tessellator和Shader部分的负载。

  Island11这个Demo只使用了DX11技术,而没有加入PhysX,因此HD5000显卡也能运行,在后面的评测章节我们会进行详细的性能对比,来检验N卡和A卡到底谁的Tessellation性能更强?

第八章/第六节  GTX480 Demo:Hair飘逸的长发

  还记得6800Ultra美人鱼Nalu那一头飘逸的长发吗?那可纯粹是用暴力模型堆积出来的效果,由于要求太高,时至今日都没有什么游戏使用这种方法来刻画毛发效果。直到DX10时代,有了几何着色之后,可以通过简单的复制粘贴方式来营造一些比较短的毛发效果,但对于长发依然无能为力,因为一根根头发之间相互干涉的交互效果并不容易实现。

    DX11时代,NVIDIA使用Tessellation技术攻克了这一难题,启动Hair Demo之后的动画马上给人耳目一新的感觉:

  同样是基于Tessellation技术的演示Demo,上一页Island11中细分水面的效果大家很容易理解,而在这款Hair中大家很难想像到被称为“细分曲面”的这项技术居然可以被用来“细分头发丝”!?

   关闭阴影之后,FPS大幅提升,看来造成性能下降的主要原因并非是Tessellation的效率关系,而是由于模型太过丰富,光线经过如此众多头发之后的计算量非常大。看来如果要将头发Tessellation技术应用在实际游戏中的话,由头发所产生的光影应该适当的缩水,不然就会消耗太多的GPU资源。

  如果把Tessellation关闭的话,就看到了这样一副惨不忍睹的画面,这实际上就是这个女孩“真实”的头发数,前面大家看到的稠密的秀发都是用Tessellation技术虚构出来的。

  一般来说,在视角拉远时,为了降低GPU负载,Tessellation技术会自动减少“复制”出来的头发数量,此时人物的头发太少影响视觉效果,为了弥补这个不足,特意设计了加宽头发的功能,从而保证远距离观察时头发的稠密程度,此时由于距离较远,玩家很难注意到这些细节的变化。

  通过这幅截图,大家就可以非常清楚的看到,原来密密麻麻的头发都是一组一组的,每一组头发其实都只有一根是真实的,其它的几十跟都是由Tessellation自动生成。在受到空气流动或者摇头动作时,头发是以真实的头发丝为核心、以Tessellation生成的组为单位运动,当然这些细节如果不刻意指出的话很难察觉。

  在DiRT2这款游戏中,Tessellation技术被用来渲染布料、水洼、人物和地形,但都是轻量级的。此次NVIDIA的两款Demo用Tessellation生成水面和头发不但很有创意,而且极具视觉冲击力,但对GPU的Tessellator运算能力提出了更高的要求,那么HD5000在运行这两款Demo时的性能如何呢?后文中见分晓。

第八章/第七节  GTX480 Demo:Design Garage——第一个民用级光线追踪演示程序

  相信很多人都是第一次看到真正的光线追踪效果是什么样的,感谢NVIDIA在GTX480发布时为我们提供了这样一款震撼的演示Demo。

  该Demo内置了一些名车的模型,还有相关的场景,我们可以自由的将其组合以获得很好的显示效果。这个光线追踪程序结合了传统的光栅化渲染,在普通模式下的速度很快,切换视角之后几乎实时就能渲染出来,但如果开启HQ模式的话,就开始了真正的光线追踪渲染,我可以非常直观的看到屏幕上一个个像素点在改变颜色和反光。

  在2560x1600的顶级分辨率下,渲染一帧画面大概需要等待几分钟到十几分钟,虽然时间较长但却非常值得,最终获得的画面跟照片几乎没有差别!

  光线追踪Demo内置了一个超音速火箭车的模型,通过开关HQ模式可以清楚的看到反光效果的差距。

  事实上普通模式下的画质已经要强过当前所有游戏了,但与真正的光线追踪模式下还是有不小的差距,大家可以点击放大仔细对比。其中HQ模式还有一些像素没有渲染完毕,就被笔者截取下来了。应该适当降低分辨率这样渲染速度会快很多。

  该Demo操作非常简单,主要用来展示光线追踪的效果与新显卡的性能,手头有高端N卡的朋友不妨试试看,绝对让您大开眼界!

第九章 显卡性能测试

  30亿晶体管、1.5GB显存、革命性的架构、完美的DX11几何着色设计,GTX480击败HD5870是毫无疑问的,问题是领先多少,能否挑战HD5970呢?下面就进入测试阶段。

第九章/第一节 测试平台配置 

硬件系统配置

处理器

Intel Core i7 975

3.33GHz L3=8MB 四核八线程)

 

MSI X58 Eclipse

   

GTX480 1536MB (700/1401/3696MHz)

GTX470 1280MB (607/1215/3348MHz)

GTX285 1024MB (648/1476/2484MHz)

HD5970 2048MB (725/4000MHz)

HD5870 1024MB (850/4800MHz)

HD5850 1024MB (725/4000MHz)

 

CORSAIR Dominator TWIN2X2048-10000C5DF

DDR3-1600(9-9-9-24-1T)

   

日立1TB

  

安耐美金魔族87+

软件系统配置

  操作系统

Windows 7 RTM 7600.16385 64Bit

  DirectX

11

  显示驱动

NVIDIA Forceware 197.17 Beta

ATI Catalyst 10.3 Beta

● 顶级平台——Core i7 975

  i7 975是目前Intel最强的CPU,主频比965更高,达到了3.33GHz,45nm High-K工艺制造,拥有8MB三级缓存,还支持超线程技术(四核八线程),这样即便是双高端显卡系统也不会受制于处理器瓶颈。

● 顶级平台——DELL3007 显示器

  既然是顶级卡,我们就要用最顶级玩家的使用环境来测试,我们选定分辨率为1920×1200(24寸宽)和2560×1600(30寸宽)两种高端玩家最常用的分辨率做测试。

  所有的游戏默认都开启最高特效,其中包括至少4xAA,如果支持8xAA的话也将进行测试,如果游戏内置AF支持的话,就直接调至最高的16AF。

第九章/第二节 DX10理论性能测试:3DMark Vantage

    3DMark Vantage所使用的全新引擎在DX10特效方面和《孤岛危机》不相上下,但3DMark不是游戏,它不用考虑场景运行流畅度的问题,因此Vantage在特效的使用方面比Crysis更加大胆,“滥用”各种消耗资源的特效导致Vantage对显卡的要求空前高涨,号称“显卡危机”的Crysis也不得不甘拜下风。

  画面设置:3DMark Vantage中直接内置了四种模式,分别为Extreme(旗舰级)、High(高端级)、Performance(性能级)和Entry(入门级),只有在这四种模式下才能跑出总分,如果自定义模式就只能得到子项目分数了。我们为这次的顶级卡对决选择了最高的Extreme模式,它其实就是最高画质1920x1200分辨率再加上4AA16AF模式。

  测试方法:N卡支持PhysX,在CPU测试子项中成绩会翻几倍,最终总成绩会提高不少,如果网友觉得总分对比有失公允的话,可以直接查看GPU得分。

  GTX480/470的表现让人有些失望,只以几乎可以忽略的优势领先于HD5870/5850,与对手旗舰级双核心的HD5970差距非常大。

  根据此前架构部分的解析来看,GF100专门针对DX11的技术和指令进行了优化,而DX10部分则全靠流处理器规模支撑。那么GTX480/470在DX11游戏中能否带来惊喜呢?

第九章/第三节 DX11理论性能测试:《Unigine Heaven Benchmark》

  3D图形测试软件当然不止3DMark这一款,也许很多人都没听说过Unigine Engine(虚拟现实引擎),但这家小公司一直在不断的努力并进步着,此前已经发布了诸多版本的Demo或者测试程序,第一时间对DX10、DX10.1提供支持并支持Benchmark模式,而且能够向下兼容DX9及OpenGL,为测试者提供多种画面对比和性能对比模式。

  Unigine Engine率先发布了首款DX11测试/演示程序——Heaven Benchmark,其中大量运用了DX11新增的技术和指令,看来在新版3DMark面世之前,Heaven将会是DX11性能测试的唯一选择。就在前几天,Unigine Engine发布了Heaven Benchmark 2.0版,对场景做了一些优化,并加入了细分级别更高的Tessellation模式。笔者对两个版本都进行了测试,用以对比不同Tessellation级别模式下各款显卡的性能表现。

  画面设置:1.0和2.0版特效都开DX11最高模式,其中1.0的Tessellation只有Normal级别,2.0加入了Extreme级别。Heaven Benchmark的测试画面比较苛刻,最高的2560 8AA模式下所有显卡都卡得跑不动,个位数的成绩没有意义,故放弃该模式下的测试。

  测试方法:自带Benchmark,最终或得出稳定的平均FPS值。

  请大家看仔细了,红色代表1.0版本Tessellation负载较轻,绿色代表2.0版本Tessellation负载较重。很明显2.0版本A卡的性能下降幅度非常大,而N卡则没有本质影响。

  1.0版本中,GTX470都足以挑战HD5870,GTX480则拥有较大优势但还是不如双核心的HD5970。

  在2.0版本中,GTX470完胜HD5870,GTX480反败完胜超越了对手最强的HD5970,终于扬眉吐气证明了自己的价值。

  前面讲过,RV870硕大一颗核心只有一个Tessellator模块,而GF100核心则拥有16个之多。显然在重负载的DX11 Tessellation应用中,N卡将会如鱼得水,而A卡则黔驴技穷,软肋暴露无遗。

第九章/第四节 DX11游戏:《BattleForge》

  《BattleForge》是EA旗下德国Phenomic游戏制作室研发的全新即时战略网络游戏。在《BattleForge》中,玩家依靠收集、交易卡牌来建立庞大的军队。通过在线赢取、交易和购买卡牌来组成你强大的阵容,混合搭配不同属性的卡牌来和朋友进行在线战斗,或是在大规模的在线战役中取得胜利。

  《BattleForge》本身是一款DX10.1游戏,在HD5870发布当天停机维护一小时后正式加入了DX11模式。虽然这款RTS网游并没有在国内开服运营,中国玩家对其知之甚少,但能够如此神速的对DX11提供支持,而且新增的DX11模式对游戏性能影响非常显著,可以说是检验DX11显卡实力的必测游戏。

  画面设置:从技术角度来讲,这款游戏也非常值得关注,其画面堪称网游顶尖之作,率先提供了对DX10.1技术和屏幕空间环境光遮蔽(SSAO)特效的支持,还针对多核心处理器进行了优化。现在又第一时间对DX11加入了支持,加入了HDAO和DirectCompute,测试时自然所有特效全开最高。

    测试方法:《BattleForge》虽然是款网游,但游戏自带了Benchmark,这给评测带来了很多便利。Benchmark可以测出最大/最小/平均FPS三个数值,笔者连跑三遍Benchmark得到最稳定的成绩,保留了最有参考价值和的平均FPS和最小FPS供大家参考。

  这款带有AMD Logo的游戏对A卡优化支持非常好,此前都是大幅领先于N卡。但GTX480/470发布之后情况立刻发生了逆转:GTX470小胜HD5870,GTX480直逼HD5970。

  如果大家仔细观察绿色成绩的话,就会发现A卡虽然拥有较高的平均FPS,但最小FPS惨不忍睹,在Benchmark激烈的战斗场面中时不时会有卡壳的现象出现,而N卡的发挥则非常稳定,整个测试过程无比流畅。

第九章/第五节 DX11游戏:《潜行者:普里皮亚季的呼唤》

  《潜行者》系列游戏现在已经出到第三部了,其中第二部《晴空》是原作《阴影》的前传,而第三部《普里皮亚季的呼唤》则是原作《阴影》的后传,讲述了在变异区中心被发现后,乌克兰政府决定举行代号“航道”的大规模军事行动,目的则是控制变异区的科技,玩家的冒险也就此展开。

  此前《潜行者:晴空》已经率先支持DX10.1,主要优化了抗锯齿算法、阴影渲染和效率,新版的资料片则首次加入支持DX11,通过Tessellation技术大幅加强了模型细节、纹理和光影,而且通过DirectCompute 11技术改进了算法,提升游戏性能。

   画面设置:游戏提供了DX11、DX10.1、DX10、DX9等多种模式,我们将包括透明抗锯齿在内的所有特效全开最高,考验高端显卡在最高画质下的性能表现。

  测试方法:使用官方Benchmark包进行测试。

   在1920分辨率下,测试成绩非常和谐,GTX480与HD5870不相上下,GTX470的表现与HD5850如出一辙,测试结果基本与3DMark Vantage的表现一致。

  但在2560分辨率下,A卡性能下降幅度比较大,尤其是双核心HD5970交火效能不佳被GTX480反超。

第九章/第六节 DX11游戏:《科林麦克雷:尘埃2》

  《科林麦克雷》系列游戏是为纪念去世的英国拉力赛车手科林·麦克雷(Colin McRae)而制作的,因此在游戏过程中不难见到许多麦克雷过往的身影。与一年一款的极品系列赛车游戏不同,DiRT2距离前作已经两年之久,目前《科林麦克雷:尘埃2》主机版已经上市,几乎登陆所有的主机和掌机平台、好评如潮,而PC版由于支持DX11的缘故,所以被延期至今年12月上市。

  画面设置:DIRT2堪称DX11游戏代表作,DX11的五大关键特性在这款游戏中都有体现,但却没有得到大范围的应用,都是点到为止。比如Tessellation主要体现在水洼和旗帜上,而赛车过程中也就那么几处采用了该技术,因此这款DX11的要求并不高,特效全开的话中端显卡都能跑动。

    测试方法:试玩版Demo自带Benchmark程序,会自动跑完一个固定的赛道,非常接近于真正玩游戏的模式,最后得出平均FPS和最小FPS。

  测试结果与《STALKER:COP》比较类似,GTX480/470并没有像《Heaven》和《BattleForge》中那样神勇的表现,性能只与对手HD5870/5850相近。

  只有在2560 8AA这种极限模式下,A卡可能因为显存管理的问题会出现卡壳的情况,使得最小FPS暴降。

  为什么同样是DX11游戏,GTX480/470的表现会判若两人呢?这主要是因为《STALKER》和《DIRT2》这两款游戏对DX11特效的应用比较少,Tessellation主要体现在人物细节和水面旗帜这种Benchmark场景较少出现的物体上,而HDAO并没有得到全局应用,因此最终性能表现与3DMark Vantage类似。

第九章/第七节 DX11游戏:《异形大战铁血战士》

    《Aliens vs. Predator》同时登陆PC、X360和PS3,其中PC版因为支持DX11里的细分曲面(Tessellation)、高清环境光遮蔽(HDAO)、计算着色器后期处理、真实阴影等技术而备受关注,是AMD大力推行的游戏之一,但是这样的主题难免让本作有很多不和谐的地方,暴力血腥场面必然不会少!发行商世嘉在2009年11月就曾明志,表示不会为了通过审查而放弃电子娱乐产品发行商的责任,因为游戏要维持“异形大战铁血战士”这一中心主题,无论画面、玩法还是故事线都不能偏离。

  画面设置:AVP原始版本并不支持AA,但升级至1.1版本之后,MSAA选项出现在了DX11增强特效当中,当然还支持Tessellation、HDAO、DirectCompute等招牌。该游戏要求不算太高,所以笔者直接将特效调至最高进行测试。

  测试方法:游戏不带Benchmark,笔者选取了单人任务模式下的一段片头动画进行测试,该画面具有一定的代表意义,很好的体现了Tessellation异形身体以及HDAO等高级特效。

  GTX470与HD5870不相上下,GTX480直逼HD5970,性能表现与《Heaven》、《BattleForge》比较类似。

  《异形大战铁血战士》作为AMD力挺的DX11游戏,没想到N卡的表现也如此出色,看来只要游戏使用足够多的DX11或Tessellation特效,那么N卡的效率就会很高,而A卡则会力不存心。

第九章/第八节 DX11游戏:《战地:叛逆联队2》

  《战地:叛逆连队2》(Battlefield: Bad Company 2),是EA DICE开发的一款第一人称射击游戏。开发商EA已经于本月2日正式同步发售了Xbox 360、PS3、PC版。该游戏是EA DICE开发的第9款“战地”系列作品,也是《战地:叛逆连队》的直接续作,在继承前作特性的基础上,强化了多人联机载具对战和团队合作元素的设定。游戏使用加强版的寒霜引擎,加入了建筑物框架破坏和物体分块破坏的支持。

  画面设置:《叛逆联队2》虽然是款DX11游戏,霜寒引擎也是备受期待的DX11引擎,曾被ATI用来做Tessellation的技术展示。不过最新版本的对DX11的支持非常有限,仅仅是采用新指令集渲染HBAO特效而已,游戏会自动侦测显卡的DX级别来选择渲染模式。由于该游戏对显卡要求并不高,因此直接开启8AA模式进行测试。

  测试方法:游戏不带Benchmark,笔者选取了单人任务模式下的一段无需手动干涉的过场动画进行测试,其中包括大量激烈的轰炸爆破激战场面,完全可以反映真实的游戏性能。

  由于DX11特效使用并不多,因此GTX285的表现也不错,足以挑战HD5850了。另外值得一提的是,N卡的平均FPS虽然优势并不算明显,但最小FPS却远高于A卡,这与前面几款游戏中的表现类似,看来还是N卡的发挥更稳定一些,能够为玩家带来更流畅的游戏感受,而不仅仅是跑出来的成绩好看。

第九章/第九节 DX11游戏:《地铁2033》

  《地铁2033》(Metro 2033)是俄罗斯工作室4A Games开发的一款新作,也是DX11游戏的新成员。该游戏的核心引擎是号称自主全新研发的4A Engine,支持当今几乎所有画质技术,比如高分辨率纹理、GPU PhysX物理加速、硬件曲面细分、形态学抗锯齿(MLAA)、并行计算景深、屏幕环境光遮蔽(SSAO)、次表面散射、视差贴图、物体动态模糊等等。

  画面设置:《地铁2033》虽然支持PhysX,但对CPU软件加速支持的也很好,因此使用A卡玩游戏时并不会因PhysX效果而拖累性能。该游戏由于加入了太多的尖端技术导致要求非常BT,以至于我们都不敢开启抗锯齿进行测试,只是将游戏内置的效果调至最高。

    测试方法:游戏不带Benchmark,笔者选取了单人任务模式下的一段片头动画进行测试,这段画面虽然不是战斗场景并不激烈,但已经让高端显卡不堪重负了。

  终于有一款BT程度完全超越Crysis的游戏了,2560分辨率不开AA的话,所有显卡全部阵亡,此时虽然GTX480/470的表现更出色一点,但也没有什么意义了。

  这是一款才发布没多久的游戏,相信NVIDIA和ATI双方都没有对该游戏做很好的优化,相信新驱动发布后会有所改观。

第九章/第十节 DX10.1游戏:《孤岛惊魂2》

  自《孤岛惊魂》系列的版权被UBI购买之后,该公司蒙特利尔分部就已经开始着手开发新作,本作不但开发工作从Crytek转交给UBI,而且游戏的故事背景也与前作毫无关系,游戏的图形和物理引擎由UBI方面完全重新制作。

  画面设置:FarCry2对于DX10.1的支持度有限,主要是通过读取Z缓冲中的多重采样深度数据来达到更好的抗锯齿性能,这个功能既可以通过DX10.1显卡来实现,也可以使用X10显卡所支持的扩展指令集来实现,都能达到最好的效能。

  测试方法:游戏自带Benchmark工具,连跑三次取最稳定的平均值和最小值。

  FarCry2中,HD5970的霸主地位发生了动摇,在4xAA模式下还能力压GTX480,但8xAA模式下被反超。GTX470也完全击败了HD5870,表现惊人。

  绿色的成绩也值得注意,最低FPS事关游戏运行流畅度的问题,N卡的最低FPS始终高于A卡,再次证明了N卡在各种游戏中的发挥都更加稳定一些。

第九章/第十一节 DX10.1游戏:《汤姆克兰西之鹰击长空》

  《鹰击长空》由Ubisoft旗下的Bucharest Studio工作室所研发制作而成,以汤姆克兰西最擅长的近现代国际冲突为背景,加上现代化的军事武器,和五角大厦不愿证实的开发中的先进武器,交织出最激烈的高科技攻防战。而《鹰击长空》也脱离前面几项作品的框架,将战争从地面拉拔到空中,享受广大无界限的战斗空间。

  画面设置:《鹰击长空》直接内置了对DX10和DX10.1的支持,它会自动检测显卡最高能支持的级别。通过此前的测试来看DX10.1并不会让画质变得更高,但的确能够让游戏跑得更快一些。

    测试方法:游戏自带Benchmark,所有A卡开启DX10.1模式,GTX480/470当然可以开启,但GTX285仅支持DX10无法开启。游戏内置的Benchmark跑完之后会得出平均FPS和最大FPS,由于最大FPS没有意义故舍去。

  显然,不支持DX10.1的GTX285在这款游戏中吃了大亏,不但性能很低,而且开启8xAA的性能损失非常大。而GTX480/470的性能损失幅度和HD5870/5850差不多,看来新一代N卡的高倍AA效能的确大有改观。

  性能方面,1920分辨率下N卡优势较大,2560分辨率下被A卡追回不少失分,双核心HD5970优势明显很难被超越。

第九章/第十二节 DX10游戏:《孤岛危机:弹头》


  Crysis(孤岛危机)无疑是现阶段对电脑配置要求最高的PC游戏大作。Crysis的游戏画面达到了当前PC系统所能承受的极限,超越了次世代平台和之前所有的PC游戏。Crysis还有个资料片Warhead,使用了相同的引擎,只是多了一个关卡,因此我们还是使用原版做测试。

  画面设置:Crysis是当今画面最好的游戏,要求也非常高,但也难不倒新一代高端显卡了。不过当特效开至VeryHigh加上顶级分辨率2560和顶级抗锯齿8xAA时,由于显存管理问题所有高端卡都卡得没法动,故放弃该模式下的测试成绩,保留另外三种模式。

  测试方法:Crysis内置了CPU和GPU两个测试程序,我们使用GPU测试程序,这个程序会自动切换地图内的全岛风景,得到稳定的平均FPS值。

  Crysis中的性能表现与3DMark Vantage比较类似,GTX480/470在兄弟俩面对HD5870/5850姐妹俩时,没能占得多少便宜。

  2560分辨率下开AA要求非常苛刻,N卡虽然正常发挥但成绩并不能让人满意,A卡集体发挥失常。至于2560 8AA模式,所有显卡全部阵亡。
第九章/第十三节 DX9C游戏:《使命召唤:现代战争2》

  作为《使命召唤》系列的第六部作品,在《使命召唤:现代战争2(Call of Duty: Modern Warfare 2)》中,将《使命召唤4:现代战争》剧情延续,俄罗斯又再次陷入政治上的纷扰不安。伏拉米尔.马卡洛夫(Vladimir Makarov)这位和伊姆兰.扎哈夫(ImranZakhaev)恐怖组织有关连的粗暴领袖,策划了一连串即将危及世界安全的阴谋。

  画面设置:《现代战争2》游戏中的画质进阶设定显得比较简单,在这里我们能看到常见的阴影开关、各种画面细节、材质填充模式等。COD6虽然引擎比较老,但经过常年累月的优化,爆炸、烟雾、火焰效果都不输给DX10游戏,要求也并不低。游戏内置AA最高4x,所以并没有测试8xAA时的性能。

    测试方法:游戏没有提供Benchmark,测试时笔者选用了一段固定的场景,期间会有爆炸、大楼倒塌、灰尘弥漫等复杂的场景,通过Fraps记录整个过程的平均FPS和最低FPS。

  虽然GTX480/470领先HD5870/5850的幅度并不算高,但通过绿色柱状图我们可以看到,N卡一如既往的在最小FPS中占据优势,这就意味着在平均FPS相差并不多的情况下,N卡显然在实际玩游戏过程中更加流畅一些。

第九章/第十四节 物理游戏:《蝙蝠侠:阿卡姆疯人院》

  《蝙蝠侠:阿卡姆疯人院》是根据Grant Morrison同名漫画改编,堪称蝙蝠侠历代最黑暗的一作。疯人院里关的都是蝙蝠侠亲手逮捕的罪犯。某天,以小丑为首的病人们声称觉得“无聊”,所以劫持了医护人员,要求蝙蝠侠前去陪他们“游戏”。这场疯狂的迷藏中,占尽优势的是反派们,蝙蝠侠不仅要提防杀气腾腾的各个患者,同时他自己的精神状态也处于失常的边缘。

  与此同时,疯人院的一段历史被揭开:原来其创办者阿卡姆最后也沦为自己医院里的精神病。这座哥特式的阴森建筑仿佛带着数代的诅咒,成为蝙蝠侠和病人们无法摆脱的宿命。病人们满足于自己的疯狂,并不想逃离疯人院;蝙蝠侠承认自己厌恶那里是因为去那里“就像回家一样”。

  画面设置:《蝙蝠侠:阿卡姆疯人院》使用的是大名鼎鼎的虚幻3引擎,PC版在画面方面进一步提升,不仅解决了HDR+AA问题,还加了DX10中新的光影特效,而且还完美支持NVIDIA的PhysX引擎及3D幻镜技术。以高效率著称的虚幻3引擎本身对显卡要求不高,但大量PhysX效果的引入使得只有高端N卡才能跑动。

  测试方法:游戏自带Benchmark,抛开PhysX不谈的话游戏的要求并不高,因此笔者直接开启最高的8xMSAA进行测试。

  蝙蝠侠并没有为A卡提供游戏内置的抗锯齿模式,A卡用户必须进入催化剂控制面板才能打开AA,此时游戏强制对所有场景进行抗锯齿处理,并不如游戏内置的AA模式智能,因此A卡即便在关闭PhysX的模式下也不占优势。

  当开启PhysX之后,A卡必须借助CPU来软加速,瓶颈效应非常严重,三款A卡的FPS完全相同,与N卡完全没有可比性。

  结果当然是以N卡全胜而告终,事实上在所有PhysX游戏中都是同样的结果,96GT级别的中端显卡都足以挑战高端A卡。因此这里笔者只选用了《蝙蝠侠》这一款比较经典的游戏作为PhysX性能测试,而没有加入更多的PhysX游戏,因为这些游戏都不能反应出两家顶级产品的真实实力。

第九章/第十五节 微软DX11 SDK:SUBD11

  通过之前大量的游戏测试来看,GTX480/470最大的优势体现在DX11游戏当中,DX11特效应用的越多则性能越强,尤其开启Tessellation技术并且细分级别较高时。现在我们就做一些特殊的极端测试项目,通过微软DX11 SDK中的一些Tessellation程序,来考验N/A双方顶级DX11显卡的理论效能。

   微软2010最新DX11 SDK中有很多Demo可供参考

  这个小Demo展示了将一个人物细分之后的效果,通过开启或关闭线框模式可以观察Tessellation级别不同时任务模型的变化。除了画质的改变外,FPS的变化也很直观,来看看双方DX11显卡的效能如何:

  SDK默认模式下,也就是Tessellation细分级别为2,GTX480/470领先HD5870/5850的幅度并不大,大幅落后与HD5970。当把级别开至最高的31级时,三款A卡立刻变成了幻灯片,而N卡依然流畅自如。加重Tessellation之后的性能损失幅度简直是天壤之别。

  开启线框模式之后可以直观的看到Tessellation的细分精度,此时进一步加重了显卡的负载,A卡已经完全跑不动了,N卡依然能保证流畅的速度,可供开发人员反复调试。

  第九章/第十六节 微软DX11 SDK:PN

  前一个SDK是动态的,这一个是静态的因此要求较低,仅供程序员参考,测试方法与前一个类似,通过调整Tessellation级别和是否开启线框模式来对比FPS。

  在这个Demo中,HD5970的交火无效因此性能还不如HD5870。从成绩来看在轻度Tessellation负载下GTX480/470的优势并不明显,可一旦加重Tessellation负载之后,A卡原形毕露,性能损失惨重。

  开启线框模式之后,即便在较低的Tessellation负载下,A卡已经大幅落后于N卡了,看来HD5000系列不仅Tessellation性能弱于GF100,而且几何性能的差距也非常大。

第九章/第十七节 NVIDIA Demo测试:Island11

  前面几个微软官方的SDK都是基于HD5000显卡而开发的,主要展示了Tessellation技术最基本的应用,通过截图大家可以看到画面比较简单,即便如此GTX480/470已经展现出了过人的实力。

  下面针对NVIDIA官方发布的Demo进行测试,它其实也属于技术型SDK,只不过画面更精彩一些,而且技术应用更高级。

  这就是前文中介绍过的Island11 Demo,水面经过Tessellation细分之后效果非常棒,当然资源开销也比较大。

  HD5000系列Tessellation性能不足的软肋再次展现,完全无法胜任高等级细分级别的需要,以后游戏中要是大量使用Tessellation技术的话,HD5000将会让ATI输的很惨。

  在这款Demo中,N卡的领先优势还没有微软SDK那么大,看来该Demo的确完全按照DX11标准设计,并不存在专门优化N卡劣化A卡之举。

第九章/第十八节 NVIDIA Demo测试:Hair

  这个Hair Demo堪称最有创意的Tessellation应用,并没有加入PhysX效果,因此A卡也能运行。

  Hair Demo非常有意思,简单的说就是使用Tessellation技术将头发数量复制了几十倍,在未来游戏中应该会得到广泛的应用。HD5000的软肋将导致它的DX11效能十分低下,满足不了新一代游戏的需要。

第九章/第十九节 通用计算测试:Badaboom视频转码

  N卡和A卡在游戏性能和相关功能方面可能是各有所长、互有胜负,谁都没有绝对的领先优势。但在GPU通用计算方面,差距可就不是一点半点了,CUDA应用软件不但在数量上占据压倒性优势,而在质量与性能方面也比Stream强大许多。

  所以,在进行了大量的游戏性能测试之后,笔者开始针对CUDA通用计算进行专项测试。这里选用了CUDA的成名代表作——Badaboom视频转码软件。

   测试方法:使用Badaboom将一段1080p TS格式预告片转成720p MP4格式的文件,码率及相关设置采用了Badaboom内置的方案不做更改。更换不同显卡检验性能差距。

GTX480:3分53秒完成

GTX470:4分20秒完成

GTX285:6分56秒完成

  该软件会自动算出整个转码过程中的平均转换速度,也就是帧每秒(FPS),绘制成下图更直观一些:

  Badaboom软件果然名不虚传,对于GPU资源的利用率几乎达到了100%,GTX480的480个流处理器资源都能完全被耗尽。最终结果令人欣喜,GTX480的性能达到了GTX285的1.8倍!

  Badaboom只支持N卡,所以在转码性能方面没法与A卡进行对比。A卡自家的AVIVO功能太简单、画质太低没有实用性,第三方的MediaShow软件全靠CPU转码,GPU只起辅助作用,根据此前的测试来看HD4770以上级别显卡的性能都完全相同,目前基于Stream方案的转码软件还不能充分发挥高端显卡的性能。

  第九章/第二十节 科学计算测试:Folding Home

  Folding@home是一个由斯坦福大学主持,全球主要硬件厂商共同参与的大规模公益性分布式运算项目。其主要是研究了解蛋白质折叠、误折以及相关的疾病,主要研究的疾病包括:癌症、阿兹海默症、亨廷顿病、帕金森氏症等。我想,这是一个比单纯跑各种Benchmark来得更有价值的事情。

  目前斯坦福官网上提供的客户端既不支持GTX400显卡,也不支持HD5000显卡。但NVIDIA提供了一个脱机测试程序,可以针对事先准备好的数据包进行计算,从而得出一个非常准确的性能数据。我们可以用这个测试包来对比GTX480与GTX285的性能差距。

  最终笔者测得的结果是:GTX480性能为GTX285的1.69倍,GTX470的性能为GTX285的1.3倍。

  目前的客户端可以支持GTX285,经过实际测试来看一片公版频率GTX285的PPD大约在9000左右,不同的数据包性能值略有波动,但不会差太多。那么将离线测得的性能数据换算成具体的PPD值的话,就可以估算出GTX480/470的F@H实际效能了:

  GTX480单卡将会突破15000 PPD!据NVIDIA称,斯坦福新版的F@H很快就会开放下载,届时GTX480/470的性能将会得到进一步优化,绝对不会比本次测试中笔者估算的成绩差!

  注:对于Folding@Home运算来说,一个最重要的指标就是PPD(Point Per Day,每日运算量),这个值描述了一天中所有计算过的数据包的总分值。斯坦福大学对每一个折叠片段都定义了一个分值,运算完成并上传到服务器后,这个分值会记录在你的贡献值中。
第十章 测试成绩汇总与总结

  性能测试结束之后再进行一些附加的温度、功耗测试,并将所有的测试成绩汇总,方便读者参考。

第十章/第一节 GTX480/470温度主观测试

  GF100是一颗拥有30亿晶体管的怪兽核心,发热确实比较大,跑完游戏之后想要更换显卡的话,必须得小心奕奕,尤其是对于散热片裸露在外的GTX480来说,看来核心温度并不低。

  待机时GTX480的频率让笔者大吃一惊,核心居然只有50MHz、流处理器101MHz、显存67.5MHz(GDDR5等效频率要X4),2D频率史无前例的低,比HD5000系列157/300MHz低很多……即便如此发热量还是比较大。

  运行3D程序后,频率立刻恢复全速,此时GPU温度飙升,当温度超过90度之后,风扇就会从1600转开始逐渐提速,将温度控制在95度左右,绝对不会超过100度。根据笔者的主观感觉来看,2000转时还是比较安静的,再高就开始吵了。

  GTX470的情况也比较相似,2D频率也是50/101/67.5MHz,虽然GTX470的发热较低,但散热器也比较小,因此温度表现其实差不多,都是90度开始提速,将GPU保持在一个比较恒定的值。

  温度虽高但并不影响使用,测试了这么多游戏也没有出现因为过热而死机的情况,但如果在通风不好的机箱内使用的话,散热效果如何笔者就不敢保证了。

第十章/第二节 功耗测试

  我们的功耗测试方法是直接统计整套平台的总功耗,既简单、又直观。测试仪器为微型电力监测仪,它通过实时监控输入电源的电压和电流计算出当前的功率,这样得到的数值就是包括CPU、主板、内存、硬盘、显卡、电源以及线路损耗在内的主机总功率(不包括显示器)。

   待机为windows7桌面下获得的最小值;满载是以2560 AA模式运行DIRT2这款游戏时的平均值,之所以选这款游戏是因为该游戏场景比较稳定便于统计功耗。

   测试结果让人大吃一惊,单核心的GTX480功耗居然比HD5970还要高,而官方公布的TDP分别是250W和294W,看来双核心HD5970在DIRT2游戏中的负载还没有达到100%,因此功耗并非峰值。

  GTX470的功耗也要高过HD5870。虽然GTX480/470在2D模式下的频率非常低,但待机功耗依然高于HD5000系列,看来大核心以及更多的显存颗粒使得GTX400系列的功耗更难控制。即便如此,NVIDIA已经做得相当不容易了。

第十章/第三节 测试成绩汇总:GTX480比GTX470强多少

  NVIDIA自家的显卡,性能幅度差距自然非常稳定,始终在25%左右,这是流处理器数量、频率和显存带宽共同作用的结果。

第十章/第四节 测试成绩汇总:GTX480比HD5870强多少

  非常凑巧,综合下来GTX480也要比HD5870强25%,也就是说GTX470与HD5870互有胜负、旗鼓相当。

  由于双方架构的不同,GTX480并不是完胜HD5870,有些游戏中GTX480的优势很小甚至不如(比如Crysis),但有些游戏中优势又非常大。

  以上成绩还是在抛开PhysX,还有那些Demo、SDK后的综合成绩,如果将这些因素都考虑进去的话,GTX480显然要比HD5870强更多,那么GTX470也就要比HD5870更强一点了。

第十章/第五节 测试成绩汇总:GTX470 PK HD5850

   GTX480领先HD5870和GTX470的幅度都是25%,也就是说GTX470与HD5870是旗鼓相当的。现在算得GTX470比HD5850强17.5%,笔者刻意拿HD5870与HD5850的成绩来验证一下,结果是HD5870比HD5850强18%,结果虽然有些误差但还是有些参考价值的。

第十章/第六节 GTX480双卡SLI效率测试

    最后,我们还进行了双卡SLI性能测试,由于手头暂无两片GTX470显卡,只能对GTX480 SLI进行测试,以检验效能。

  两片显卡的功耗非常大,原来的700W电源已经不够用了,只好更换一个1100W电源进行测试。

  在目前驱动还不够成熟的情况下,SLI已经发挥出了非常不错的效能,在好几款游戏中的提升幅度都超过了1.9倍,非常适合大分辨率或者需要组三屏的玩家。

第十章/第七节 全文总结:

● 性能测试总结:

  冗长的文章终于到了收尾阶段,通过本文后半部分详细的性能测试来看,前面理论部分的技术与架构果然没有白写,GF100在DX11 Tessellation方面的确拥有压倒性的优势。Tessellation作为ATI的原创技术,居然成为了HD5000系列最大的软肋,谁都没有料到会有这样戏剧性的结果。

  为了抢先发布DX11显卡,ATI几乎没有对上代架构做任何改进,直接添加了DX11指令集就仓促发布HD5000系列,翻倍的流处理器规模让HD5000系列的DX10性能提升不少,在轻负载的DX11游戏中也有出色的表现。但随着游戏加入更多DX11特效之后,HD5000不堪重负了,瓶颈的出现导致性能大幅下降。

  平衡GPU各个模块之间的负载是近年来NVIDIA、ATI和微软共同追逐的目标,统一渲染架构、几何着色、计算着色器的引入无一不是为了最大化GPU资源利用。DX11最大的改进就是加入了Tessellation,可想而知未来Tessellation的应用将会更多、更重,HD5000的瓶颈将导致它不敢开启游戏的全部特效,失去角逐高端显卡的资格。

● 综合评价:

  当然HD5000系列也有自己的优势,虽然在DX11 Tessellation性能方面比较鸡肋,但他们的DX10性能也不错,而且具备三屏输出、次世代音频源码输出等实用的功能。最关键的功耗发热较低,具备出色的性能功耗比和性能价格比。

  GTX480和GTX470的定价符合其性能等级,唯一的缺点就是功耗实在太大了,但对于追其完美画质与至强性能的玩家来说,多费几度电又算得了什么呢?不过过高的发热确实是个问题,对静音要求比较高的玩家可能得上水冷了。

  当然别忘了N卡还有CUDA、PhysX、3D Vision(还有3D立体三屏)等A卡所不具备的附加技术,这些都是左右玩家选择的重要砝码,ATI在这方面做得显然还不够好。

● DX11争霸赛才刚刚开始

  绝大多数国内玩家需要的是中端产品,而不是很贵很大很热的高端产品,目前国内市场HD5830、5770、5750大受欢迎就说明了一切。NVIDIA虽然发布了GTX480和GTX470,但距离普通用户还是比较遥远。

  现在NVIDIA正处在改朝换代时期,中端产品青黄不接,GTX260和250全面缺货,迫切的需要DX11新品出来压阵。GF100核心的GTX480与GTX470都延期了这么久才发布,那么其中低端产品还要让大家等多久呢?

  看了Fermi的架构图您就会明白了,GF100本身就是多核(GPC)设计,在其基础上降低规模生产中低端芯片是非常容易的事情。据了解GT400系列的主流产品也不再遥远了,当NVIDIA的小芯片走出台积电40nm工艺的阴影之后,其综合表现将会更加完美!

  对于各家显卡厂商而言,对GTX480、GTX470也是期盼已久,在NVIDIA官方正式发布的第一时间,几大AIC品牌也都同时发布了旗下的相关产品。商家们为“Fermi”量身定制的外包是各具特色,彰显出这款旗舰产品的极致魅力!下面,我们就来看看首批亮相的这些“Fermi”产品。