统一渲染架构与通用计算的降临

当微软DirectX 10发布之后,GPU迎来了史上第一次重大变革,而这次变革的推动者不再是NVIDIA或ATI,而是微软公司。

微软公司认为,传统的分离设计过于僵化,无法让所有的游戏都能够以最高效率运行。这一点应该不难理解,因为任何一个3D渲染画面,其顶点指令与像素指令的比例都是不相同的,但GPU中顶点单元与像素单元的比例却是固定的,这就会导致某些时候顶点单元不够用,像素单元大量闲置,某些时候又反过来,硬件利用效率低下。而游戏开发者为了获得最好的运行性能,也不得不小心翼翼地调整两种渲染指令的比例,微软认为这种情况限制了图形技术的进一步发展。

统一渲染管线具有无以伦比的通用性

为此,微软在设计Xbox360游戏机的时候,就提出统一渲染架构的概念,所谓统一渲染,即GPU中不再有单独的顶端渲染单元和像素渲染单元,而是由一个通用的渲染单元同时完成顶点和像素渲染任务。为了实现这一点,图形指令必须先经过一个通用的解码器、将顶点和像素指令翻译成统一渲染单元可直接执行的渲染微指令,而统一渲染单元其实就是一个高性能的浮点和矢量计算逻辑,它具有通用和可编程属性。相比DirectX 9之前的分离设计,统一渲染架构具有硬件利用效率高以及编程灵活的优点,让3D游戏开发者和GPU设计者都获得解放。ATI在获得Xbox 360合约的时候,便迅速展开了设计,它所拿出的Xenos GPU芯片便首度采用统一渲染架构。

对于这套设计,NVIDIA起初是比较抗拒,它认为传统的分离设计在硬件方面更加高效,但最后看到大势所趋、并且也意识到统一渲染架构所具有的扩展弹性,在G80时代也实现了统一渲染架构。事实证明,NVIDIA才是此套架构最大的受益者。

统一渲染架构固然是微软为提升硬件效率所提出,但它进一步提升了GPU内部运算单元的可编程性,让GPU运行高密集度的通用计算任务就成为可能,这意味着GPU可以打破3D渲染的局限,迈向更为广阔的天地。

1. 2006~2007:NVIDIA GeForce 8击溃Radeon HD 2000

2006年11月,NVIDIA高调推出GeForce 8800 GTX和GeForce 8800 GTS图形处理器,拉开了GeForce 8(开发代号G80)时代的序幕。而NVIDIA也在新一轮的竞争中将AMD-ATI拉下一个季度,后者的R600要等到2007年1月30日方能推向市场。

作为NVIDIA第一代统一渲染架构GPU,G80的硬件规格相当强悍:它拥有128个可执行3D渲染任务及其他可编程指令的流处理器(Stream Processors),内置24个ROP单元,最高支持384位,86.4GB/s带宽的GDDR3显存,晶体管集成度高达6.8亿个,是前一代GeForce 7900的两倍多。G80也因此成为当时集成度最高的半导体芯片,而这些指标也让G80拥有极其优秀的性能。

G80的高集成度意味着成本高昂,NVIDIA为了保证G80能拥有足够高的生产良品率,仅采用台积电90纳米工艺进行制造,它的功耗高达145瓦,显卡长度也因为供电模块的需要达到32厘米。另外为了解决散热需要,G80系列显卡都需要被一块体积硕大的散热器所覆盖,但NVIDIA将风扇噪音控制在很低的水平,即便在高负载状态下也能保证安静运行。

NVIDIA G80芯片集成了6.8亿个晶体管

在内部设计上,G80的128个流处理器被分为8个渲染集群,每个集群都是由16个流处理器(内部再平均分成两组)、4个纹理地址单元以及一个L1缓存构成,这样G80就总共拥有128个流处理器和32个纹理地址单元。流处理器是最基本的计算单元,所有的图形渲染指令(包括顶点、像素和几何指令)都是由流处理器运算并输出。输出的结果会由一个交换器分配给6组ROP光栅处理单元进行处理,每个光栅单元又包含4个ROP,于是G80就拥有24个ROP处理单元。每一组ROP单元都对应一个L2缓存,它与渲染集群中的L1缓存以及显存相连—增加缓存的另一个好处就是可以为通用计算做好了准备。

