探求架构的奥秘 拆解“管线”看现代显卡(转贴)

小熊在线——geese  北京 2006年02月08日18:17

第1页:游戏是如何制作的?显卡又如何发展?读懂梦幻般的3D世界

引言…

公元1998年3月 nVIDIA RIVA TNT推出 采用0.35微米工艺 共计7百万晶体管

公元2002年7月 ATI 9700PRO推出 采用0.15微米工艺 共计1亿7百万晶体管

公元2006年1月 ATI X1900XTX推出 采用0.09微米工艺 共计3亿八千万晶体管

……

电脑芯片技术,以摩尔定律高速发展着,并有超越之势。晶体管的高速高度集成带来了更高的频率,更先进新技术。这些都给我们带来了全新的体验。广大的硬件玩家们也喜欢学习并读懂这些东西,大都是兴趣决定了这些,同时也可以让自己做到买的清楚,用的明白。

WINFAST TNT II

RADEON 9700PRO

RADEON X1900XTX

一个3D游戏期开发:

用电脑的朋友绝大多数喜欢游戏,笔者的一位朋友在游戏公司工作,另笔者了解了下游戏初期是如何开发的:好象电影一样,一个游戏公司会有游戏的策划部,都是一些创作剧本的人,用文字来表达游戏世界的剧情和角色等等。剧本好了就发给原画设计部,原画设计人员就开始根据剧本里对角色,怪物和世界里的城堡树木等物体的文字描述来进行原画创作。当然他们也会和剧本的编写者进行沟通,辩论,据说大多都是在吵架,呵呵!人物都画好了,就该把这些原画给3D建模部门了。开始构造画纸上的3D世界,3D建模,贴纹理,后期混合等等…用专业图形学来描述呢?就是构造顶点、几何变换(Transform)、光照(Lighting) 、设定(Setup) 、光栅化(Rasterize)…

FF10 硫库角色原画

FF10 硫库的3D角色

读懂显卡评测

游戏是令人兴奋的,在由始至终,显卡在这里扮演了主角,它造就梦幻般的3D世界。但是说到显卡,不得不涉及复杂的图形学,深奥的显卡架构,这些东西往往另读者一头雾水,别说普通读者,就是玩家和小编我们又有几个能读懂呢?这篇文章借解析ATI最期的高端显卡R580和以往显卡的架构对比,给读者灌输全新的显卡架构理念,既然是“讲”就要讲得明白,令读者读懂。解析R580为次,弄清现代显卡架构才是重点。以便读者以后能够更好的读懂显卡评测,甚至是官方的PDF。这里为了让读者看懂,本文描述了很多图形学的基础。

 

第2页:是各个时期的概念变化?还一时平衡的产物?完全拆解显卡中的“渲染管线”

X1900的到来,只字不提渲染管线

北京时间2006年1月24日晚22点,X1900XTX在全球正式发布,其评测文章也如雨后春笋般大量涌出。

ATI在X1900XTX的介绍中,几乎没有任何地方提及之前NV40和R520所宣传的“渲染管线”或是“渲染流水线”,而是强调“像素渲染单元”增加了三倍。达到了48个,那么渲染单元是什么呢?ALU? 渲染管线呢,还是16条?要弄清这些,首先我们需要放弃渲染管线的说法,与其说放弃不如说是拆解,原因是这个“管线”已经开始限制了我们的一些理解。

形成体系架构观:

解惑,首先我们需要在大脑中形成一个完整的显卡的内部结构框架,尤其是处理顶点之后进入像素那部分的结构框架。

R580 体系架构图

ATI给放出的R580显卡架构图,主要分为Vertex Shader Engine和Pixel Shader Engine两部分外,还有从X800开始宣传的Setup Engine。而nVIDIA放出的架构图除了上边的VS和PS之外,还引入了ROP部分,这个概念是从NV40开始宣传的。

最早的所谓"渲染管线":

记得GeForce4 TI4200吗?那时候多是这样宣传:TI4200具有2个顶点单元;4个渲染管线,每个渲染管线搭配两个贴图单元。RADEON9700呢? 多是这样宣传:9700具有4个顶点单元;8个渲染管线,每个渲染管线仅有个1贴图单元。

