DirectX 10下的双塔对决

技术空间

随着微软Vista操作系统的发布,DirectX 10变得非常热门。但与此同时,显卡与游戏对DirectX 10的支持却没有跟上步伐。在历经近半年的酝酿之后,NVIDIA和AMD终于发布了一系列的产品,成功打破僵局,G80和R600作为最高端的产品首先被推出,而真正在主流市场将和大家亲密接触的则将是G84/G86和RV610/RV630,一起来给它们做一个比较吧。

一、标准比对,优劣让数字说话

从技术背景看,本来被AMD并购的ATI更有优势,早在2003年它就同微软签订了协议,为游戏主机XBOX360开发图形核心——XENOS。这是最早一款将统一渲染架构用于实践的显示核心。在XBOX360上的成功以及与微软的合作为ATI积累了不少经验。

但随后而来的合并案牵扯了ATI太多精力,以至于当去年年底NVIDIA发布全球第一款DirectX 10显示芯片G80时,他们只能沉默以对。在每六个月就会更新一次的显卡市场上,落后半年意味着什么相信AMD比谁都清楚。

尽管微软为了强化特效,降低游戏编程的难度和更加标准化的运作,在DirectX 10的规范中对显示芯片设计提出了比以往更为苛刻的要求,如必须加入Geometry shader、全部采用统一渲染架构、流处理器等等,看起来产品设计上的条条框框越来越多,同质化情形似乎无法避免。但最终,NVIDIA和AMD交出的答卷诠释了他们对技术的不同理解,从G84/G86和RV610/RV630的参数对比表中我们可以看出一些端倪。

21-d12-b1.jpg

二、核心对决,殊途是否可以同归

特别是在G80和R600核心的设计上,两家的研发人员真的是拼尽了全力。内核中很多核心部件,都凝聚着两家不同的设计思想。

1.流处理器的区别

流处理器是DirectX 10体系中非常重要的一环,正是它构成了统一渲染架构的核心。现在不论是顶点渲染、像素渲染还是几何渲染都要通过它来完成操作。虽然在G8X和R6X0上都有流处理器,但它们的实现方式还是存在很大的差别。

G8X方面,NVIDIA通过对图形指令结构进行研究,得出的结论是标量数据流所占比例正逐年提升,如果渲染单元还是坚持SIMD设计会让效率下降。为此NVIDIA在G8X中做出大胆变革:流处理器不再针对矢量设计,而是统统改成了1D标量处理单元。也就是说在处理上述4D数据时要么让1个流处理器在4个周期内完成,要么调动4个流处理器在1个周期内完成。看起来对4D数据的处理效率降低了,但G8X在对1D、2D、3D等数据的处理上却变得非常简单、灵活。为了抵消掉处理3D数据时的效率下降的影响,NVIDIA大幅提升了G8X中流处理器工作频率(两倍于核心频率),并扩充了流处理器的规模。这样一来,G80的128个标量流处理器的运算能力基本就相当于传统的64个(128×2÷4)4D矢量着色器。

21-d12-2.jpg
以G80为首的G8X内核模块

R6X0方面,流处理器设计从宏观上看仍然是SIMD结构,从架构图上我们可以看到,R600有64个流处理单元,每一个内部又有5个标量执行单元,它们在分支执行单元(Branch Execution Unit)的控制下可以任意的组合为1+1+1+1+1、2+2+1、4+1等形式,因此AMD认为他们的流处理器实际上是64×5=320个。但笔者认为,实际上这种需要进行控制的组合形式看起来规模宏大但并不如NVIDIA的设计简洁明了,组合形式的更迭切换肯定会带来消耗,加上如此处理后,流处理器矩阵规模扩大,对整个矩阵的控制也变得复杂和难以预料。过去P4的超长流水线设计就败在了把简单问题搞复杂上面,AMD的流处理器矩阵前景如何需要观察。

21-d12-1.jpg
R6X0系列内核模块

2.纹理单元的不同

G8X的纹理单元是和每一组Shader阵列绑定在一起的,后面还跟上了各自的L1、L2缓存,然后用交叉连接的方式接64位内存控制器,几组合并在一起搭配使用。看起来几个部件类似流水管线一样的设计,很简单,效率会比较高,而且容易通过减少组件来实现产品系列化。

R6X0的纹理单元则有4组,采用4×4的结构,沿用R520/R580的设计,并做了适当改进。其中包括了纹理寻址单元、32位浮点纹理采样单元、纹理过滤单元等细节。

21-d12-3.jpg
G8X的纹理单元结构