也是在G80时代,NVIDIA发布了意义重大的CUDA 1.0开发平台。CUDA是一个集成的开发环境,它包括开发语言、编译器以及API。借助CUDA,程序员可以编写出能够为GPU所运行的计算程序。由于GPU拥有并行计算的巨大优势,大量的科学工作者都开始将应用迁移到NVIDIA的CUDA平台,GPU通用加速实现了从理论到现实的第一步,也为NVIDIA开辟了新一片的蓝海。此外,NVIDIA也在这个时候推出基于G80的Tesla高性能计算设备,专门供应超级计算市场。数年以后,Tesla也成功地成为该领域的新标准,超级计算业界普遍都将CPU+GPU的组合作为第一方案,而其中的GPU几乎都是NVIDIA的Tesla产品。

AMD在这一轮的竞逐中明显滞后,直到2007年5月才发布代号为R600的Radeon HD2900XT及产品家族。这款产品采用AMD的第二代统一渲染架构,拥有多达320个流处理器,芯片核心频率也达到740MHz。不过统一渲染架构赋予图形厂商很大的自由,AMD与NVIDIA双方都可以自由设计统一渲染单元,产品的差异化大增,彼此的流处理器也存在很大的区别,所以Radeon HD 2900XT的流处理器虽然数量很多,但性能并没有特别亮眼。此外,Radeon HD 2900XT还集合了ATI被收购之前的所有图形技术之大成,包括快速动态分支、流计算功能、超线程分派机制等等,环形内存总线技术也升级到第二代,这令Radeon HD 2900XT得以支持512bit显存位宽,也创下新的纪录。

低性能、高功耗的Radeon HD 2900 XT,重复了当年NVIDIA GeForce FX 5800 Ultra的命运。

Radeon HD 2900XT破纪录的地方还在于,它的晶体管总量达到史无前例的7亿个,几乎比上一代的Radeon 1950 Pro高出一倍,同时也略高于NVIDIA GeForce 8800 Ultra。当然,显卡的功耗也达到创纪录的215瓦,这些强悍的规格让它看起来是一款不折不扣的图形怪兽。然而,最终的现实却相当残酷——RadeonHD 2900XT的性能仅相当于NVIDIA 面向中端的GeForce 8800 GTS,让业界大跌眼镜,AMD也不得不将Radeon HD 2900XT定位为注重性价比的高端产品,以此维持其竞争力,而这样的市场定位在后来也被一直延续。

在Radeon HD 2000时代,AMD处于比较低落的时期:芯片组尚不够成熟,Cros sFi r e交火技术也未能大展拳脚(NVIDIA SLI平台在多显卡市场的份额一度高达90%),自身又陷入资金匮乏的境地,CPU业务也面临强敌。而在通用计算领域,AMD虽然早在2006年9月就发布CTM接口,让程序员可以直接访问AMD GPU,但它远不如CUDA来得完善。程序员甚至不得不直接访问GPU硬件,最终几乎没有多少程序员对AMD平台感兴趣,它在通用计算市场也几乎毫无斩获。

2.2008~2009:轻量、灵活的AMD RV770

GeForce 7和GeForce 8的成功让NVIDIA放松了新一代产品的开发,它开始了“马甲”战略:GeForce 8800 GT→GeForce 9800 GT→GeForce GTS 240,GeForce 8800 GS→GeForce 9600 GSO,GeForce 8800 GTS→GeForce 9800 GTX→GeForce GTS 250。普通用户还认为它们是新一代产品,但无论性能还是规格都是换汤不换药。而即便如此,AMD依然无法在性能上占据上风。