公式暂时这么写:  GF TI4200=2VS+4PS*2TMU

                RADEON9700=4VS+8PS*1TMU

                RADEON9000=1VS+4PS*1TMU

抛开顶点部分(Vertex Shader Engine),那个时候的PS部分是像素单元Pixel Shader Unit和纹理单元TMU是分开宣传的。而进入R9800时期一直到NV40、R520之间,就没有人更多的议论TMU部分了,为什么呢?看完了这段答案自然揭晓。我们记得这个时期对于6800Ultra的宣传是具有6个顶点单元;16条渲染管线;16个光栅化引擎ROP。

公式暂时这么认为: 6800U=6VS+16PS+16ROP

1:1:1的比例形成:

此时的“渲染管线”这个名词正式被厂商炒作。而上面公式中的16PS也就是前面的16PSU*1TMU,即16PSU;16TMU

下面进入重点,什么叫一条“像素渲染管线”?简单点说,传统的一条渲染管线是由包括Pixel Shader Unit(像素着色单元)+ TMU(纹理单元) + ROP(光栅化引擎)三部分组成的。

公式如此表达写:PS=PSU+TMU+ROP

从功能上看,PSU完成像素处理,TMU负责纹理渲染,而ROP则负责像素的最终输出…因此,一条完整的像素管线意味着在一个时钟周期完成至少进行1个PS运算,并输出一次纹理。

现在我们需要做的就是拆开像素渲染管线来看,那么NV40和R520的PS:TMU:ROP是标准的1:1:1的关系。或许就是这1:1:1的关系形成了传统的像素渲染管线的概念。

 

注释:

1,现在我们把PS定为Pixel Shader Engine的简写即像素渲染管线;PSU则是Pixel Shader Unit或者叫Pixel Shader Processor即管线中的像素处理器单元

2,至于为什么在TI4200,R8500这两款产品会使用PS:TMU=1:2的关系,更多是出于DirectX8.0的Pixel Shader1.0/1.1 API的帧路径并不足够的灵活,对于当时的游戏和显卡而言,更多的贴图单元,弥补了在渲染中帧路径上的缺陷。而DirectX9.0的Pixel Shader2.0很大程度的解决了这个问题。所以更多的贴图单元也就没有那么必要了。由于具体涉及了复杂的图形学和DirectX知识,所以只讨论到这里。

3,上面的PS也就是Pixel Shader Processor和TMU仍可再分,在体系架构图中也有明确的标识。按照用途我们把他们看成一个单位,即像素处理单元和纹理单元。

第3页:渲染管线的定义在改变——7800并不是传统的24条流水线!

G70,GeForce7800的24条像素渲染管线并不是传统意义的24条渲染管线。我们先来看看G70的体系架构图:

G70的体系架构 图片来源GZeasy

R580的Pixel Shader Engine部分体系架构

Quad:

从NV40开始就引入了Quad的概念,意思四方的院子,可以理解为四个组成一组。ATI称为Quad Pixel Shader Core每个包含4个完全相同的Pixel Shader Processor。而R520和G70也是大同小异。就目前来看,在今后的一段时期内这种Quad像素处理器的结构显然还会继续流行下去。

传统的管线架构比例被打破

我们在G70的架构图中不难看出,其架构为6组Pixel Shader Quad,共包含了6*4=24个像素处理器。也就是24PSU;24TMU;16ROP,这样1:1:1的比例又被打破了,变成了3:3:2。

(为什么是“又”被打破?忘了刚才的TI4200啦?!)

如果按照传统的像素管线来看,这不能称为24条管线。但是如果放弃ROP部分,仅考虑PS和TMU的话,就成为了nVIDIA所述的24条管线。实际上很多事情和说法都不是呈文的规定,谁说谁有理。比如现在nVIDIA就把24PS和24TMU合称为自己的24条渲染管线。

按照这个方式写两个公式,其中画线的部分也就是它们所宣传的部分:

                      G70=8VS+24PSU+24TMU+16ROP

                     R580=8VS+48PSU+16TMU+16ROP

                 推测 G71=8VS+32PSU+32TMU+16ROP

为何不提高ROP的数量?

