在IT界,你来我往的硝烟战火从未停止,回顾这十五六年显卡发展,从最初的大大小小的GPU公司到一直坚持到如今的两大芯片制造商:NVIDIA和AMD!一路风风雨雨,你夺我抢,这其中的恩怨情仇也许可以说上一天一夜……
GPU是NVIDIA最重要的业务,拼杀在GPU这个领域中近二十载,大小战役数十场,一方面凭借着强大的研发与生产能力为消费者提供更好的产品,另一方面积极努力将GPU的优势发挥到极致,手机、平板、笔记本、台式机、汽车等,都能看到NVIDIA的面孔。
AMD的历史较为复杂,2006年,AMD正式收购ATI,之后AMD便拥有了CPU与GPU两大业务组。收购ATI之后的AMD他们更愿意组合GPU和CPU的优势互相促进产品的销量,对于融合有预见但并不想让GPU抢占CPU的功能。
在GPU发展的历程中,在完全可编程的GPU推出前,各家的GPU基本上就是满足API或者Direct 3D的规格需求,在架构上可以回旋的余地不大。随着GeForce 3的出现,GPU进入了一个可编程的新时代。GPU可编程给各家的架构设计带来了更大的发挥空间,在架构上比较激进的NVIDIA针对预测的未来图形的发展方向作了很多尝试。比如说,NVIDIA GeForce FX GPU的规格就超过了同期DirectX 9.0的规格,在可编程型方面更近一步,支持长着色程序和一些程序流控制功能;而GeForce 6则是带来了全新的FP16 HDR渲染特性,在架构上实现了比较完整的程序流控制功能。
AMD方面,当时应该称作ATI,相对比较保守,基本上严格按照DirectX的规范来设计GPU。虽说GeForce FX在商业上相当失败,但是其架构基础给GeForce 6一代的成功奠定了很好的基础。
抛开这些因素,NVIDIA和AMD的架构在这段时期内并没有本质的区别,基本上都是Vertex shader, setup/光栅化,vertex shader以及ROP/内存控制器这些单元组成,shader的结构也大同小异,都是向量处理器形式的。这种趋同的架构设计趋势直到G80/R600这一代GPU的出现才出现了重大的变化。
序幕,朝代变迁 DirectX 10出世
在介绍变迁之前,先说说API,API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,简单地说,针对图形的API就是连接计算机应用与硬件之间的桥梁。目前主要API有DirectX和OpenGL等。
DirectX:它们旨在使基于 Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。 是目前最主流也是采用最多的的图形API。
随着2006年,微软发布了革命性的全新操作系统——Windows Vista,DirectX 10成了中关村装机商口头最常见的“忽悠”术语,因为装机商都知道,要用Vista,您得先换一块好显卡!
针对DX10和Vista,NVIDIA和AMD都重新设计了一组属于自己的统一渲染架构。也是因为这一代,NVIDIA和AMD都选择了一个属于自己的方向……
DX10:G80先发制人
2006年10月底11月初,NVIDIA迎接DirectX 10的到来发布全新一代架构G80, 首次采用统一渲染架构(Unified Shader Architecture),是DX10时代具有革命意义的产品!
G80之前,显示芯片厂商在设计GPU时,根据常见游戏的情况将顶点管线相对放得少一些,多放一些像素渲染管线。在DX10时代,传统“管线”形式的显示芯片开始呈现出力不从心的状态,想在这种架构下提高性能,只能去提高频率,或是增加渲染管线的数目,可是以这种方法实现性能的提升却是非常痛苦的。而G80的设计是通过很多功能相同的流处理器来动态分配给各种操作,以达到每个处理单元都参与运算,从而提高效率的目的。
G80架构图
通过以上架构图我们可以发现,没有了Vertex Shader和PixelShader的结构,取而代之的是8组并行的单元,每个单元中有16个流处理器和8个纹理单元。而为了应对处理3D图形数据时做的大量运算,G80在现实核心集成了128个浮点运算处理器。
每阵列结构
另外,G80还开启了GPU计算的新时代。有关显卡的通用计算NVIDIA并不是首创,ATI在Folding@Home项目上都比NVIDIA起步要早,但在DX10统一渲染器出现之前显卡通用计算技术的发展一直处于较低水平,流处理器的出现使其有了充当CPU的可能,而在支持环境上,CUDA的出现解决了软件开发环境的问题。过去GPGPU方式使用GPU做通用计算,是使用图形API来将计算模拟为图形操作,因此在效率和便利性上都有严重的问题,而且GPGPU流式计算方法也不利于充分发挥GPU的能力。
G80在计算架构上第一次实现了统一的shader架构,增加了片内的存储空间,程序员可以把G80 GPU当成一个真正的通用处理器对待。另外,G80的每个SP都采用了标量架构,因此在通用计算上效率远胜于传统的矢量结构运算单元,配合NVIDIA CUDA C,真正实现了在GPU上运行C这样的高级语言,实现了GPU计算的全新开始。
DX10:R600全新架构 后来者未能居上
在G80系列产品在市场上活跃长达半年之久后,AMD忙着收购ATI,采用统一渲染架构的R600才正式发布,而此时的高端市场已经完全由NVIDIA占据。AMD这半年来的缺席保证了NVIDIA丰厚的利润。
AMD的统一渲染器设计还是在原来的SIMD架构上改良而来,Superscalar超标量架构由1个4D矢量一个1D标量运算核心组成,进行传统的4D矢量运算时效率最高,而遇到1D标量运算时运算效率降至四分之一,所以需要更多数量的流处理器来弥补这个劣势。这也是为什么现在大家看到AMD的流处理器总是多于NVIDIA那么多的原因。下面我们就来看看一直延续至今的R600架构。
R600架构图
R600架构中配备了320个流处理器单元,具备4个Quad Processor(四方阵列处理器,简称QP),每个QP内包含了16个着色器(shader)处理单元,每个着色器内包含了5路超标量(superscalar)的运算单元(ALU)。采用了台积电的80纳米高速版(80HS),集成了大约7亿枚晶体管,一枚管芯内集成了3D处理、2D加速、视频加速、显示输出、内存控制、HDCP、5.1音频通道等单元。
R600 SIMD
R600作为AMD推出的第一代统一渲染架构在虽然有亮点,但是在市场上并没有引起玩家的共鸣,且性能上相对NVIDIA的G80并没有胜算,所以在很长一段时间内AMD都处于劣势。在后来的R700等产品上,AMD仍然只是在R600的架构上作了一些小小的改动,一直到DX11时代,AMD依然延续了R600开创的4D+1D超标量结构,通过新工艺大幅提高sp单元数量来获得性能提升。而NVIDIA却是选择走了另外一条路,当然这是后话了。
点评:
NVIDIA:不可否认,G80的先发制人给NVIDIA在市场上带来巨大的成功,而CUDA的出现降低了GPU开发的门槛,借助GPU强大的浮点运算能力,开发者可以用标准的C语言编程实现CPU也无法企及的大规模并行计算,深得很多开发者的亲睐。
AMD:为了迎接DX10的降临,AMD也重新设计其架构。也许由于G80风头太劲,且性能上相对G80并没有胜算,使收购后的ATI显得有些萎靡,很快就被改进版的RV670架构取代。
人们对视觉的追求是永不止步的,随着Win7的到来,DX11也随之踏进。与DX10不同的是,微软这次将中心集中在如何提升算法和效率上面,而不是一味得加入新特效或者提高模型复杂度。通过各种手段提升GPU渲染效率之后GPU有了富裕的运算资源,游戏开发商可以去使用更多的特效冲击我们的视觉神经。
DX11关键性5点:
? Tessellation:镶嵌式细分曲面技术
? Multi-Threading:多线程处理
? DirectCompute 11:计算着色器
? ShaderModel 5.0:着色器模型5.0版
? Texture Compression:纹理压缩
其中Tessellation和DirectCompute 11可以算是DX11带来的最重要的两大革命性技术,Tessellation可以大幅提升游戏画质、而DirectCompute 11则可以大大提高游戏效率,本次我们主要再为大家温习一下Tessellation。
无曲面细分,不DX11
DX8/9/10时代,大部分的重点都是侧重在画面渲染这一块,没有侧重在三角形几何图形的处理上面。在过去的这些年中,画面渲染进步了100倍,但是三角形几何图形的处理却仅仅进步了3倍。之前我们看到,R600上其实有对Tessellation的优化,不过到了DX11,微软推出这样一个API。
利用 Tessellation 技术实现逼真、浓密的头发渲染
在以前,我们通过一个前端电路控制模块来汇集,获取和对三角形光栅化。在那个几何运算并不复杂的时代,像这种固定的流水线操作可以达到几何运算性能,并不会因为并行核心的增删而改变。随着几何运算的复杂性逐步增加,DX11引入了Tessellation,NVIDIA认为成熟的GT200架构已经无法适应大规模的Tessellation计算,所以GF100全新架构的诞生也就势在必行。而并行化的Raster Engine和PolyMorph Engine就是并行处理架构上的关键模块。可扩展的PolyMorph Engine能实现较高的三角形速率,每个PolyMorph Engine均拥有专属的顶点获取单元以及Tessellator,很好的提升了几何性能。与之呼应的是四个并行的Raster Engine,它们能在每个时钟周期内设置最多四个三角形,并且在三角形获取,曲面细分以及光栅操作方面具备很强的性能。
NVIDIA:Fermi驾临 为高性能而生
Fermi架构图
从以上Fermi架构图中可以看出,一个GPC由四组SM阵列组成,每一组SM阵列具备32个流处理器、一个PolyMorph Engine多形体引擎、16个Store单元、四个SFU单元和纹理单元、两个Warp调度器和指令发送器、能配置为48KB Shared Memory+16KB L1缓存或者16KB Shared Memory+48KB L1缓存的共享内存/L1缓存。在AMD统一渲染架构的GPU中,类似SM等级的部件是SIMD Core,例如RV870拥有20个SIMD Core。
在浮点运算方面,G80、GT200的单精度运算都是采用IEEE 754-1985标准的浮点算法,而GF100在单精度浮点指令上提供了对次常数以及IEEE754-2008标准的所有模式的支持。
? GPC
GF100被NVIDIA定义为新一代CUDA计算图形架构,并且舍弃了TPC(Texture Processing Cluster)概念,引入全新的GPC(Graphic Processing Cluster)图形处理器集群概念。GF100中的GPC由4个SM单元和1个Raster Engine引擎所组成,将顶点、几何、光栅、纹理以及像素处理资源进行有机整合。NVIDIA 在 GF100 中引入了 GPC 的设计,将 GPU 的处理单元划分为除了 ROP、内存控制器外若干相对独立的完整模块,这其实就是一个多核设计。
每个 GPC 具备一个完整的光栅引擎用来处理三角形的 setup、光栅化和 z-cull 处理,GF100 有 4 个 GPC,和同样规模的旧式架构相比,GF100 的三角形 setup 吞吐率提高了三倍,很好地满足了 DirectX 11 中新增 tessellation 支持带来的几何处理剧增问题。
由于要开拓 GPU Computing 市场,Fermi 引入了许多以前的 GPU 从未有过的技术,例如片上存储器 ECC,可读写 L2/L1 cache;为了加强 DirectX 11 的性能表现,引入了多 GPC 设计,这其实就是多核版 GPU 架构,即 GPU 上有多个相对独立的 GPC,能同时并行处理多个三角形,这在之前的 GPU 上是无法实现的。不难看出来,DX11的降临Fermi的应运而生,与G80相较变化非常之大。那DX11上的AMD呢?
AMD: Barts为DX11改进
RV870借助成熟的图形架构,在DX11初期的表现还算不错。加上之前的DX11游戏不是很多,而大量运用Tessllation运算的游戏也不多,因此RV870的Tessllation性能并没有得到充分的检验。而现在,大量运用Tessllation运算的DX11游戏越来越多,显然之前的架构已经有落伍趋势。以下是HD6000系列产品Barts的架构解析:
乍一看,Barts似乎与Cypress,甚至之前的R600、R670与RV770没有本质区别,仍然是用大量晶体管堆积而成的高规格GPU。比起Cypress的2.15亿,由于SIMD的缩减,Barts的数量仅为1.7亿。相信功耗上也有相对优秀的表现。
Barts 和 Cypress 的架构除了 SIMD core 的数量存在差别外,在绝大多数方面都是类似的,例如都有两个 Unified Shader Engine,每个 Unified Shader Engine (USE)都有自己的指令 cache、kernel cache。
与Cypress相比,这次在流处理器数量上进行了缩减,大家可以看到SIMD由原先的一边10组缩减到现在一边7组,所以在流处理器、纹理单元和光栅单元数量也同样有缩减。而超线程分配处理器方面,则由原先的1个增至现在的两个,很好的提高了工作效率。
Barts简单得基于R600添加了用于几何计算的运算单元Tessllator(镶嵌器)+Vertex Assembler(顶点装配器)+Geometry Assembler(几何装配器)+Rasterizer x 2+Hierarchical -Z x 2。分别设计了两个Rasterizer(光栅器)和Hierachial-Z(多级Z缓冲模块)以适应Tessllation的运算需求在增加指令集的同时快速支持DX11。靠堆砌而成,与GF100的全新设计在性能上的差距也是有一些,特别是在DX11部分。不过,让我们失望的是HD6000系列显卡在以上所述的Graphics Engine部分却没有特别得改变。
从R600到最新的架构只是在原先的基础上稍作调整,并没有因为市场需求定制完全符合市场需求的架构。仅仅因为制程的改进而不断塞流处理器。因为NVIDIA对DX11特性的解读得到了良好的市场反应,HD6000时代随大流在Tessellation部分作了改进。
|