论文部分内容阅读
GeForce 8的到来,将计算机图形带入一个全新的领域,统一渲染代替分离渲染成为未来的方向,而独特的超标量流处理器设计也给GPU带来新鲜的气息。
11月9日,nVIDIA推出GeForce 8800 GTX/GTS图形处理器,拉开了GeForce 8(开发代号G80)时代的序幕,而nVIDIA也在新一轮的竞争中将AMD-ATI落下一个季度,后者的R600要等到2007年1月30日方能推向市场。GeForce 8最吸引人的地方在于,它是nVIDIA首款采用统一渲染架构,并开创性地引入流处理器的设计,使得GeForce 8获得了近乎翻倍的效能提升;同时,GeForce 8架构支持微软DirectX 10 API,这让它可以成为面向未来的图形开发平台。尽管我们尚不知晓AMD-ATI R600能够带来多高的效能,但它要超越nVIDIA的GeForce 8绝非易事。nVIDIA对于GeForce 8显然也有足够的自信,GeForce 8的主旨定为“Reality Redefined(重新定义真实)”,强大的渲染性能让它可以胜任1600×1200以上的高清3D游戏,将计算机三维视觉带入全新的境界。
GeForce 8的物理规格
GeForce 8的强大性能是以高晶体管集成度作为基础的,我们知道,上一代GeForce 7800晶体管总数为3.09亿个,比现在的Core 2 Duo处理器还要多出1000万个;后来nVIDIA对电路进行优化设计,推出的GeForce 7900系列将晶体管数量降低到2.78亿个,但这个数字仍然是十分可观的。但刚推出的G80拥有高达6.8亿个晶体管,集成度比GeForce 7900高了两倍不止,同时也比英特尔四核心的Core 2 Quad处理器多出一亿个晶体管,G80也因此成为集成度最高的PC半导体芯片。显然,G80的高集成度意味着成本高昂,nVIDIA为了保证G80能拥有足够高的生产良品率,仅采用台积电90纳米工艺进行制造。虽然80纳米工艺在图形芯片领域开始流行,相应的芯片拥有更出色的电气性能,但nVIDIA并没有冒险,毕竟G80芯片过于复杂,而台积电80纳米工艺还难以提供令人满意的良品率。面对此种情况,继续采用保守的90纳米工艺无疑比较务实。G80的最高功耗为145瓦,基本上创下了显卡的最高纪录,而显卡也因为供电模块的需要,整卡的长度达到32厘米。为了解决散热需要,G80系列显卡都被一块体积硕大的散热器所覆盖,但nVIDIA将风扇噪音控制在很低的水平,即便在高负载状态下也能保证安静运行。
以高晶体管集成度作为依托,G80拥有相当强悍的硬件规格:它采用统一渲染架构设计,拥有128个可执行3D渲染任务及其他可编程指令的流处理器(Stream Processors),内置24个ROP单元,最高支持384位,86.4GBps带宽的GDDR3显存,这些指标让G80最终可拥有极其惊人的效能。nVIDIA先期推出两款G80核心的显卡产品,分别为定位发烧市场的GeForce 8800GTX和稍低定位的GeForce 8800GTS,前者拥有128个流处理器和24个ROP光栅处理单元,GPU核心与纹理单元都工作在575MHz的频率上,但流处理器则是在1.35GHz的高频下工作。这种设计非常特殊,因为现有任何GPU产品的核心与渲染单元都运作在相同的频率上。相比上一代GeForce 7系列,GeForce 8800GTX的显存位宽也扩展到384位,由以64bit为单位平均分成6组,每组对应两枚64MB容量、1.8GHz频率的显存,这样GeForce 8800GTX事实上就拥有768MB容量、86.4GBps带宽的显存系统,这也创下了单卡显存规格的最高记录。而8800GTS属于8800GTX的缩水版,无论GPU还是显存的规格都下滑了一个档次,如8800GTS的流处理器数量降低到96个,ROP光栅处理单元也下降到20个,另外GPU核心/纹理单元工作频率为500MHz,流处理器频率则为1.2GHz;8800GTS配备的显存具体规格为320bit位宽(5×64bit构成)、1.6GHz,带宽64GBps,而显存的总容量也降到640MB。尽管如此,你仍然会发现8800GTX与8800GTS两款GPU产品的晶体管总数并没有什么差别,它们其实是在同一个生产线生产出来的产品,只不过那些电气性能高,能达到高要求的芯片被定型为8800GTX,而部分未达要求,但屏蔽部分流处理器并调低规格后仍能正常运行的产品被定型为8800GTS。这种方案不仅可提高产品的良品率指标,而且满足不同的市场需求,因此在图形业界被广泛采用。
为了进一步提高在图形领域的市场份额,nVIDIA采取极富进攻性的价格策略:GeForce 8800GTX零售价为599美元,8800GTS零售价为499美元。这个价格比一台PS3游戏机更贵,但它具有比PS3中RSX图形芯片高出一倍不止的卓越性能,同时又比一枚旗舰处理器更便宜。相比之下,ATI Radeon X1950XTX显卡的售价也要449美元,但作为上一代产品,它的性能远难以同nVIDIA GeForce 8800系列相提并论。而GeForce 8800带来的不仅仅是令人惊叹的效能,更在于它所采用的统一渲染架构以及DirectX 10支持,架构的灵活性让GeForce 8800可以承担物理运算任务,并拥有极为出色的物理处理性能,此外DirectX 10支持让GeForce 8800能够渲染出更具真实感的三维游戏画面。事实上,GeForce 8800是目前唯一一款可以在1600X1200以上高清分辨率下流畅运行3D游戏的图形产品,这也是nVIDIA将GeForce 8定调为“真实重新定义”的主要原因之一。
设计架构与简要原理
GeForce 8完全基于统一渲染架构设计让许多分析家大跌眼镜。因为在第一代Xbox游戏机同微软合作之后,nVIDIA与微软就分道扬镳,一方面的原因是nVIDIA不满微软将芯片价格压得过低,另一方面nVIDIA并不认同微软对未来图形API的发展方向—在DirectX 10体系中,微软创造性的提出了“统一渲染架构”的概念,所谓统一渲染,即GPU中不再有单独的顶点渲染单元和像素渲染单元,而是由一个通用的渲染单元同时完成顶点和像素渲染任务。为了实现这一点,图形指令必须先经过一个通用的解码器,将顶点/像素指令翻译成统一渲染单元可直接执行的渲染微指令,而统一渲染单元其实就是一个高性能的浮点/矢量计算逻辑,它具有通用和可编程属性。相比DirectX 9之前的分离设计,统一渲染架构具有硬件利用效率高以及编程灵活的优点,让3D游戏开发者和GPU设计者都获得解放—这一点应该不难理解,因为任何一个3D渲染画面,其顶点指令与像素指令的比例都是不相同的,但GPU中顶点单元与像素单元的比例却是固定的,这就会导致某些时候顶点单元不够用,像素单元大量闲置,某些时候又反过来,硬件利用效率低下;而游戏开发者为了获得最好的运行效能,也不得不小心翼翼地调整两种渲染指令的比例,微软认为这种情况限制了图形技术的进一步发展。
nVIDIA一开始并没有认同这套设计,它认为分离设计让顶点单元和像素单元更加专注,具有更高的硬件执行效率,统一渲染架构并不是特别必要。nVIDIA官方人士在不同时间,不同场合都表达过这种看法,并透露G80仍采用分离渲染设计,但可对DirectX 10提供完整支持。最终的结果出乎人们意料:G80完全是一款基于统一渲染架构的图形产品,nVIDIA之前的行为看起来像在放烟幕弹。而nVIDIA全盘接纳统一渲染架构,也意味着统一渲染将成为未来图形业新的起点.我们先来看看G80的逻辑架构图,如图2,图形指令被解码为汇编指令后进入线程管理器,线程管理器将指令分派给不同的渲染集群(即渲染管线)—G80共有8个渲染集群,每个集群都是由16个流处理器(内部再平均分成两组)、4个纹理地址单元以及一个L1缓存构成,这样G80就总共拥有128个流处理器和32个纹理地址单元,流处理器负责完成顶点/像素渲染任务,输出的结果会由一个交换器分配给6组ROP光栅处理单元进行处理,每个光栅单元又包含4个ROP,这样G80事实上就拥有24个ROP处理单元。每一组ROP单元都对应一个L2缓存,它与渲染集群中的L1缓存以及显存相连。同样,L2缓存与显存分区一一对应:G80的显存系统被平均分为六个分区,每个分区为64位宽、128MB容量,这个数字显然是非常可观的。
我们进一步来看G80的详细逻辑图,如图3,我们可以看到,G80的线程管理器实际上由顶点线程,像素线程和几何线程三个指令分派单元构成,分别负责顶点指令、像素指令和几何处理指令的解码和分配,顶点和像素指令都比较容易理解,几何指令则是DirectX 10新增的部分,它允许GPU单独创建出新的对象,而无需CPU的帮助。在现行的DirectX 9体系中,三维渲染都是依照顶点、像素和ROP光栅处理的程序顺序进行的,GPU本身只能被动接受指令并进行处理,而不具自主性,任务分配都来自于CPU。倘若游戏需要创建新的对象,CPU就会接管这个工作然后将渲染指令传送给GPU处理。为了获得更出色的性能,DirectX 10引入了几何处理的概念,赋予GPU具备单独创建对象的能力,进一步减轻了图形系统对CPU的依赖。而由于统一渲染单元的通用属性,几何处理仍然由它来完成,只不过GPU必须引入相应的几何线程分派器,负责对几何指令进行解码。几何处理机制 的引入,使得DirectX 10体系的GPU具有更完整的图形处理能力,同时也显著提升了游戏特效的视觉表现力,如dynamic cube maps(动态立方体贴图)、displacement mapping(置换贴图)、stencil shadows(模板阴影)等技术都需要由CPU来生成新的对象,而在DirectX 10体系中,GPU自身即可单独完成画面渲染,这将使得游戏的效能更加出众。
超标量流处理器
统一渲染架构让G80拥有弹性的架构和全面的图形渲染功能,但G80拥有高性能的秘诀则在于它的128个流处理器设计。流处理器(Stream Processors)是渲染集群中最基本的计算单元,所有的图形渲染指令(包括顶点、像素和几何指令)都是由流处理器运算并输出。从图4中我们不难看到,G80的流处理器实际上是以每组8个被平均分成16组,分别隶属于8条统一渲染管线,而每组流处理器又与纹理地址单元和L1/L2缓存相连,构成一个完善的通用渲染单元。这套设计的最大优点就是具有极其出色的并行能力:G80的渲染单元非常灵活,可以根据任务需要进行随意分配,这样就能保证硬件利用效率的最佳化。例如图形指令被送到G80的流水线后,会首先由线程管理单元进行先期处理,线程处理单元将所有的渲染指令分解为超过1000个并行的微指令线程,并对整个渲染集群进行监控—一旦发现某些渲染单元处于限制状态,就立即分配一个线程供其执行,这样整条渲染流水线就不会有任何资源闲置的情况发生。
流处理器架构保证了硬件资源的高利用率,不过它更大的意义在于具备极强的并行效能。我们知道,现有GPU产品一般采用多线程机制来实现并行协作,但多线程机制要求每一个线程的状态信息都必须保存,为此不得不额外设计相应的电路逻辑,导致晶体管规模大幅上扬。而G80的流处理器架构通过L1/L2缓存来暂存状态数据,其他流处理器通过L1/L2 Cache即可快速将这些数据读出并作后续的处理,借助这样的机制,G80中的流处理器被联结为一个有机的整体。但真正具有革命意义的地方在于,G80的流处理器不再是针对矢量设计,而是采用超标量设计。我们知道,3D图形渲染中的指令绝大多数都是矢量类型,只有少数指令为标量类型,例如像素所在位置由X、Y、Z三个坐标组成,像素自身又是由RGB和Alpha通道来描述,这些数据都属于矢量范畴。为了提高效能,过去所有的GPU产品都采用SIMD单指令流多数据架构,例如4D设计的SIMD单元只有一个指令端口,但却能同时吃进四个通道的数据流,这样就能够在一个周期内完成4D矢量指令的处理。SIMD单元能够有效提升GPU的矢量处理性能,但相对,SIMD在执行标量指令时效能较为低下,在面对标量指令时,4D SIMD单元的效率就会下降到原来的1/4。为了缓解这个问题,nVIDIA和ATI都采用混合型设计,如ATI R300就在像素单元中引入3D+1D的架构,允许同时对矢量指令和标量指令进行处理,nVIDIA NV40则支持2D+2D和3D+1D两种模式,但仍然无法解决执行标量指令效率低下的问题,尤其是一旦遇上分支预测的情况,SIMD在矢量处理方面高效能的优势将会被损失殆尽。
在开发G80的过程中,nVIDIA的科学家对图形指令的结构进行深入的研究,它们发现标量数据占据的比例逐年提升,如渲染单元坚持SIMD设计将会遇到效率难题。nVIDIA在G80中作出了大胆的改变:流处理器不再针对矢量设计,而是完全基于超标量设计,所有的矢量代码会被自动转成标量代码加以执行。nVIDIA表示,这个转换过程需要耗费的硬件资源非常有限,但最终可以实现100%的运作效率,无论矢量指令还是标量指令都能够以极高的效率被流处理器执行。理论上说,G80的128个标量流处理器的实际性能可以达到32个4D SIMD单元的两倍,使之非常适合于复杂的3D渲染任务中,如在游戏《Procedural Fire》中,GeForce 8800GTX的性能表现达到7900GTX和Radeon X1950 XTX的4倍以上,但后两者拥有GeForce 8800GTX 72%的浮点性能,落后的原因主要在于GeForce 7900GTX和Radeon X1950 XTX执行标量和分支指令时效率低下。
在具体的运算力方面,G80的流处理器亦表现不俗,它在每个时钟周期内都可同时执行一个连加(MAD)操作和连乘(MUL)操作,因流处理器工作在1.35GHz的高频下,因此G80的浮点计算性能就达到345.6GFLOPS的高水平。除了可执行32位浮点的图形渲染外,流处理器还可支持64位浮点和双精度计算,这些特征让G80的渲染单元具备通用计算的能力—包括物理计算、几何渲染、影像编解码甚至是科学计算。目前nVIDIA已经有一个名为“CUDA(Compute Unified Device Architecture)”的GPGPU(General Purpose GPU,通用计算图形处理器)解决方案,所谓通用计算图形处理器,即利用GPU的可编程性让GPU去处理3D图形以外的计算应用,例如前面提到的物理运算、有限元分析、视频/音频编码解码、流体模拟等等,在这些任务中,GPU的实际性能可比目前顶尖的四核处理器都快出数十倍。
GeForce 8的其他技术特性
统一渲染架构、超标量流处理器设计让G80获得惊人的图形效能,但除此之外,G80还有大量的新颖技术特性,DirectX 10支持、Lumenex引擎、Quantum Effects技术与Early-Z技术就是其中的典型代表。
DirectX 10:为未来游戏打下基础
DirectX 10最核心的改变就是将Shader Model从3.0提升到4.0版,Shader Model 4.0的各项规格都有了持续性的改进,例如渲染指令数量从3.0版规定的512条增长到64K条,程序员可以更加随心所欲地构建高度逼真的3D场景,暂存器的数量也从32个提升到4096个,支持的纹理数量也从16个增加到128个。同时Shader Model 4.0的数据流控制机制抛弃了之前的动静结合方式,完全采用动态方式,这些方面的改进都让游戏开发者拥有更广泛的空间。同样在DirectX 10中,HLSL(Higher Level Shading Language)语言也得到升级,如常量缓冲数量从256个猛增到4096个,并实现渲染资源的广泛共享—如某个图形对象在顶点渲染项目中作为几何数据,同时在像素渲染过程中又能够作为纹理使用,而之前的HLSL 9就没有这么灵活,顶点渲染与像素渲染过程迥然分离。当然,HLSL的升级也是为开发者提供便利。
除了程序支持方面的改进,DirectX 10还带来了大量的视觉特效技术,如阴影帖图过滤(Shadow map filtering)、多采样子纹理访问(Access to Multi-sampling Sub-Samples)、Alpha to coverage、下一代引证(Next Generation Instancing)、每像素置换帖图(Per-Pixel Displacement Mapping)等等,开发者通过灵活运用这些技术,可以开发出画面更具真实感的3D游戏。
Lumenex:反锯齿技术的改进
反锯齿技术可以有效提升游戏画面的质量,但这往往是以大幅度牺牲性能作为代价。在G80体系中,nVIDIA引入了一套名为“Lumenex”的反锯齿引擎,它包含新颖的CSAA(Coverage Sampling Antialiasing)反锯齿技术、HDR高动态范围和各向异性过滤等三个部分。其中,CSAA在常规反锯齿技术基础上新增 了几何取样和范围取样两项技术,同时也引入了8X、8XQ、16X和16XQ等四种新的多重取样模式。由于算法的改良,CSAA技术拥有非常出色的反锯齿效能,如在开启16X CSAA模式时,游戏性能与开启传统的4X MSAA相当,但16X CSAA的画面质量远优于后者。其他的8X/8XQ与16XQ也是类似的情况,称CSAA为当前最优秀的反锯齿技术并不过分。不过CSAA也有不足,例如在部分大量使用模板阴影(stencil shadow)效果的游戏中,CSAA模式就无法正常开启,遇到这种情况我们只能使用传统的MSAA技术。
Lumenex同时解决了HDR与反锯齿技术冲突的问题。HDR技术允许GPU在生成对比度强烈的画面时保持一流的暗部细节,但如果开启HDR功能,反锯齿技术就无法运作,二者只能取其一。而G80的Lumenex引擎克服了这个障碍,它可支持FP16/FP32 HDR和反锯齿功能,这样在HDR模式下,游戏画面的渲染也能够从反锯齿技术中受益。由于HDR和反锯齿都对硬件要求极高,寻常的GPU难以在该模式下保证游戏的流畅进行,但拥有128个流处理器的G80可以轻松做到这一点。
Early-Z:高效剔除无用渲染
目前所有的GPU都支持隐面去除技术,所谓隐面去除,指的是将那些没有在屏幕上形成显示的渲染任务事先剔除,这样GPU的负担就大大减轻,达到提高渲染性能的目的。为了达到这一目的,现有GPU产品普遍借助Z缓存(Z-Buffer)技术,Z缓存暂存了参照点的深度信息,GPU在处理某个像素时,会将其深度值与Z缓存中的深度值作比较,只有那些深度值最小的像素点才进入下一阶段的渲染操作,深度值较高的像素点不会形成显示输出,因此被抛弃不作处理。
Z缓存显著降低了GPU的渲染工作量,但这项技术并不完美,虽然它可以将无法显示的信息剔除,但这些信息之前已经经过整个渲染管线,占用了许多资源,倘若能够在渲染工作开始前将其剔除,无疑能够进一步提升硬件效率。在G80中,nVIDIA引入一项名为“Early-Z”的技术,借助专门的算法,GPU会在像素进入渲染管线之前就判断其价值,倘若判断为无用信息,那么就将其忽略。nVIDIA表示,G80的隐面去除性能比上一代产品提升了4倍,带来的性能增益非常可观。
Quantum Effects:让GPU执行物理计算
前面我们提到过,G80的流处理器架构可以让它完成物理计算任务,为此,nVIDIA为G80加入了一项“Quantum Effects Technology”物理加速技术。Quantum Effects实际上是一个介于驱动程序和GPU硬件之间的运算层,它负责接收物理计算指令,并将其转换成为G80流处理器可处理的微指令,借助128个流处理器的强悍效能,Quantum Effects可以支持包括爆炸、火焰、烟雾、水波在内的物理效果模拟。由于G80的浮点性能比Ageia的PhysX物理卡快上10倍不止,只要Quantum Effects的效率足够优秀,完全可以依靠G80显卡来完成物理计算任务。不过在此之前,游戏开发者必须对Quantum Effects提供优化,以便物理计算指令能够获得相应的支持。
Quantum Effects技术将CPU从繁重的物理计算中解放出来,让它可以将更多的效能投入到其他任务,而用户也不必再单独购买一块价格不菲的物理加速卡。由于现在还缺乏实际效果的对比,我们就无法评判G80与物理加速卡的效能差异,但以G80的灵活架构和强大计算能力来推测,保守估计G80的物理性能不会逊色多少。当然,游戏开发者必须在代码中对G80的Quantum Effects技术进行专门优化,才可以真正利用G80来完成物理计算任务。
前瞻
GeForce 8的到来,将计算机图形带入一个全新的领域,统一渲染代替分离渲染成为未来的方向,而独特的超标量流处理器设计也给GPU带来新鲜的气息。现在,nVIDIA牢牢占据了高端市场,AMD-ATI则在奋起直追。如果没有意外,AMD-ATI将在今年1季度带来R600图形处理器,它同样基于统一渲染架构设计,但在内部机制上,R600会与G80有相当多的不同。我们现在无法评判两者的效能孰高孰低,但胜负的天平实际上已朝向nVIDIA倾斜:G80占据市场先机,理念先进且性能傲人,R600一直传出不和谐的声音,如功耗过高、板卡过长被迫重新设计等等,加之G80会照例拥有更出色的OpenGL性能,R600要想后发制人似乎不太容易。但不管哪一阵营占据上风,我们都希望图形市场能够保持稳定的竞争格局,这将促使图形技术朝着更高的方向突破。