恐怕有读者会问为何不线性的把ROP部分也提高到24ROP呢?这样7800就成为了毫无争议的24管。nVIDIA当然想这么做!ROP即为像素输出部分,其数量要看显存控制器的规模取向。目前4×64的话就是16ROP,显存位宽是256bit,而24ROP,就是6×64,384bit位宽。32ROP就要达到512bit的显存位宽。这对目前来说还是比较困难的。所以目前,nVIDIA和ATI都相持在了16ROP。

GF7800是真正的24条渲染管线吗?至少,这个渲染管线的定义从再次变得模糊。

现在我们应该明白为什么nVIDIA宣传自己的G70会用“多少条像素渲染管线”,而ATI的则不再以“管”来做宣传,而是48个像素处理单元了巴?!

注释:

什么是ROP(光栅化引擎)?也可以称为像素结果输出处理器 负责像素的最终输出,是像素子系统,执行像素读/写操作、z-buffer检查、色彩混合、抗锯齿操作等。

第4页:现在的显卡迫切的发展方向在何处?ATI和nVIDIA已不谋而合

说道显卡的发展方向,我们先来粗略的回顾一下3D的历史,3D加速是从何而来,它又是如何发展的?

PS SS 早期的多边形3D时代:

1994年12月上市的SONY PlayStation 以每秒38万个三角形生成能力,号称当时最强的3D游戏平台。

3D物体是由一个一个的点构成的,人们称之为顶点Vertex。大家都知道三个点确定一个平面,无数个平面就可以组成一个复杂的曲面物体了。所以最早的显卡3D能力强大与否,是由三角形的生成能力表示的。记得1995~1997年游戏杂志里常说的PLOYGON吗?是的!早期显卡3D能力的强弱,多是看三角形的生成能力。

  

1994年何SEGA 土星游戏主机同步发售的3D格斗游戏 《VR战士》

说道3D加速的三角形,需要简单引入设定Setup和光栅化Rasterize两个概念,为后文铺垫。简单的说Setup决定三角形三个点的位置,然后通过光栅化Rasterize来描绘出这个三角形以及填充三角形内部各个像素的颜色,使它变成一个有色的三角形。Setup和Rasterize也是光栅化图形学的两个重要步骤。

《DOOM3》现代的纹理,材质时代:

多边形就一个固定的颜色,光秃秃很不好看,《VR战士》就是个不错的例子。为了让这些3D人物更好看,人们觉得给这些多边形上贴上图片,来体现更多的细节,这是个好主意,这样纹理的概念出现了,纹理也就是贴在多边形上的图片。

之后,这纹理的学问就越来越复杂,这么多图片,信息的寄存问题;怎么对应的贴在相应的多边形上?如何和屏幕上的颜色混合起来?从不同的角度看,图片变形而导致的不真实问题怎么处理?等等 等等,问题虽然一大筐,但我们的3D世界确变得越来越漂亮。是的,纹理真是个麻烦的好东西!

把3D游戏引入大材质时代的代表作《DOOM3》

上图可以很容易的看出,纹理和材质所带来的视觉效果是翻天复地的。渐渐的,当图形卡的顶点处理能力到达一定程度的时候,业界一致认为以像素和纹理的重要性要超越顶点了。从这个时候,nVIDIA和ATI也早已开始对自己GPU在Pixel Shader Engine方面进行重点加强。一直以来,他们的宣传也都是以PSE为重心的。

 

“超”线性增长的像素处理

上面得知,光栅化图形学是以运算为基础的,而处理的单位就是像素。光栅化的过程如果看作是n个相关像素运算,那么每个像素会在现今的游戏中会不止一次的被计算吗?答案是肯定的,举个常用的例子:在游戏中像素被光栅化并输出,但如果打开AA,那么会有像素要被重新采样,计算,设定。那么这个像素在一个周期里就被几次运算了,但只做了一次贴图。在如今各式各样的Shader运算上,ATI认为像素处理的重要性已经高过了TMU部分,它们可以不在1:1的线性增长了,于是R580诞生了……

实际上nVIDIA,的G70 24PSU+24TMU和即将发布的G71 32PSU+32TMU来看,nVIDIA同样把重点放在了PSU和TMU部分,显然,nVIDIA认为线性的增加他们两者的比例也很重要。放开这不同所带来的争议,增强PSU的数量,也就是增强像素处理器的运算能力已经是nVIDIA和ATI所达成的共识。

