DirectX支配游戏!历代GPU架构全解析
泡泡网显卡频道4月30日 NVIDIA与ATI(AMD)的GPU之战,远比Intel和AMD的CPU之战有意思,毕竟双方的实力差距并没有那么悬殊,经常斗得是难解难分。N/A的连年征战给我们带来非常好游戏画面和优秀产品的同时,也为喜欢IT技术的朋友带来了许多乐趣和谈资,只有深爱硬件技术的朋友才能有所体会。
掐指一算,从GPU诞生至今双方都已推出了十代产品,每一代产品之间的对决都令无数玩家心动不已,而其中最精彩的战役往往在微软DirectX API版本更新时出现。虽说胜败乃兵家常事,但NVIDIA和ATI每一代产品谁更强大似乎有某种规律可循,而且与DirectX有着某种微妙的关系。
相信很多人都有这种感觉,似乎谁与微软走的更近,谁能最先支持新版DirectX API,谁就能占据更多的优势。但也有例外,比如DX8.1对于Radeon 8500的帮助有限,DX10.1也没有给HD3000带来好运。其实这些只是表象,如果我们能够透过现象看其本质的话,就会发现DirectX与GPU的架构是有直接关系的,而GPU架构的优劣直接了决定一代产品的成败。
所以,今天我们就抛开GPU的晶体管数、管线/流处理器规模、工艺、频率、功能等等技术参数不谈,我们将关注的焦点集中在GPU体系架构方面。看看每逢DirectX版本有重大更新时,NVIDIA与ATI是如何博弈的,克敌制胜的关键到底是什么?
在DirectX 5.0以前,这个被微软整合在Windows操作系统内部的图形API并没有现在这么风光,当时的显卡和游戏都以支持OpenGL和Glide(3DFX的专用API)为荣,DirectX在持续不断的改进与发展,但始终都没能超越对手,一方面基于DOS系统的Windows还不够强大,另一方面微软的影响力还没到左右游戏开发商和芯片厂商的地步。
直到Windows 95发布之后,全新的图形界面让整个业界都兴奋不已,90%的占有率直接带动了整个行业的需求,也迫使全球软硬件厂商都不得不向其靠拢。此时整合Win95整合的DirectX 6.0也有了足够的实力与OpenGL/Glide分庭抗力,在技术特性不输与人的情况下,DirectX的影响力与日剧增。
● DirectX 7.0确定权威:核心技术T&L
DirectX 7.0是一次革命性的改进,其最大的特色就是支持Transform & Lighting(T&L,坐标转换和光源)。
3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。
基于T&L技术的演示Demo
在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显卡核心来计算,这样就可以把CPU从繁忙的劳动中解脱出来,让CPU做他该作的事情,比如逻辑运算、数据计算等等。换句话说,DX7显卡用T&L渲染游戏时,即使没有高速的CPU,同样能能流畅的跑3D游戏。
★ 首颗GPU诞生:GeForce 256(NV10)
T&L优秀的特性成为当时业界关注的焦点,那么首款支持DX7与T&L的显卡自然备受期待,NVIDIA的GeForce 256就是这样一款划时代的产品,为了突出它先进的技术特性,NVIDIA将GeForce 256的显示核心称为GPU(Graphic Processing Unit,图形处理器)。
GeForce 256所采用的核心技术除了硬件T&L之外,还有立方环境材质贴图、顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素、256位渲染引擎等诸多先进技术。在性能大幅提升的同时,3D游戏的画面得到了质的提升。
此后发布的GeForce 2 GTS就是GeForce 256的提速版本,架构、规格和技术没有多少改变。因此可以说GeForce 256就已经确立了当今GPU的整体架构雏形,我们可以看到它拥有专门的坐标转换与光源引擎,还有装配引擎、渲染管线、后期处理模块等等,这些功能单元基本都被沿用至今。
★ 两强争霸局面形成:Radeon 256
在DX7大势所趋的局面下,ATI也发布了首款DX7显卡,其命名都与NVIDIA惊人的一致——Radeon 256,由此掀开了NVIDIA与ATI、GeForce与Radeon争霸的局面。
Radeon 256独特的单管线3纹理架构
Radeon 256同样支持硬件T&L、环境贴图和凹凸贴图,还支持Hyper及和DOT3压缩技术,Radeon 256只有两条渲染管线,但每条管线拥有多达3个纹理单元,而GeForce 256每条管线只有1一个纹理单元,GeForce 2 GTS才改进为2个。但遗憾的是Radeon 256的第3个贴图单元直到它退市的时候也没有任何程序能够支持它,同时令人诟病的驱动也令用户大为恼火。
Radeon 256及其衍生的Radeon VE/LE/SE等都是优秀的产品,技术与架构不输给GeForce系列,功能甚至还更丰富,但糟糕的软硬件支持度导致它无法同GeForce相抗衡,口碑和市场都不如人意。
★ 小结:DX7架构平分秋色,硬件规格决定性能
GeForce 256与Radeon 256的基本架构是相同的,不同的是管线设计,GeForce 256拥有更多4条管线,但纹理单元也只有4个;Radeon 256虽然只有2条管线,但每管线拥有3个纹理单元,而且工作频率很高,因此在理论性能上占优势。
在当时来说,游戏大量使用了各种纹理贴图,因此对纹理单元提出了很高的要求,所以NVIDIA在GeForce 2 GTS当中改进为单管线双纹理。NVIDIA管线:纹理=1:2、ATI管线:纹理=1:3的架构都维持了很多年,直到DX9时代才有了较大的变化。
● DirectX 8.0:引入像素和顶点两大渲染管线
面向图形计算,让GPU逐渐找到了自己的方向,那就是给予用户更真更快地视觉体验,但是GPU架构也遇到一些问题亟待解决。首要问题就是,要实现更加复杂多变的图形效果,不能仅仅依赖三角形生成和固定光影转换,虽然当时游戏画面的提高基本上都是通过大量的多边形、更复杂的贴图来实现的。
但后期的发展中,顶点和像素运算的需求量猛增。每个顶点都包含许多信息,比顶点上的纹理信息,散光和映射光源下表现的颜色,所以在生成多边形的时候带上这些附加运算,就可以带来更多的效果,但这也更加考验顶点和像素计算能力。
2001年微软发布了DirectX 8.0,一场新的显卡革命开始,它首次引入了ShaderModel的概念,ShaderModel就相当于是GPU的图形渲染指令集。其中像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader)都是ShaderModel 1.0的一部分,此后每逢DirectX有重大版本更新时,ShaderModel也会相应的升级版本,技术特性都会大大增强。
与DX7引入硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器,时至今日DX11时代ShaderModel都在不停地更新,以便渲染出更逼真更完美的画面。这意味着程序员可通过它们实现3D场景构建的难度大大降低,但在当时来说可编程性还是很弱,GPU的这一特性还是太超前了。
DX8动态光影效果展示:变色龙和不同角度的人脸
DirectX 8.0当中的Pixel Shader和Vertex Shader的引入,使得GPU在硬件逻辑上真正支持像素和顶点的可编程,反映在特效上就是动态光影效果,当时波光粼粼的水面都是第一次展现在玩家面前。
但是DX8的普及之路并不顺畅,主要是因为当时的DX8显卡都定位太高,NVIDIA和ATI双方都没有推出过低端DX8显卡,热卖的产品都是DX7,直到DX9诞生之后,双方才把昔日高端的DX8显卡当作低端产品处理。
★ 首款DX8显卡:GeForce 3 Ti
在DX8之前,无论NVIDIA还是ATI,都在强调显卡前端及后端输出。而Shader理念提出之后,双方逐渐将竞争重点放在了显卡的渲染核心部分——像素渲染管线和顶点渲染管线,无论是GeForce 3 Ti还是Radeon 8500都内置的规格和频率更强的PS和VS单元。当然也对显卡的后端ROP(光栅化引擎,负责完成像素的输出)也做了相应的改进,各种各样的多重采样AA模式和材质过滤技术逐步得以实现。
上图就是GeForce 3的核心架构图,可以看出,由于DX8渲染模式的改变,GeForce 3相对于DX7的GeForce 2/256有了天翻地覆的变化,一半以上的模块需要重新设计(绿色部分)。
GeForce 3的顶点管线设计
硬件规格方面,GeForce 3依然只有4条渲染管线,每条管线内置2个纹理单元,这与上代的GeForce 2没有区别。但是GeForce 3的核心晶体管数竟然是GeForce 2的两倍以上,额外的晶体管大都用在了顶点管线部分,虽然它只有一个顶点着色单元。这个顶点着色单元其实就是一个4D SIMD(单指令多数据流)处理器,可以计算最多16项数据的顶点,这在当时来说运算能力已经非常富裕了。
不过,主流的游戏还是基于DX7开发,因此GeForce 3的VS单元很多时候都派不上用场,由此导致GeForce 3在DX7游戏当中领先GeForce 2 Ti的优势并不大,毕竟它们的像素渲染管线和纹理单元数目是相同的,频率也没有提升太多。
★ ATI直上DX8.1:Radeon 8500
DX8方面ATI再次落后于NVIDIA,但后发制人也有好处,ATI直接采用了微软更新的DX8.1 API,因此在硬件特性方面要更胜一筹。不过DX8.1的改进极为有限,只是改进了大纹理水波纹的效能,未能得到整个业界的重视。
Radeon 8500与DX7版的Radeon系列相比,架构上也产生了翻天覆地的变化,除了加入顶点引擎外,更多尚处于实验性的技术都被置于其中,而且2D输出部分的功能更为丰富,可以说在技术和功能方面完全超越了GeForce 3 Ti。
规格方面,Radeon 8500拥有4条像素渲染管线,这与GeForce 3是相同的,但是8500拥有2个顶点着色单元,而GeForce 3只有1个,这就使得8500的理论性能更占优势。纹理单元方面ATI放弃了管线:纹理=1:3的设计,采用了与NVIDIA相同的1:2设计,因为第3个纹理单元在多数游戏中都毫无用处,这样双方的纹理单元数量也完全相同。
★ 小结:DX8架构ATI更出色,NV性能更强
整体来看双方都是重新设计的优秀架构,考虑到众多的特色功能和技术,Radeon 8500的确要优于GeForce 3 Ti。这是在3DFX灭亡之后,第一次有一家公司对NVIDIA造成如此大的压力,所以NVIDIA发布了更高频率的GeForce 3 Ti 500才勉强夺回性能之王的宝座。当然NVIDIA成熟稳定的驱动和长期积累的用户口碑以帮助GeForce 3 Ti力压Radeon 8500系列。
后期NVIDIA推出更多管线的GeForce 4 Ti自然拥有更强的DX8性能,但考虑到ATI方面没有与之相对应的产品,就不做对比了,因为ATI已经直接进入了DX9时代。
● DirectX 9.0:高精度渲染时代来临
2002年底,微软发布DirectX 9.0,如果从技术规格上看,DX9似乎没有DX7和DX8那种让人眼前一亮的革命性技术,它只是将ShaderModel版本从1.0升级到2.0而已。其实不然,此次ShaderModel指令集的改进让图形渲染画质提高到了新的水平。
首先,PixelShader 2.0具备完全可编程架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。
3DMark03中的最后一个场景就是DX9渲染,让人眼前一亮
其次,VertexShader 2.0通过增加顶点指令的灵活性,显著的提高了老版本的顶点性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。
Radeon 9700所提供的HDR Demo
另外,增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。
★ 首款DX9显卡——Radeon 9700
当NVIDIA沉浸于GeForce 4 Ti大获全胜的DX8时代时,ATI在DX9标准正式确立之前就提前发布了Radeon 9700显卡,打得NVIDIA措手不及。这款产品来得如此突然,以至于ATI发布之时甚至没有提供相关技术PPT/PDF。
由于DX9相比DX8并没有改变3D渲染流程,仅仅是强化了ShaderModel指令集,因此R300的架构相比R200改进并不大,主要的变化是规模的扩充与外围控制模块的加强。比如:首次使用256bit显存控制器、类似CPU的FCBGA封装、更先进的纹理压缩技术以及后期处理单元。
R300的顶点和像素着色单元结构
当然,R300的Shader单元经过了重新设计,定址、色彩和纹理单元都支持浮点运算精度,这是它能够完美运行DX9程序的关键。R300核心拥有8条像素渲染管线及4个顶点着色单元,每条像素管线中只有1个纹理单元。至此ATI的像素与纹理的比例从1:3到1:2再到1:1,在DX9C时代将会进一步拉大至3:1,也就是风靡一时的3:1架构,当然这是后话了。
★ NVIDIA遭遇滑铁卢——GeForce FX 5800
NV30核心采用了业界非常先进的0.13微米工艺制造,并使用了最高频率的GDDR2显存,而且发布时间较晚,理应占尽优势才对。但是这一次NVIDIA没能跟上微软的步伐,不仅在时间上晚于ATI,而且在DX9技术方面也未能超越。NV30的架构存在较大的缺陷,NVIDIA艰难的完成了从DX8到DX9的过渡,但结果很不理想。
从宏观上说,NV30的整体架构更像是一个DX7(固定功能TRUE T&L单元)、DX8(FX12combiner整数处理单元)、DX9(浮点像素单元)的混合体。而在DX9的应用中,不能出现非浮点精度的运算,所以前两者是不起作用的,造成了NV30晶体管资源的浪费,同时也影响了性能。
NV30的PiexlShader单元没有Co-issue(标量指令+矢量指令并行处理)能力,而在DX9中,单周期3D+1D是最常见指令处理方式,即在很多情况下RGB+A是需要非绑定执行的,这时候NV30就无法并行执行,指令吞吐量大大降低。其次,NV30没有miniALU单元,也限制了NV30的浮点运算能力(在NV35中DX8整数单元被替换为miniALU)。
另外,NV30在寄存器设计(数量及调用方式)、指令存储方式(读写至显存)等方面也有缺陷。NV30的寄存器数量较少,不能满足实际程序的需要。而且,用微软的HLSL语言所编写的pixel shader2.0代码可以说NV30的“天敌”,这些shader代码会使用大量的临时寄存器,并且将材质指令打包成块,但是NV30所采用的显存是DDR-SDRAM,不具备块操作能力。同时,NV30材质数据的读取效率低下,导致核心的Cache命中率有所下降,对显存带宽的消耗进一步加大。
由于NV30是VILW(超长指令,可同时包含标量和SIMD指令)设计类型的处理器,对显卡驱动的Shader编译器效率有较高的要求。排列顺序恰当的shader代码可以大幅度提升核心的处理能力。在早期的一些游戏中,这种优化还是起到了一定的作用。但对于后期Shader运算任务更为繁重的游戏则效果不大。
最终,虽然NV30与上代的NV25相比架构变化很大,但性能方面全面落后与对手的R300。不过NV30的架构还是有一定的前瞻性,ATI的R600在Shader设计方面与NV30有很多相似之处。
★ 小结:非“真DX9架构”导致NV30失败
现在再来看看,相信没人会认为DX9的改进有限了。正是由于NVIDIA没能适应DX9所带来ShaderModel指令的诸多改进,采用DX8+DX9混合式的架构,才导致NV30存在很大缺陷,在运行DX9游戏时效率很低。另外冒险采用先进工艺、不成熟的GDDR2显存、128bit位宽这些都极大的限制了NV30的性能,即便在DX8游戏中都无法胜过R300。
而ATI则占据天时地利人和等一切优势,完全按照DX9标准而设计,甚至在DX9标准确立之前就早早的发布了DX9显卡,这不免让人感觉ATI和微软之间存在微妙的关系,“阴”了NVIDIA一把。
这是DirectX历史上唯一一次半代更新就引起渲染大波的版本,DirectX 9.0c,大名鼎鼎的HDR技术诞生。
● DirectX 9.0c:非常好的光影渲染
DX9也是一次革命性的改进,但由于没有代表性的关键技术,以至于被广大用户所忽视,其实ShaderModel从1.0升级到2.0给图像渲染品质带来了巨大的提升。DX9的第三个版本DX9C则更进一步,将ShaderModel从2.0升级至3.0,这一次又能带来什么呢?
ShaderModel 3.0除了继续扩展指令长度之外,还提升了指令执行能力,它开始支持动态分支操作,像素程序开始支持分支操作(包括循环、if/else等),支持函数调用。因此DX9C和SM3.0标准的推出,可以说是DirectX发展历程中的重要转折点。
SM3.0除了取消指令数限制和加入位移贴图等新特性之外,更多的特性都是在解决游戏的执行效率和品质上下功夫,SM3.0诞生之后,人们对待游戏的态度也开始从过去单纯地追求速度,转变到游戏画质和运行速度两者兼顾。因此SM3.0对游戏产业的影响可谓深远。
以上诸多改进相信很多人都不关心也不想知道,绝大多数人记住的只有一个,那就是只有DX9C显卡才支持HDR技术,因为HDR所带来华丽的光影效果给所有人都留下了深刻的印象,那种从暗淡无光到流光溢彩的美好回忆,可以说是很少见的的!
HDR的全称是High Dynamic Range,即高动态范围,是一种色彩存储方式,在游戏用于存储渲染和光照数据。HDR渲染可以用4句话来概括:1.亮的地方很亮;2.暗的地方很暗;3.亮暗部的细节非常非常明显;4.所有光照为实时计算生成,可模拟人眼视网膜动态改变明暗细节。
在DX9C之前,HDR已经得到了广泛应用,一般有FP16 HDR(半精度浮点型)和INT32 HDR(整数型),但效果都不如人意,FP16的动态范围不够大,而IN32的效率很低,因此这些HDR格式并未带来震撼效果。而FP32 HDR(32bit浮点格式)的诞生则大大拓展了明暗度扩展空间,使得游戏的光影效果有了质的提升,当年的《细胞分裂》、《FarCry》、《3DMark06》等一系列游戏开启HDR后的画面让人惊讶不已!
★ 首款DX9C显卡——GeForce 6800
在经历了GeForce FX系列惨痛的失败后,NVIDIA痛定思痛,要挽回在高端产品上的失利局面,仅靠架构已完全定型的NV3x系列作一定程度的增补显然是很难实现的。NVIDIA将更大的希望押宝在了新一代产品之上,它吸取了上一代产品的教训,重新设计的架构和完整支持DX9C标准,让这款显卡以全新的形象展现在用户面前。甚至有分析家评论GeForce 6800和GeForce FX简直不是一家公司设计的产品,其架构变化之大可见一斑!
NV3X最大的弊端就是像素渲染单元效能低下,而NV40最强大之处就在像素单元架构部分。NV40拥有多达16条像素渲染管线暂且不谈,其每一个PSU的结构都值得探讨,NVIDIA将其称为Superscalar(超标量)的设计。普通的像素渲染管线只提供一组着色器单元,每个周期最多只能执行四组运算,而NV40的超标量架构则内含第二组着色器单元,让每个周期的运算量增加一倍。
NV40的像素渲染管线结构
正因为如此,对手ATI的X800系列虽然在硬件规格上与NV40完全相同,但在DX9b游戏中的性能差距依然不小,这就是超标量架构的优势。当然固步自封的ATI在X800时代依然仅支持DX9b,无法开启HDR,丧失了很多卖点,让用户大失所望。
6800的成功让NVIDIA风光无限,整个GeForce 6家族在各个价位都力压对手的X800家族,而且完美的架构使得NVIDIA可以轻易的扩充规模,发布了拥有多达24条像素渲染管线的第二代DX9C显卡——GeForce 7800系列(其架构基本没变,只做了些许优化,这里就不多做介绍了)。
★ 支持HDR+AA的DX9C显卡——X1800/X1900
X800的对手是6800系列,但它既没有性能优势,也不支持DX9C/HDR,这使得ATI经历了9700/9800系列短暂的辉煌之后再次陷入被动局面。于是,ATI开始研发下一代GPU,改良架构,准备重夺王位。但事与愿违,R520核心的X1800XT虽然使用了全新的架构,完美支持DX9C,但依然没能击败已经发布半年之久的7800GTX,因为X1800XT依然只有16条像素渲染管线,而7800GTX拥有多达24条,差距如此之大,根本无法用新架构的效率及高频率来弥补。
R520与R580的架构几乎完全相同,不同的只有像素单元数量
当时谁都没有料到ATI还预留了一手,原来R520这种架构的实力远不止16条像素渲染管线这么简单,ATI完全颠覆了传统“管线”的概念,R580核心紧随其后,将像素渲染单元提升只48个之多,整整是R520的3倍!而顶点渲染单元和纹理单元以及GPU其它所有模块都没有做任何改动。
从R520到R580的这种改变当时令所有人都很费解,因为包括G70和R420在内的以往所有GPU都是管线式架构,就是像素渲染单元内部包含了纹理单元,一般像素和纹理的比例是1:2或者1:1。而R520首次将像素单元和纹理单元拆分开来,成为独立的设计,所有的像素单元都可以互相共享所有纹理单元资源,R520的像素和纹理比例依然是1:1,而R580的比例则瞬间提升至3:1,相信资历较老的玩家一定记得ATI当年大肆鼓吹“三比一架构”。
这样设计是因为ATI发现了游戏的发展趋势,像素渲染的比重越来越高,而纹理贴图的增长比较缓慢,相信大家还记得当年ATI的DX7显卡,其一条管线中包括了3个纹理单元,以前是1:3后来是1:2接着变成1:1,现在被ATI一举提升至3:1。虽然当时很多人都不好理解,但从现在的发展来看,像素与纹理的比例越拉越大,DX10时代大概是3:1,DX11时代则变成了5:1甚至更高!
除了具有前瞻性的3:1架构外,X1000架构还有另一大绝招就是HDR+AA技术。大家知道6800系列连续两年都是市面上唯一的DX9C显卡,当时所有的DX9C游戏都是基于NVIDIA的架构而开发,当使用N卡开启HDR特效时(准确的说是FP32格式),会占据原本属于MSAA的缓冲区,导致HDR和AA无法共存。HDR是DX9C的代表技术,能大大提升画面效果,而AA消除锯齿也能大幅改善画质,这两项关键特效无法同时开启让玩家们很郁闷。
ATI的DX9C产品比NV晚了一代,ATI意识到了DX9C的这一缺陷之后,在其架构设计之初就考虑到了HDR和AA共存的问题,因此特别设计了专用的缓冲区,可以通过游戏或者驱动重新指定MSAA的缓存位置,从而同时开启HDR+AA。遗憾的是修改游戏或驱动兼容性并不好,支持的游戏也不多,虽然这确实是一个很大的卖点,ATI锐意进取的精神也值得尊重,但最终效果还是不如人意。
另外,X1000也改进了像素着色单元的内部结构,每个像素单元都拥有两个算术逻辑单元和一个分支执行单元,其中ALU1只能执行加法(ADD)计算,ALU2能执行包括加法、乘法(MUL)、乘加(MADD)各类运算,两个ALU最高可以执行两条指令(3D+1D)。为了控制如此庞大的像素单元,ATI还针对SM3.0的特性改进了动态流控制功能,大大改进了SIMD架构的动态分支性能,让像素着色效能得到提升。
功夫不负有心人,全新架构并且拥有多达48像素单元的X1900XTX,性能比X1800XT获得了大幅提升,完胜对手的7900GTX,而且越新的游戏优势越明显。强大的X1900XTX迫使NVIDIA推出双G71核心的7950GX2来对抗,虽然7950GX2单卡超越了X1950XTX,但双卡的话则因效率问题依然是A卡占优。
★ 小结:DX9C时代双方架构各有所长
DX9C是一代经典API,至今依然有很多游戏无视DX10/DX11,坚守DX9C平台,以至于HDR+AA的问题被遗留至今依然没能得到完美解决。NV40是因为发布较早没能解决这一难题,G70则是扩充像素和顶点的产物,也没能解决。
ATI在X800时代未能抢得先机,因此在X1000架构当中花了很多心思,争取做最完美的DX9C显卡,他们确实做到了这一点,无论架构和性能都有优势。但由于晶体管规模太大,功耗表现不如人意,因此在市场方面X1000与GF7相比并无优势。
以往的DirectX游戏无论多么优秀,始终都会有OpenGL引擎和游戏站出来发起挑战,而且其画面还相当不错。但DX9C之后,就只有ID Software还在负隅顽抗了,到了DX10时代,再也没有任何一款OpenGL能与DX游戏相抗衡,微软终于一统江湖!
● DirectX 10.0:统一渲染架构和几何着色
DX10又是一次大革命,除了将ShaderModel从3.0升级至4.0版本外,还有两项非常重要技术:
第一:引入统一渲染架构,从此不再区分像素与顶点着色单元,而是由流处理器单元按照负载动态的执行包括像素和顶点在内的各种着色指令:
DX11引入统一渲染架构,不同的着色单元不会再出现空闲浪费资源的情况
第二,引入全新的几何着色单元,它第一次允许由GPU来动态的生成和销毁几何图元数据,使GPU可以在不用CPU干涉的条件下进行反复运算,许多以前无法实时使用的算法现在都可以在GPU中使用了。
此外,DX10还引入了两种新的HDR格式,避免了HDR和AA不兼容的情况出现,并提升了HDR效率;DX10还大大改进了纹理贴图的精度和效率;其它大大小小的改进有数十项之多,这里就不多做介绍了。
统一渲染架构的引入要求NVIDIA和ATI双方必须放弃以往的模式,重新设计全新的GPU架构,G80和R600之争拉开了帷幕……
★ 首款DX10显卡——GeForce 8800
无论从哪个方面来看,GeForce 8800与DX9时代的Radeon 9700都非常相似,微软的新一代API尚未正式发布,而新显卡居然开卖了大半年,虽然没有新游戏的支持,但在老游戏下的性能依然非常完美。因此每一代成功的显卡最关键的还不是API,还是核心架构。DX10是API的又一次革命,而G80则是GPU架构的一次伟大革命:
如果说R580像素与纹理3:1的比例让人很费解的话,那么G80的流处理器设计则让用户们一头雾水:从G71的24条像素管线一下变成了128个流处理器,哪来的这么多?
传统的GPU Shader架构
传统的Shader不管是像素还是顶点,其实都是SIMD(单指令多数据流)结构,就是个4D矢量处理器,可以一次性的改变像素的RGBA数据或者顶点的XYZW数据。而G80的流处理器则是1D标量处理器,它一次只能计算像素和顶点4个数据中的1个,如此说来效率岂不是很低?
当然不是,因为随着游戏的发展,GPU所要处理的指令已经不是4D这种常规数据流了,进入DX10时代后Z缓冲区(1D)或纹理存取(2D)等非4D指令所占比重越来越多,此时传统的Shader单元在执行此类指令时的效率会降至1/2甚至1/4,即便有Co-issue技术的支持效率改进也十分有限。
G80的SP
而G80 1D标量流处理器执行各种类型指令时的效率都能达到100%,这也就是NVIDIA对于GPU架构大换血的主要目的。G80的这种架构被称为MIMD(多指令多数据流),其特色就是执行效率非常高,但也不是没有缺点,理论运算能力偏低、晶体管消耗较大,当然由于对手产品实力不行,这些缺点在很长一段时间内都没有被发现。
而且NVIDIA的1D标量流处理器还可以异步工作在超高频率之下,一般是GPU核心频率的两倍,由此大幅提升了渲染能力。这一技术ATI至今都未能实现。
★ ATI的DX10图形架构——R600
与革命性的G80架构不同,R600身上有很多传统GPU的影子,其Stream Processing Units很像上代的Shader Units,它依然是传统的SIMD架构。
R600拥有4个SIMD阵列,每个SIMD阵列包括了16个Stream Processing Units,这样总共就是64个,但不能简单地认为它拥有64个流处理器,因为R600的每个Units内部包含了5个ALU:
我们来仔细看看R600的流处理器架构:Branch Execution Unit(分歧执行单元)就是指令发射和控制器,它获得指令包后将会安排至它管辖下5个ALU,进行流控制和条件运算。General Purpose Registers(通用寄存器)存储输入数据、临时数值和输出数据,并不存放指令。
由于内部的5个1D ALU共享同一个指令发射端口,因此宏观上R600应该算是SIMD(单指令多数据流)的5D矢量架构。但是R600内部的这5个ALU与传统GPU的ALU有所不同,它们是各自独立能够处理任意组合的1D/2D/3D/4D/5D指令,完美支持Co-issue(矢量指令和标量指令并行执行),因此微观上可以将其称为5D Superscalar超标量架构。
通过上图就可以清楚的看到,单指令多数据流的超标量架构可以执行任意组合形式的混合指令,在一个Stream Processing Units内部的5个ALU可以在单时钟周期内进行5次MAD(Multiply-Add,乘加)运算,其中比较“胖”的ALU除了MAD之外还能执行一些函数(SIN、COS、LOG、EXP等)运算,在特殊条件下提高运算效率!
现在我们就知道R600确实拥有64x5=320个流处理器。R600的流处理器之所以能比G80多好几倍就是得益于SIMD架构,可以用较少的晶体管堆积出庞大规模的流处理器。但是在指令执行效率方面,SIMD架构非常依赖于将离散指令重新打包组合的算法和效率,正所谓有得必有失。
★ 总结:DX10架构G80笑到了最后
通过前面的分析我们可以初步得出这样的结论:G80的MIMD标量架构需要占用额外的晶体管数,在流处理器数量和理论运算能力方面比较吃亏,但却能保证超高的执行效率;而R600的SIMD超标量架构可以用较少的晶体管数获得很多的流处理器数量和理论运算能力,但执行效率方面却不如人意。
G80的架构显然要比R600改进更为彻底,所以打从一开始G80/G92就遥遥领先与R600/RV670,其后续产品GT200一如既往的保持领先优势,但幅度没有G80那么大了,因为R600的架构的特性就是通过数量弥补效率的不足。
● DirectX 11注重效率:关键特性曲面细分
DX9C和DX10听起来非常完美,但也有明显的缺点,就是系统资源开销很大,运算效率比较低,所以DX11的重点就落在了改进渲染效能方面。DX11除了将ShaderModel从4.0升级至5.0外,还有两项最重要的改进就是Tessellation和DirectCompute,其中DirectCompute的指令集主要来源于ShaderModel 5.0。
当然还有多线程渲染、增强的纹理压缩格式等其它若干改进,在我们之前的HD5800和GTX480评测中已经做过详细介绍了,因此就不再赘叙。
Tessellation被译为镶嵌,就是一种能让GPU在模型内部自动插入新的顶点,从而让几何图形变得无比复杂细腻的技术,它可以在很少的性能损失下换取明显的画质提升。DX11游戏在画面上的改进主要来自于曲面细分技术,而且曲面细分还能带来很多意想不到的特效!
为了配合Tessellation技术,微软还专门设计了两种全新的Shader着色器,Hull和Domain,以便更精确的控制镶嵌位置,并置换位移贴图。这就与DX9/DX10时代的Tessellation有着本质区别,无法照抄照搬。
DirectCompute则是微软的GPU计算API,可以让GPU处理一些非图形类指令,获得远超CPU的性能。不过目前DirectCompute主要还是用在图形渲染后处理器方面,可以产生非常逼真的景深、透明效果。
★ 首款DX11显卡——HD5800
在经历了DX10时代R600的失利之后,ATI对于微软新一代API十分重视,第一时间对于DX10.1提供了支持,可惜DX10.1相对于DX10改进有限,并不像DX9C那样带来震撼的HDR技术,因此未能得到足够的重视。但ATI积极向上的精神让它在DX11时代抢得先机。
但令人奇怪的是,ATI并没有因为DX11而改变架构,而是几乎原封未动的照搬了上代RV770核心,除了显存位宽维持256bit不变之外,Cypress的其它所有规格都正好是RV770的两倍,而且在流处理器部分可以看作是双核心的设计,几乎就是并排放置了两颗RV770核心。
在流处理器部分,RV870相对于RV770改进有限,只是加入了DX11新增的位操作类指令,并优化了Sum of Absolute Differences(SAD,误差绝对值求和)算法。基本上,除了新增DX11支持和扩充规模外,Cypress与RV770在架构方面没有本质区别。
HD5000系列的主要优势就是功耗控制比较出色,另外功能方面Eyefinity多屏显示以及次世代音频源码输出都很有特色,架构方面确实没有多少亮点。
★ 完全针对DX11而设计的显卡——GTX480
HD5800这一领先,又是半年,这次NVIDIA的阵脚并没有像NV30那样被打乱,而是按部就班的按照既定的设计目标推出全新架构的一代产品,而不是像ATI那样在上代产品基础上改改就发布新品,因为DX11是全新的API,必须为DX11新的特性做相应的优化,才能获得最出色的DX11效能。
GF100核心是既G80和R600之后,近4年来GPU架构改进最大的一次,主要体现在以下四个方面:
1. GPU核心处理部分被划分为4个区块(GPC),每个区块内部囊括了所有主要的图形处理单元。它代表了顶点、几何、光栅、纹理以及像素处理资源的均衡集合。除了ROP功能以外,GPC可以被看作是一个自给自足的GPU,所以说GF100就是一颗四核心的GPU。
2. 每个GPC都拥有一个独立的Raster Engine(光栅化引擎),负责边缘设置、光栅器消隐以及Z轴压缩功能。可大幅提升GPU在高分辨率下的性能。
3. 每组SM都拥有一个独立的PolyMorph Engine(多形体引擎),负责GPU的几何图形转换以及Tessellation曲面细分功能,彻底消除GPU的几何性能不足的瓶颈,从而大幅提升DX11性能。
4. GPU的一二级缓存都经过了重新设计,架构上更类似于Intel的多核CPU,改进流处理器和纹理单元的性能,进一步提升MIMD架构的效能。
和上代的GT200相比,GF100的所有模块几乎都经过了重新的设计,就连CUDA核心(流处理器)内部的ALU运算单元都针对新的浮点运算格式以及函数做了改进与优化,而不仅仅是兼容SM5.0指令集而已。相反ATI的Cypress核心与上代的RV770相比几乎所有模块都未做任何改进。
经过我们此前的评测来看,GTX480/470在DX10游戏中领先HD5870/5850的幅度并不大,20-30%左右的优势都在意料之中。但在DX11游戏和应用中性能优势十分显著,尤其是Tessellation性能遥遥领先于HD5870甚至双核心的HD5970。DX11特效使用的越多,GTX480/470的优势就越明显。问题显然出在GPU架构方面,GF100是一颗完全针对DX11设计的、采用的全新架构的GPU,而Cypress核心只不过是上代DX10架构外加SM5.0指令集而已,只能说支持DX11但具体的效能不容乐观。
★ 小结:DX10架构无法满足DX11的需要
通过以上分析可以看出,由于HD5800的架构与HD4800完全相同,只是流处理器规模翻倍而已,因此它确实拥有出色的DX10/10.1性能,但DX11的性能却很一般。因为DX11是一款全新的API,并不是针对DX10的小修小补,很多特性不是兼容SM5.0指令集就能做得到的。
ATI虽然通过抢先发布DX11显卡赚得了满堂彩,但却没能经得住时间的考验,未能重现DX9时代R300的辉煌。因为时代变了,当年的R300是全新的架构,完美支持DX9,而NV30架构存在很多缺陷。而现在正好相反,Cypress完全是新瓶装旧酒,而GF100则是真正的DX11架构,这在所有DX11测试中都得到了证实。
● 回顾GPU和DirectX发展史,有规律可循
回顾DirectX的发展史,就会发现虽然微软一直在左右着两大显示巨头的发展,但这只是外因而不是内因,真正决定胜败的关键还是在GPU体系架构方面,这才是双方设计实力的体现。
纵观NVIDIA和ATI近几年的交锋:DX7 NV占优,DX8前期ATI占优后期NV反超,DX9 ATI优势明显,DX9C前期NV大获全胜后期被反超,DX10 NV一路遥遥领先,DX11 ATI抢得先机但又被NV反超——似乎毫无规律可循,实则不然,且听笔者慢慢道来:
★ DirectX重大版本更新,GPU必采用全新架构
从DX7、DX8、DX9、DX9C、DX10,每逢DirectX有重大版本更新时(主要是ShaderModel指令集),GPU架构都会做大幅度的调整,甚至是抛弃老架构重新设计一套新的架构,NVIDIA和ATI双方无一例外!而且新的架构总是能够取得胜利,因为全新的架构完全针对新的API设计,能够彻底发挥出新技术和特性的优势,确保发挥出预期的效果。
比如DX7 DX8时代,双方都是全新的架构,产品的性能其实相差不多,DX8的Radeon 8500甚至超越了GeForce 3,GeForce 4的优势是建立在ATI已经放弃DX8提前进入DX9时代的基础上;DX9时代全新架构的R300大获全胜,NV30的混合架构效率极差一败涂地;DX9C时代NV40重返王座,其后续产品G70/G71因为没有更换架构,在ATI全新的R580面前失去了以往的辉煌;DX10时代G80/G92革命性的架构一路遥遥领先,R600的架构脱胎于R580,表现不甚理想,曾一度遭到怀疑,但随着800SP RV770诞生后,其出色的表现证明了ATI当初的设计思路其实并没有错,但始终没有得到翻身的机会。
NVIDIA要让GT200添加DX11支持是很容易的,但并没有这么做
★ DirectX半代更新,GPU不会更改架构
而DirectX的半代更新,比如DX7.1、DX8.1、DX9.0b、DX10.1这些版本(DX9C不算,因为其ShaderModel从2.0升至3.0),双方都不会更改GPU架构,只是在上代产品基础上小修小补,通过扩充指令集的方式兼容新API即可。尤其是DX10.1这个版本,由于改进太少,双方竟然将G80/R600这一套架构用了5年之久,这在GPU发展史上是极为罕见的!
当然如果DirectX版本停滞不前的话,GPU架构更不会更换,比如DX9C时代的GF6和GF7,DX10时代的GF8/GF9/GT200和RV670/RV770。
★ 唯一的例外——首款DX11显卡HD5000
以上结论看起来很有意思,但是唯独DX11是个例外:ATI对RV770(还是R600架构)没有做任何更改就制造出了DX11显卡,这样的做法确实让人感到意外,但也不难理解,ATI信奉“先行者胜”的理念,认为只要抢先发布DX11显卡就能取得成功。
但在NVIDIA发布GF100之后,HD5000低下的DX11性能让人非常失望,HD5000的确是优秀的DX10/10.1显卡,但他不能算是一款合格的DX11显卡,最终HD5000也难逃宿命,胜利属于全新架构的NVIDIA GF100。
★ HD5000只是过渡产品,ATI真DX11显卡尚未露面
或许我们现在下结论还为时过早,但ATI的做法已经证明了DX11确实需要一套全新的GPU架构,HD5000只不过是临时性架构,ATI下一代的DX11核心“南方群岛”和“北方群岛”都在紧锣密鼓的开发当中,据称“北方群岛”将会是一套彻底改头换面的架构,而“南方群岛”将采用混合式的架构,仅在外围模块使用新的技术,内核部分依然保持不变。
想要在DX11性能方面取得突破,就必须将现有的架构推倒重新来过,NV30的混合型架构一败涂地就是很好的例子。HD5000确实拥有不俗的DX10性能,但现在越来越多的用户需要真正的DX11显卡,因为DX11是大势所趋,其普及速度之快超越了以往任何一代API。
★ 目光放长远一点,真DX11架构的显卡更值得期待
目前来看,真正为DX11设计的GPU只有GF100这一颗,GTX480/470定位较高难入平常百姓家。不过其后续产品也非常值得期待,我们知道GF100强悍的动力源自于内部的光栅化引擎和多形体引擎,即便将GF100的规格削减为1/2甚至1/4,它依然拥有不俗的几何性能和Tessellation性能,而且功耗将会控制的更好,非常值得中端主流用户期待。■