但在这个时候,市场的情况已悄然发生变化,高性能不再是唯一的诉求,加上AMD与ATI的整合顺利,3A平台的威力愈来愈明显。首先,AMD芯片组不断成熟,越来越多选择AMDCPU平台的用户,也选择它的芯片组和显卡,而这种趋势的终极就意味着AMD平台将全封闭。其次,AMD推行Fusion融合处理器的概念,英特尔也随即跟上,CPU和GPU的一体化意味着独立显卡市场会变得越来越小。而另一方面,GPU通用计算作为新兴的市场,拥有巨大的成长空间;云计算的兴起也意味着未来的GPU将更多活跃在云渲染领域。再者,智能手机等掌上产品越来越流行,3D技术将向这些领域渗透。

基于这些转变,NVIDIA和AMD都调整了自己的脚步。NVIDIA放弃了芯片组业务,将目光放在通用计算市场,全力发展自己的CUDA平台;AMD则构建更灵活的产品体系,打造更富吸引力的3A平台来对抗英特尔与NVIDIA,它也成为新一轮GPU架构革命的发起者。

经历上两代产品的失败,AMD认为设计成本、功耗、性能合理的GPU更符合当时的要求,于是便实施了“Sweet Spot”计划。它不再追求那种大规模、高性能、高成本的设计,而是开发一个性能适中的轻量级GPU,再通过多芯片来制造高性能显卡。2007年底发布Radeon HD 3870便是该计划的第一个成果,它的开发代号是RV670,架构上还是隶属于R600体系。Radeon HD 3870仍然保有320个流处理器,显存位宽降低到256bit,晶体管集成度也缩减至6.6亿个。由于采用55纳米工艺制造,它的核心面积只有192平方毫米。

Radeon HD 3000的理念在市场上获得广泛的成功,凭借高性价比优势,Radeon HD3000家族饱受赞誉。仅在半年之后的2008年5月,AMD接着发布代号为RV770的Radeon HD4000家族。RV770拥有480个统一流处理单元(96+384),32个纹理单元,32个TMU,16个ROP,256bit显存位宽,支持原生GDDR3、GDDR4和GDDR5显存。相比上一代拥有6.66亿个晶体管的RV670,RV770的晶体管数提升到9.56亿个,幸好AMD采用55纳米工艺来制造RV770,芯片尺寸只有260平方毫米。RV770衍生出双芯片和单芯片的多款产品,其中旗舰级的Radeon HD 4870 X2(R700)完败同期对手GeForce GTX280。

轻量级的RV770 GPU,AMD注重新品推出速度的做法显然更明智。

NVIDIA虽然在2007年推出GeForce 9系列,但它其实只是G80的工艺升级版,重在降低功耗和成本,架构上并没有多少长处。真正意义上的新一代产品是2008年6月发布的GT200,对应GeForce GTX 280系列。GT200在架构上还是继承了G80的体系,但进行大幅度的增强和改进。GT200拥有240个流处理器,这些流处理器被分布在10个TPC阵列中,每个阵列包含24个流处理器(被划分为3组)以及8个纹理单元,并共享L1缓存。与流处理器数量提升相对应,GT200的纹理单元数量达到80个,ROP 光栅处理器数量则提升到了32个,各项规格都有了全面性的提升。

依然追求巨型芯片的GeForce GTX 280

GT200的晶体管集成度高达14亿个,刷新了半导体芯片的新纪录,但它只是采用65纳米工艺,导致芯片面积达到546平方毫米,功耗则达到惊人的236瓦。高昂的制造成本和惊人的功耗,加上性能落后于对手,GT200没有获得预想中的辉煌,这一次AMD让NVIDIA吃到了苦头。

3.2010:AMD Radeon HD 5000/6000继续辉煌

2009年9月,AMD发布了Radeon HD 5000系列GPU,宣示新时代的到来。尽管没有正式代号,但外界还是习惯上以RV870来称呼这一代GPU。RV870秉承AMD上两代产品的设计哲学,以小芯片和先进的规格推向中端市场,然后再通过双芯片的方式向高端领域拓展。这一招屡试不爽,AMD也在这一阶段获得图形市场的优势地位。