不同的仅是以1:1的比例线性的增强的PSU和TMU,还是在保持TMU不变的情况下,成倍的增加像素处理器的数量。但不可否认,PSU的作用已经超过了TMU。

看一些ATI PDF中发布的研究结果:

根据ATI的研究,在2001年刚刚出现具备像素着色器的显示卡时,当时游戏的像素着色器程序中算术指令和纹理指令数量的比例在1:1左右,之后,算术指令的数量呈显著增加之势。在2005年,游戏中每个像素的平均着色器程序指令数目是30条,算术指令和纹理指令数量平均比率达到了5:1,也就是说现在的像素着色器程序中,平均每5条算术指令才会出现一条贴图指令,而这样的算术指令数量急剧增长趋势仍将继续保持下去。

 

注释:

材质:经过光照,混合屏幕上原有的颜色,等一系列处理的纹理

早期的纹理尺寸仅有128×128像素或更小,而在《DOOM3》为例的游戏中,纹理逐渐发展到了1024×1024甚至更大

第5页:深入探究,再度挖掘X1900相对于X1800的架构改进

如果觉得R580 PS=48PSU+16TMU+16ROP概念还是有点模糊,那么带着上文观点,再来看看R580和R520的架构图,这里仅论述PSU和TMU部分,ROP暂不讨论。

R520和R580的架构:

R520

现在规类,R520 PSU部分包含Ultra-Threading Dispatch Processor(极多线程分发处理器)和4个Quad Pixel Shader Core;TMU部分相关包括有Texture address Units和Texture Units。其中4个Quad Pixel Shader Core共计16个Pixel Shader Unit。再来看R580:

R580

ATI的R580架构图细化了很多,我们看见的是成大量增长的Quad Pixel Shader Core,达到了12个,共计48个Pixel Shader Unit。随之还线性增加了General Purpose Register Arrays,可以看作是Pixel Shader Unit计算之后的寄存器队列。而TMU部分部分显然没有什么变化。

R580 48个PSU即96个ALU

经过ATI给予R520和R580 PDF的对比,他们的Pixel Shader Unit没有什么架构上的变化,每个PSU包含ALU1和ALU2两个数学运算器和一个分支执行单元。两个ALU分别用于加法,乘法和承加等运算,分别处理不同的向量和标量。其中全功能的成为Main ALU,而只能运行加法的称为Mini ALU。既然一个PSU包含两个ALU,那么R850的PS部分,一共有96个ALU!而并非笔者早先的48ALU的错误观点。

现在您应该已经经脉打通,了解这第7代,不,第8代?图形卡是怎么一回事了巴?!

注释:

Ultra-Threading Dispatch Processor(极多线程分发处理器):在功能上这些处理器组和内部ALU都由ATI X1000系列刚刚引入的Ultra-Threading Dispatch Processor来进行任务分配,他会智能寻找时机重新分配任务给不同的ALUs。以保证每个ALUs都能满负荷的进行工作,并提高效率。

第6页:简述本文的四个观点,不同的发展方向由未来的3D游戏来检验

最后用几句话来论述本文的观点:

1,渲染流水线或者渲染管线定义从来都是模糊的,不同时期的它们都不曾相同,或许只是厂商的宣传手段,为了让我们更清楚的理解显卡架构,现在是应该放弃这个“管”的时候了。

2,ATI推出的X1900系列显卡,3倍增强了目前显卡中VS/PSU/TMU/ROP四大架构中最急需增强的像素处理器PSU部分,打破了传统比例,是对未来游戏的展望。改进也是革命性的。

3,现阶段,Ultra-Threading Dispatch Processor;48个PSU带来的超前像素运算能力;16FP HDR+AA ;AVIVO VIDEO ;Hierarchical Z的改进和Fetch-4等相对的技术优势,给予了X1900XTX高效而强大的王者地位。

4,G71的32PSU 32TMU和R580的48PSU 16TMU诠释了线性和非线性的PS架构发展方向,到底谁主沉浮,还需要用未来的游戏来检验!

 

Advertisements
此条目发表在3D图形分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s