3.显存控制器设计的区别

G8X的显存以交叉连接的方式接在每一组shader下面,这么做的弊端是在提升内存位宽时会遇到麻烦,交叉存取的结构在规模较大时管理非常复杂,PCB布线难度很大,信号延迟容易增大。

R600的显存控制器采用环形总线,拥有两条512bit环形通道,一条用于读取数据,另一条用于写入数据。另外在环形通道上有四个环站,每个环站控制两个64bit显存,可以看到R600不存在中央控制器,所有显存读写操作都由四个环站经过仲裁器判定后执行。在大规模的情形下,它比交叉连接可行性高,但在小规模下效率可能不如交叉连接。

三、视频加速功能的区别

视频加速方面,为了降低高清视频的门槛,同时亦是为了适应未来高码率HDTV以及影碟的播放需求,NVIDIA在G84/G86核心内集成了新一代的Video Processor,而且还加入了全新的bitStream Processor Engine(二进制空间分割引擎),这个模块专门负责处理上代PureVideo所忽略的CAVLC(前后自适应可变长度编码)/CABAC(前后自适应二进制算术编码,压缩率更高)解码以及Inverse Transform(逆变换)。通过改进H.264的编码引擎,就可以在G8X系列芯片组上完成H.264全部的解码过程。即便玩家使用低端处理器,也能在播放高码率H.264视频时大幅降低CPU占用率。

而AMD方面功能更为强大,全新推出视频加速引擎UVD(Universal Video Decoder,通用视频解码器)来配合HDMI数字/音频输出。UVD引擎可以完成H.264视频解码的全部4个过程;不仅如此,对于另一种HDTV编码格式VC-1也做到了硬件上的百分百解码。

UVD是世界上首款能同时支持H.264以及VC-1两种高清晰视频回放的引擎。对高清晰视频技术感兴趣的朋友一定非常清楚,这两种高清晰编码是如今主流的HD规格。

结合ATI Avivo HD技术,配合UVD视频加速引擎,即便是今后最为廉价的RV630低端显卡,都能对HD DVD以及蓝光等高清晰视频进行流畅播放。对于那些打算搭建一套HTPC的用户来说,尤其具有吸引力。

四、缩减和平衡

G8X和R6X0之间的对决并不只存在于技术面,市场操控能力同样考验着两家公司,G80和R600在设计时基本上是采用不计成本只求性能的方法得来的。但真正占据市场主流的却不是它们,为了能够在市场中站稳脚跟,必须通过对高端芯片进行缩减以求得功耗、性能、价格之间的平衡,而最容易采用的手段就是缩小流处理器的规模和削减显存位宽,以及采用更低廉和容量更少的显存等方式。

21-d12-4.jpg
R6X0的环形总线显存控制器

G80(8800GTX)流处理器部分有8个阵列,屏蔽了两个阵列和一组64bit显存控制器,就诞生了96个流处理器的8800GTS显卡。而中端的G84核心拥有两个阵列和两个64bit显存控制器,所以其核心规格就是32个流处理器、16个纹理单元、8个光栅单元以及128bit显存。低端G86核心只有一个阵列,规格为16个流处理器、8个纹理单元、8个光栅单元、128bit显存。

而AMD的做法也与NVIDIA类似,Radeon HD2900系列图形芯片,内建320个流处理器,搭配双向512bit显存位宽。HD2600系列则内建了120个流处理器,搭配128bit显存位宽,通过不同显存搭配衍生出更多的版本。面向入门级用户的RV610(Radeon HD 2400系列)分为XT、Pro两种规格,内建40个流处理器,搭配64bit显存位宽。

在这里,两家值得单独列出来说一说的差异还有两点:其一,G86和G84采用80nm工艺制造,而RV630、RV610采用的是65nm工艺。出现这种差异,很可能是NVIDIA在制造工艺上求稳,保证产量,抢占市场的结果,但AMD的芯片如果能够顺利出炉,将有可能诞生超频明星,但显然这有些冒险。其二,AMD在低端居然采用了64位的显存位宽设计,显然这是针对OEM市场和绝对低价市场特设的,它的性能可能还不如现在很多中、低端显卡,但它的价格可能吸引一部分用户,NVIDIA没有对应产品。

后记

不管怎样,为DirectX 10准备的新式武器已经就位,扣动扳机的也许是DirectX 10游戏的全面上市,也可能是Vista的遍地开花,甚至也许是NVIDIA和AMD耐不住寂寞的竞相杀价,但不管是出于什么原因,“潘多拉的盒子”已经打开了。