作为RV870的标准版本,Radeon HD 5870拥有超过20亿个晶体管,配备1600个流处理器和80个纹理单元,也就是20组SIMD阵列,同时全面使用GDDR5显存,位宽则保持在256bit。核心频率设定在850MHz,它拥有两倍于RV770的计算能力;功耗方面支持分频技术,待机环境下功耗为28W,满载环境下功耗为190W,表现令人满意。得益于台积电40纳米工艺,Radeon HD 5870的核心面积为330平方毫米,要比NVIDIA的GT200要小得多。

RV870依然是一枚相对小的GPU,这种策略让AMD在主流图形市场中屡试不爽。

由于NVIDIA Fermi项目的拖延,Radeon HD 5000系列在高、中、低端市场都表现出极强的性能或价格优势,加上AMD计算平台羽翼丰满,Radeon HD 5000可以说在市场上所向披靡。不过对NVIDIA来说,这并不是一个艰难的时期,因为它们将业务重点转移到通用计算和超移动的Tegra领域。

2010年底,AMD接着推出代号为“北方群岛(Northern Islands)”的Radeon HD 6000系列,它的核心还是延续之前的RV870,只是对性能进行优化、功能也获得显著增强,如改进3D立体蓝光视频的渲染,集成第三代视频解码引擎UVD3,支持HDMI 1.4、DisplayPort 1.2接口规范,多屏系统的组建也将更加简单。Radeon HD 6000值得称道的地方在于,GPU单位面积的性能比上一代提升35%,这就意味着更低的成本。Radeon HD 6000系列产品的性价比都非常出众,加上快速铺开齐全的产品线,让AMD又稳稳地获得图形市场的优势地位。

4.Fermi与NVIDIA的转身

在ATI被并购之后的两年,NVIDIA已经清晰地看到这样的趋势:留给自己的独立图形市场将会将越来越小,即便它能拥有最好的图形技术,如果不采取正确的策略,最终GeForce恐怕也难逃nForce的下场。

有鉴于此,NVIDIA将CUDA通用计算和移动Tegra平台作为两个全新的发展方向,并不惜一切代价朝新的目标挺进。之前的G80和GT200在通用计算领域打下良好的基础,但NVIDIA认为它们虽然拥有不错的灵活性,但还远不够完美,NVIDIA希望GPU的地位能够超越传统的CPU,而不仅仅只是用来渲染3D图形。

Fermi的CUDA核心,拥有完整的浮点和整数计算单元,为通用计算设计。

Fermi便是这种立意的产物,这款GPU发布于2010年4月。当AMD多芯片的战略所向披靡时,NVIDIA并没有简单模仿,仍然坚定地认为通用计算才是适合自己的方向,为此不惜耗费时间、精力以及损失市场的风险,来打造一块巨无霸型的新一代GPU。Fermi采用一种高度并行的计算结构,它拥有多达512个CUDA计算单元,每个单元都有缓存、作为一个基本的计算单位,这些单元可以同时进行浮点计算的处理。并行度远非CPU可比。AMD的GPU虽然有更多的流处理单元,但这些单元并没有缓存系统,只是被动地接受上级数据计算后输出,通用性非常有限,加上AMD并没有提供理想的开发工具,令开发者无从下手。其次,Fermi的每个CUDA核心,都在浮点计算单元之外加上整数处理单元,可执行完整的32位整数计算任务,而后者在过去只能通过模拟实现,且仅能计算24bit整数乘法而已;同时Fermi全面引入的还有积和熔加运算 (Fused Multiply-Add,FMA),每循环操作数单精度512个,双精度256个(G200仅支持单精度FMA)。所有这一切都符合业界标准,计算结果不会产生意外偏差。此外,Fermi的双精度浮点(FP64)性能也大大提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8。第三,Fe rmi引入了真正的缓存设计,每32个CUDA核心被配置成一组SM(Streaming Multiprocessor)流处理器,每组SM则拥有64KB可配置内存,可以根据任务的性质部署成16KB共享内存加48KB一级缓存,或者48KB 共享内存加16KB一级缓存的形式,从而满足不同类型程序的需要。此外,整个芯片还共享768KB的二级缓存,方面SM计算单元的输入输出——这些显然都是为通用计算而准备。

