通过g80和r600看显卡的发展方向(个人见解,请高手指导)
通过g80和r600看显卡的发展方向
我们来深入两者的核心设计。g80的关键设计在于它强大的线程调度器,g80的线程管理调度器被命名为GigaThread,从前缀“Giga”我们就可以感受到它强大的调度能力和充沛的资源。G80将128个Unified Streaming Precessor(通用流处理器)分成8组,每组称为一个“TPC”,每个TPC有2个线程和分支管理调度器(Multiprocessor),每个Multiprocessor都具备有16KB的On-Chip Shared memory,总共16个Multiprocessor被一个宽度超过2000bit的Crossbar网络连接起来。G80的Multiprocessor把每份data都用一个Thread管理,每个pixel,每个vertex都算成一个Thread。通过On-Chip Shared memory(片上共享缓存),G80能以32个pixel或vertex(2TCP 32SP)为一个warp(Thread切换的基本单位,可以理解为像素阵列)来切换Thread。每个TCP内都可以混进任意不同的VS、PS指令。为了保证流水线足够的平行性。而r600的设计似乎是r580和xenos的结合体,r580优秀的设计是相当不错的,也是x1900系列以及衍生核心如此长寿的原因,特有的ringbus使得核心和显存之间交换数据得到优化,也是为什么r600系列中再次加强了ringbus,内部1024bit的带宽,r600的设计思路是为了再次加强Performance = Frequency * IPC(Instruction per cycle,每周期指令吞吐数)这是历来GPU发展的动力源泉,因为从根本上说,提高GPU性能的主要途径就是进行并行的执行数据。GPU任何其他资源的变化,比如更多的pipeline(平行管线),更多的thread,额外的cache,都是为IPC这个指标服务的。从NV10到G80和R600,即使GPU本身发生了脱胎换骨的变化,但它们赖以提升性能的设计思想依然如此。R600的架构可以拆分为以下几个模块:Command Processor(指令处理器),Setup Engine(装配引擎,)Ultra-Threaded Dispatch Processor(超线程分配处理器),Stream Processing Units(流处理器),Texture Units(纹理单元及缓存),Cache & Buffer(缓存及缓冲区,)Shader Export & Render Back-Ends(像素输出部分),Memory Control(显存控制器)。
我们再来看看两者的流处理器设计,g80的每个流处理器都是一个标量的alu,和register file紧密相连,每4个流处理器对应着一个sfu(特殊功能单元),而r600还是源于simd的矢量设计,拥有着64个Stream Processing Units,它依然是传统的SIMD架构,但不能简单地认为它拥有64个流处理器,因为R600的每个Units内部包含了5个超标量ALU;g80通过强大的线程管理调度器实现了空间上的指令并行性,将所有指令不管什么类型的2d或是4d全部拆分为1d的进行处理;而从r600的核心可以看出来,Branch Execution Unit(分歧执行单元)进行流控制和条件运算,BEU获得指令包后将会安排至它管辖下5个ALU执行;从两者的核心来看g80的设计表面上来看远远没有r600复杂,但是深入其tpc和 Multiprocessor的设计来看,设计的复杂难度并不小,g80的核心就在于其平行线程的tpc,靠其强大的片内缓存来维持庞大的线程,然后将其交给128个标量alu,而r600的能源核心在于其Ultra-Threaded Dispatch Processor(超线程分配处理器)和BEU,Thread Processor集成了三个指令队列,分别为顶点、几何及像素,这也就是GPU最常见的三种渲染操作,从Setup Engine流出的数据在此汇集排队,并且根据不同的程序动态分配三种Shader的比例,比较常见的情况就是像素>顶点>几何。Shader指令分配完毕就开始等候仲裁器指定相应的单元进行处理。自x1000系列开始,线程分配器和ringbus就给显卡提供了较高的带宽和极低的延迟;在纹理处理方面,两者又有着根本的不同,g80的ta和tf单元和流处理器一样受tpc的管理,有着独立的L1和L2,而r600同样的受着线程分配器的控制,所不同的是两者对于纹理单元的设计由于g80的ta和tf单元受Multiprocessor的管理在此就不再讲解,r600的纹理单元和r580相似,外至于大量的流处理器单元,却和环状总线紧紧相连,这是自r520和r580所类似的,这次r600对于纹理单元的设计有了很大的改变,虽然和g80一样都有着相对独立的L1和L2,但是在内部设计上,不同的控制单元享用的纹理单元数量也不同。
现在来看,g80和r600完全不同的设计毫无疑问都是先进而强大的,nv的科学家在充分研究未来游戏发展情况后才创新的使用mimd超标量的设计,而amd-ati则利用r580优秀的设计,继续提升co-issue的效能,上文说过,amd-ati追寻的是每周期指令吞吐数;通过两者后续的衍生产品来看,g80的架构无疑是成功的,9600gt拥有64个流处理器,是g80的一半,但是其对应的对手确是拥有320个流处理器的3850还有更高频率的3870,从这里就可以看出g80所蕴含的威力,在规格的比较上,对比GeForce 8800GS,GeForce 9600GT在流处理器上有一定缩减,另外由于G94架构仍然采用流处理单元绑定纹理单元的做法,因此,纹理单元也只有32个,不过16个ROP单元与256Bit的位宽是GeForce 8800GS所不具备的,在抗锯齿模式下GeForce 9600GT将拥有更好的性能。而3850可以在拥有320个流处理器的情况下报出1k左右的价格也确实说明了amd-ati的实力,我个人认为这么低的价格不光是amd-ati的市场运作的影响,重要的是r600所特有的架构,RV670虽然外部总线缩减到了256bit,但是由于保留了512bit的环状总线,因此性能表现上则与Radeon HD 2900相当。
从g80和r600的架构来看真正优秀的产品并不是8800gtx和2900xt而是相同架构衍生出来的8800gt和3870;从g80架构来看,大量的晶体 管用在片内缓存中,通过tpc来实现平行处理大规模的线程,4个1D标量ALU和1个4D矢量ALU的运算能力是相当的,但是前者需要4个指令发射端和4个控制单元,这也是大量的晶体管存在的原因。同样的,r600的大量晶体管不光在320个流处理器上面同样在大量的缓存上面:超线程分配处理器配备了独立的着色常数缓存和指令缓存,纹理缓存(Texture Cache)部分,顶点缓存(Vertex Cache),颜色缓存(Color Cache),深度缓存(Depth Cache),模板缓存(Stencil Cache),显存读写缓存(Memory Read/Write Cache),数据流输出缓冲(Stream Out Buffer)。可见不管是simd还是mimd,发展的方向全部在gpu在一个周期里面执行指令的数量和效率,但是我觉得两者完全走的有点过于极端,g80为了提高单周期指令执行效率而大幅度增加片内缓存和alu的数量,其频率大大的高于gpu核心频率,r600为了使大量的指令得到最高的优化不惜内建320个流处理器同时为了提高其效率,在各个相关模块之间有着大量的缓存,包括其威力惊人的ringbus。我始终看好r600的co-issue,但是r600的矛盾在于过多的流处理器,虽然有着强大的线程处理器和BEU,但是就算可以执行打包后的各种相结合的指令,就算有着大量的寄存器和缓存来实现时间上的共同运算,效率还是在g80的超标量alu之后,之前也说过g80的超标量alu虽然效率上很高,但是代价是同样的,这就是为什么在其衍生产品的成本不好控制,远不如g71和g73控制的好。
由于gpu先天性的适合于平行处理,所以gpgpu才应运而生。Nv和amd-ati都宣布自己的gpu适合通用计算,这是没错的,不论是320个海量的流处理器还是全部标量的alu,g80和r600都是最合适的,但是未来的显卡发展方向在我看来不会是像g80和r600那样极端化;在我看来显卡的发展趋势应该是:1,高效的线程平行话(加大流处理器以及纹理处理器方面的片内缓存和gpu和显存之间的数据交换);2,更快速的显存数据交换(r600之所以沿用r520和r580以来的环形总线,就是为了有效的掩盖gpu和纹理数据之间很高的延迟,而g80同样是如此所以才有了高效的Multiprocessor,co-issue是我认为不错的选择,如果其有着像g80那样的tpc控制我想是会有不错的效果的);3,协处理器的加入(从ps3发布我就开始关注cell处理器的资料,cell的创新在于高效的协处理器,协处理器这个词并不陌生,早在奔腾时代就早已出现,协处理器有着模块化和高效高速的有点,弱点是功能过于单一,但是gpu的高度平行话和超高的数据带宽确实天然的优势,cell也正是看中了这一点才能成为性能最强的游戏机的吧~);4,可编程性(直是gpu所苦苦追求的,GPU咄咄逼人的态势已经延伸到了科学计算以及视频编码等非3D图形领域。ATI显卡在这方面的表现非常出彩。dx的一次次进步,vs,gs,ps的出现,shader和sm4.0的飞速发展不正是最好的证明?);5,低延迟高频显存(显存是显卡上除了显示芯片之外最为关键的核心部件,它的频率、位宽及容量大小直接关系到显卡最终的性能表现。显示核心决定了显卡的功能和其基本性能,而显卡性能能发挥出理论值基数的百分比则取决于显存,两者密不可分,出众的显示芯片最终需要依赖强大的显存来发挥其实力);6,先进的高清格式解码单元(Purevideo HD和uvd解码单元已经是现在显卡不能缺少的一项技术,随着电脑进入千家万户的客厅,高清解码成为显卡能力的另一项衡量标准);7,先进的抗锯齿模式(对于提供精美游戏画质的显卡来说,锯齿一直是历代显卡不断挑战的项目,抗锯齿的效果好坏已经成为显卡核心是否先进的保障之一);8,更精细的3d模型建立(TessellATIon技术是一种超越了DX10标准的技术,这种技术并不是DX10标准中规定图形芯片必须具备的一种技术,该技术可以将一个多边形拆分成为多个多边形。而这个过程都是可以由编程来控制的,这样就很好的解决了效率和效果的矛盾);9,逼真的物理效果(物理加速是最近兴起的技术,也是游戏挑战真实不可缺少的一部分,nv收购ageia和Havok之后我们不难看出未来游戏的道路);10,智能的电源管理(功耗一直是困扰高端gpu,cpu的主要问题,半导体工艺的不断更新已经不能满足人们对性能和功耗的双重要求,智能电源管理才是目前我们应该主要追寻的)。
多核心和多卡并联是一种有效提升图形系统能力的有效办法之一,sli和corssfire是nv和amd-ati的两种多卡并联的解决方案,但是近些年人们对于功耗的要求使得多卡并联只是游戏发烧友的最爱,多卡并联系统并没有走进普通的计算机用户身边,所以应运而出了nv的智能sli和amd-ati的混合交火,两者的相同之处在于支持独立显卡和主板集成显卡的并行工作,同时加强了智能电源管理系统,在系统处于非满负荷运算的条件下自动关闭其中的任何一个图形处理器来达到节省能源和减少功耗的效果(关于智能sli和混合交火的详细介绍在网上早已有介绍再次不再复述);单卡多核心是一种使用桥接芯片来使两个图形核心并行工作来提升处理能力,此前各GPU设计公司都遇到一个瓶颈:即单颗GPU的性能受到成本、生产工艺、频率的限制而无法提升太高,如1950XTX、7900GTX等显卡为了达到尽可能高的性能不惜工本的提升运行频率,核心都超过650MHZ,导致板卡周边成本非常高,两者的PCB都是12层,电源都使用了顶级产品以便提供超过100安培的峰值电流,外加巨大的铜风扇,光这些零件的总成本就接近100美元。单卡多核心在技术上主要有两种实现方法,一种为单pcb集成两颗gpu核心,另一种为双pcb使用连接桥来实现双核心并联,设计难度最大的应属前者也就是单pcb多核心方案,难度主要集中在首先在单pcb上集成多个gpu核心光是gpu的针脚数就足以令各个显卡制造商为之止步,庞大的针脚数对pcb层数的要求是巨大的,其难点在于线路之间的电磁干扰;其二是多核心的和大量显存的供电要求,小型电源元件如何满足两颗功率惊人的gpu芯片以及桥接芯片、大量显存的巨大功率要求,MOSFET体积同样无法控制,难以小型化,为了解决这个异常矛盾的问题,显卡研发人员必须花费不少的时间来优化电源设计解决方案,经过多种排列组合才能达到理想的效果;同时为了满足游戏发烧友和大型工作站的要求,单pcb多核心的显卡必须在体积上也得加大控制,因为必须考虑到组成多卡并联的情况,这无疑是对显卡设计团队的严重考验。
本文至此想读者阐述了下阶段顶级显卡架构和不同架构之间的异同处和各个架构的优缺点,根据g80和r600的核心架构的分析预测了未来一段时间内显示卡的发展方向,从本文我们不难看出显卡核心的各种先进技术联系是相当紧密的,一颗先进的gpu核心就像是一个完整的系统,任何一个模块的瓶颈都将影响到整个核心以及显卡的工作效率;先进的设计思路是显卡核心的灵魂,完美的解决好gpu核心内部各个模块之间的搭配是nv和amd-ati一直以来追求的方向。
[ 本帖最后由 yangjunfeng 于 2008-3-19 15:49 编辑 ]