复杂的设计让Fermi的晶体管集成度达到令人咂舌的30亿个,它采用台积电40纳米工艺制造,照例NVIDIA又一次遭遇良品率低、功耗高和中端产品推出时间慢的问题,在此期间NVIDIA的市场份额不断流失。直到进入2011年后,Fermi架构的第二代GF110内核才变得成熟,新内核解决了功耗和漏电的不足,CUDA流处理器的数量也提高到512个,它所对应的便是目前市场上的GeForce GTX 500系列。

 
Fermi依然是一枚巨无霸芯片,NVIDIA不惜代价成为通用计算市场的主宰者。

就图形性能而言,GeForce GTX 500系列与AMD Radeon HD 6000系列对应的产品只能说在伯仲之间,双方各有胜负。AMD平台的优势在于性价比以及自身的CPU和芯片组匹配,但GeForce GTX 500系列拥有更丰富的技术特性,比如PhysX物理计算和光线追踪都被新一代游戏广泛支持。对于这类游戏,GeForce GTX 500系列会有更出色的性能表现。对于图形市场,NVIDIA却没有太多的强调,他们几乎在任何场合都宣传GPU通用计算的巨大好处和CUDA平台的优势,所以NVIDIA以更快的速度冲向新的高性能计算市场。我们可以看到,即便早先放弃nForce芯片组业务,桌面显卡遭到对手狙击,NVIDIA却依然活得有声有色。

NVIDIA构建的第二个新业务就是针对超移动设备的Tegra平台,Tegra将ARM处理器内核与GeForce GPU集成在一起,为智能手机、平板电脑等设备带来卓越的3D性能。诚如大家所见,Tegra已经在智能手机中遍地开花,即将出现的四核心Tegra 3更是令人侧目,由于竞争对手远远无法在图形技术方面同NVIDIA比肩,未来NVIDIA在这个市场的作为也不会令人太惊讶。

NVIDIA构建的第三个新业务就是传说中的Danver处理器:Danver将包含CPU和GPU两部分,前者为NVIDIA自行开发的高性能64位ARM处理器,包含八个内核;后者则基于改进型Fermi架构,集成256个流处理器。按计划Danver将采用台积电28纳米工艺,顺利的话它将在年底进入流片阶段。

写在最后

今天的GPU已经成为计算机的第二个心脏,它的地位隐然有超越CPU的态势——对于商业办公、互联网等常规应用来说,现时的CPU完全处于性能过剩的状态,即便最低端的CPU,都能够很流畅地处理这些应用。至于高性能要求的应用,几乎都体现在高清视频、数码照片处理、3D渲染等领域,而这些应用无一例外都是密集的浮点计算。在这些领域里,GPU所展现出的能力明显超出CPU,虽然上述大多数应用当前还是依赖CPU完成,但新一代软件几乎都将GPU加速作为优先的选项。从实际应用的角度上来说,高速GPU能比高速CPU带来更显著的性能改善。那么,GPU的发展在未来将达到什么样的高度?对于这个问题,市场应该是最好的试金石。

*************************************************** 
原文引自:微型计算机

※光影之路 GPU架构发展史(1/4)

※光影之路 GPU架构发展史(2/4)  
※光影之路 GPU架构发展史(3/4)  

光影之路 GPU架构发展史(4/4)


更多精彩>>>

光影之路 GPU架构发展史(4/4)相关推荐

  1. 光影之路 GPU架构发展史(3/4)

    5.2003年:Radeon 9800击败GeForce FX 5800 2002年11月,NVIDIA发布代号为NV30的GeForce FX 5800 Ultra,这款产品被NVIDIA视作夺回市 ...

  2. 光影之路 GPU架构发展史(1/4)

    在PC时代初始,还没有GPU这一说法,它的前身便是所谓的"显示芯片",但当3D游戏出现在PC平台时,这一名称变为"图形芯片",后来NVIDIA制造出功能更强的& ...

  3. GPU架构(三十三)

    一.导言 对于大多数图形渲染开发者,GPU是既熟悉又陌生的部件,熟悉的是每天都需要跟它打交道,陌生的是GPU就如一个黑盒,不知道其内部硬件架构,更无从谈及其运行机制. 本文以NVIDIA作为主线,将试 ...

  4. 第一章  GPU虚拟化发展史

    第一章  GPU虚拟化发展史 GPU的虚拟化发展历程事实上与公有云市场和云计算应用场景的普及息息相关.如果在10年前谈起云计算,大部分人的反应是"不知所云".但是随着云计算场景的普 ...

  5. GPU的发展史,GPU与CPU的关系是什么?为何现在GPU越来越重要?

    GPU的发展史,GPU与CPU的关系是什么?为何现在GPU越来越重要? 导读 01 图形处理器 02 图形处理器的构成 03 计算机图形的生成原理 04 显卡的诞生 05 前GPU时代 06 多媒体时 ...

  6. 底层进阶 | 移动端 GPU 架构 -- TBR 模型

    在知乎上关注了好多图形学大佬,感觉现在知乎的技术氛围要比掘金推荐旧文好多了,经常会推送感兴趣的领域内容,而且还可以和作者私信交流. 这段时间看到有大佬分享 GPU 架构相关的内容,做图像渲染的还是要懂 ...

  7. AMD统一渲染GPU架构 历程回顾与评测

    AMD统一渲染GPU架构 历程回顾与评测     前言:NVIDIA公司历经长时间酝酿的Fermi架构高端产品GTX480/GTX470发布已经结束,经历了长达一个月的忙碌,我们已经了解到了这款产品的 ...

  8. NVIDIA GPU 架构梳理

    文中图片大部分来自NVIDIA 产品白皮书 TODO:英伟达显卡型号梳理 目录: 一.NVIDIA GPU的架构演变历史 二.Tesla 架构 三.Fermi架构 四.Kepler架构 五.Maxwe ...

  9. 前端进阶之路: 前端架构设计(2)-流程核心

    可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视 ...

最新文章

  1. 使用Nginx的proxy_cache缓存功能取代Squid
  2. 算法-----两数之和 II - 输入有序数组
  3. android jsoup简书,jsoup爬虫简书首页数据做个小Demo
  4. Vue creatElement
  5. 《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。
  6. 群里别人问的杂七杂八的问题
  7. vim的模式及常用命令
  8. 前端学习(2346):uniapp环境搭建
  9. Stateflow_报错记录
  10. manjaro 搜狗输入法_Manjaro日常使用 之一:日常办公
  11. python print输出字符串报错
  12. 深度神经网络 分布式训练 动手学深度学习v2
  13. wps文字如何取消英文首字母输入时自动变大写
  14. 启动U盘安装linux系统
  15. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...
  16. mysql spj_MySQL查询优化器--非SPJ优化--LIMIT优化
  17. 一图必通 | 计网~TCP、IP
  18. 手写签名插件—jSignature使用心得
  19. 乌克兰启动国家政策使加密货币合法化
  20. 洛谷· [AHOI2008]紧急集合 / 聚会

热门文章

  1. 曾断崖式跌落的三星,能否在中国东山再起?
  2. 多闪实名举报河南法院;ofo 内部发反腐文件;库克访华点赞故宫 App | 极客头条...
  3. “我要彻底放弃 Debian 操作系统!”
  4. 美团点评架构再调整,王兴凭什么同时杠上阿里滴滴饿了么
  5. java公司自己封装的框架_SpringBoot封装自己的Starter的实现方法
  6. 语言做的表白魔方_程序员表白教程,这些代码用过的都说浪漫
  7. gson和json-lib的区别
  8. thinkcmf5调用指定分类的二级_python机器学习API介绍11: 伯努利贝叶斯分类器
  9. with open as f用法_UE4精品教程 | C++Tuple元组的详细用法
  10. navicat导入成功但是没有数据_数据库能建立成功,但是还报错,应该怎么处理...