1凛冬将至……
在上一周的《视觉时代的回响 GPU十年历史追忆(上)》,我们以DirectX 9作为时间分野对GPU十年时代的开端部分进行了回顾,黄金时代是对2003~2006年期间GPU业界的最好概括。那么按照DirectX的版本更新,伴随接下来出现的DirectX 10的GPU时代又是怎样的呢?
没有永远的繁盛,这也许能够作为我们对GPU十年时代的最恰当的评语吧……
在经历了DirectX 9如诸神黄昏般灿烂的激烈对决和兴隆之后,我们的GPU业界在接下来的DirectX 10时代滑入了一条漫长而且凛冬一样寒冷的下行轨道。技术进步陷于停滞,硬件更新亮点缺缺,甚至连DirectX 10这个API本身的存在感都稀薄到了极点——让屏幕前的您立刻说出完美支持DirectX 10的游戏大作的名字,您能做得到么?即便做得到,又能总共说出几个呢?
几乎是唯一的而且还不是原生的DirectX 10大作——Crysis Warhead
DirectX 9如果是金色的梦想王朝,那么DirectX 10对于GPU十年的历史而言就是不折不扣的黑暗时代了。是什么造就了那个不堪回首的时代呢?又有那些东西是那片浑浑噩噩的岁月里值得被我们记住的呢?在今天的文字里,就让我们继续拨回岁月的齿轮,一起回望那个令人唏嘘的DirectX 10时代吧。
2黄昏之后的黯淡
● 黄昏之后的黯淡
如果可以的话,我们一定会尽量避免让自己陷入到关于那个时代的灰暗回忆当中,可无论我们多么不情不愿,已经发生的事都不会因为我们的逃避而有所改变。既然不能改变结果,那就让我们勇敢的去面对那些记忆吧。
DirectX 10时代的开端其实依旧是令人振奋的,NVIDIA于2006年初发布的G80架构仿佛是对DirectX 9.0时代荣光的延续,这款以TLP为最终设计诉求,强调整体Shader效率而非绝对吞吐总量的GPU提供了强大的性能和令人满意的效率,似乎为整个DirectX 10时代开了一个好头。但也许是为了惩戒安于顺境的我们,就在所有人都认为ATI/AMD可以拿出与之对应的竞争架构时,命运之神将R600这个“大礼”送到了世间。
其实DirectX 10的开端还是很不错的
整个IT业界度鲜有一款产品能够像NV30那样在与对手的战争中输得如此的彻底,本来我们以为NV30的经历可以让整个业界记住教训,今后很难会再出现超越NV30的失败了,但R600却非常坚定的打破了我们的观点……这款与G80竞争的架构采用VLIW的4D+1D结构,4个非全功能1D ALU和1个全功能4D ALU以捆绑的形式构成一个SIMD Unified Shader处理单元,所有单元共用US的发射端口资源。这种显然延续并发展自R580的设计可以带来极大的理论吞吐能力,但同时要求若干条指令以VLIW的超长指令形式统一进行吞吐,才能发挥出全部ALU的运算能力。这种强制的要求不仅对驱动和编译器提出了苛刻的需求,而且要求程序端必须让指令之间尽可能的不存在任何关联性,这在现实程序中几乎是不可能做到的。
除此之外,R600的缓冲机制设计同样无厘头到不可理喻的地步,它仅为全部的VLIW US单元提供了8K的GDS作为临时数据的缓冲,而且由于驱动以及对缓冲机制本身作用的理解不足所导致的设计缺陷,对于GDS的实际操作长期以来一直都是一件极度困难的事情。VLIW导致的高延迟,无法发挥有效缓冲作用的缓存体系,再加上为了照顾吞吐而被定义的过大的线程粒度,这三个蹩脚的搭配造成的结果,让R600拥有了极端低下的shader灵活度。在某些特定的线程粒度下,R600的整体体系延迟,甚至可以超过竞争对手G80几十倍。
跟NV30 VS R300一样,要明白R600的core和uncore部分设计的问题有多严重,我们自然也要设立对照组——G80虽然在整个运算单元集群的角度来看也属于SIMD结构,但每个基本ALU团簇单元,也就是SM所采用的则是更加灵活的MIMD设计,对于指令的吞吐不存在打包以及关联性的限制。G80的每个SM都拥有独立且面向单个ALU开放的8K shared memory作为缓冲,相比于R600的320个ALU一起抢8K GDS的状态,G80的SP(ALU)单元简直就是处在天堂一般。多样化且灵活的吞吐方式,巨大且十分有效的缓冲体系,以及更小的线程粒度,让G80完全站在了R600的对立面。我们在G80身上看到的是充满了流畅和简洁的数学美感,而在R600身上只能看到非常全面的缺点和失败。
与G80完全不同,AMD在R600身上所要强调的要素是ILP,也就是强悍的吞吐能力和单位指令执行能力,这种能力在Shader Modle3.0时代是非常重要的。如果把R600身上对应DX10的特性都去掉,并用这些节省下来的晶体管稍微强化一下总线以及材质单元等领域,然后早出1年,R600便可以摇身一变,成为一款强悍到令全世界震惊的怪兽级显卡。之前“一代天骄”在性能和口碑层面上的成功,让ATI跟当年的NVIDIA犯了几乎一摸一样的错误,令其对Shader Modle4.0的方向进行了错误的预估,同时也失去了同微软原本十分紧密的联系。甚至因为程序员对R580设计的溢美太过真诚,ATI产生了一个致命到几乎可以说精神失常的错觉——我ATI可以通过强大的影响力直接影响程序员,不管未来的Shader Modle发展成什么样,只要我设计出了自己觉得合适的硬件,就可以迫使程序员就范,从编程的角度来迁就我的硬件设计方式。
R600的失败之所以开启了一个悲剧的时代,不仅仅是因为其所带来的市场失衡以及ATI/AMD自身的受困,更为致命的问题在于其所带来的竞争格局失衡。自此之后,整个业界都被拖离出了高速发展的轨迹,对等且激烈的架构技术竞争以及由此带来的“适度”的性能增长很快便离我们而去。DirectX 9时代的盛世光辉,自此灭寂于一片凛冬般的漫长迟滞当中……
3D线上的血色
● D线上的血色
福无双至,祸不单行。在DirectX 10这个黯淡的时代书写悲剧的不仅只有ATI/AMD,NVIDIA同样经历了一次严重的挫折,虽然这种挫折并非来自逻辑结构设计层面,但它对整个时代的影响依旧明显。
在G80/G92取得了技术与市场的双重胜利之后,接下来的GT200对NVIDIA来说可以算是一个“甜蜜的灾难”。按照NVIDIA的构架演进计划,GT200不仅要完成超越G80/G92至少50%的图形性能目标,更要为NVIDIA打开通用计算及HPC应用市场,甚至还要为即将到来的后续GPU架构积累至关重要的经验。在双重目标以及Tick-Tock节奏的压迫之下,GT200构架不仅整体规模较之G80/G92提升了近100%,芯片面积更是达到了创纪录的576平方毫米,这一面积数值大幅超越了关乎GPU可制造性要素的界限——D线。
D线上的华尔兹——NVIDIA DirectX10芯片面积变迁
所谓D线,指得是每一个DirectX版本所对应的第一代GPU构架的芯片面积,这个芯片面积在坐标系中构成的横坐标轴指挥了整个该版本DirectX环境下所有旗舰级GPU构架的面积线。D线并不是一个绝对的数值,我们甚至经常会使用“D线上空间”这样一个面积区间来面对问题,它允许小范围的向上浮动,但绝对数值一般不会超过正10%。之所以称之为“D”线,是因为这条线对于一整个版本的DirectX中的GPU,尤其是中后期的GPU构架来说实际上是一条死亡之线(Dead Line),它关乎一款芯片在可制造性问题方面的表现,面积在D线之内的芯片将会有更好的可制造性,超过界限则只可能会让可制造性以及功耗等表现变得越来越糟糕。所有芯片面积大幅跨越D线,也就是芯片面积超过某版本DirectX初代GPU面积10%以上的的GPU基本上都没有得到好的结局。尺寸超过D线19%的GT200,就是触碰D线之后的典型范例。
在NVIDIA的规划当中,GT200需要同时完成Thread并行吞吐能力提升及管理模式的探索、寄存器使用经验积累、Atomic(原子操作,一种将若干线程凝固成一个不可再分的线程块的管理手段)等更加先进的线程管理机制的引入等等多项重要的任务,其中尤以寄存器及其背后的双精度运算最为重要。虽然从结果而言,GT200令人满意地完成了所有任务并为NVIDIA后续架构的成功奠定了决定性的基础,但过多的任务却也带来了过量的晶体管总量、沉重的功耗以及成本负担,并将GT200直接送过了D线。
没有人能够否认GT200为NVIDIA带来的出血和尴尬——高昂的成本带来了高昂的售价和缩水的利润,巨大的功耗在恶化消费者使用感受的同时也否决了单卡双芯架构产品出现的可能。在单卡双芯的R700架构的打压之下,GT200不仅丢失了单芯显卡性能/效率之外的一切桂冠,同时也让NVIDIA不得不在成本劣势之下与竞争对手进行惨烈的价格战,进而陷入了漫长而痛苦的出血状态。
以R600以及GT200为界,GPU十年历史当中的第一个悲剧性的高潮正式降临到了我们的世界,而且更加凄凉的是悲剧并不仅止于此,在DirectX 10所在的3年时间里,整个业界几乎完全处在一片寒风之中。
4奥林匹斯之巅的陨落
● 奥林匹斯之巅的陨落
整个DirectX 10时代最大的悲剧是什么?相信这个问题的答案对于绝大多数人而言都是唯一的,那就是ATI的陨落……
R580虽然将GPU在DirectX 9时代的辉煌推向了最顶点,但这位英雄却没有为自己的境遇迎来转机。在那个即便强调吞吐,效率的提升也依旧会被分离单元设计吃掉的年代,R580尽管理念先进但却着着实实的赢了面子输了肚子。它为效率提升付出了巨大芯片面积的代价,而最终的性能却被非统一单元低下的运作率无情的吞噬。市场对于G71架构的青睐让ATI陷入了难堪的衰退状态,运营状况逐渐开始变得糟糕起来。最终,在2006年7月24日那个令无数A饭五味杂陈的夜晚,ATI终于正式被AMD斥资54亿美元收购。
香消玉殒的ATI……
被收购之后的ATI并没有因此而获得任何转机,因为对于新东家AMD而言,GPU完全是一个陌生的领域,如何整合并正确的使用ATI之前的技术积累以及宝贵的经验对于这位“新手”来说无疑是一个太过沉重的课题,迅速发现ATI遗留的R600架构的重大失误更是不可能的事。双线作战的全新竞争环境以及收购带来的组织结构变化严重削弱了AMD的竞争力,同时也让新一代GPU架构的研发在本来就错误的方向上陷入了停滞。
不仅如此,AMD对ATI的收购过程本身就充满了各种令人不解的溢价和交叉交易,AMD甚至不得不举债超过20亿美元才完成了这笔从头到尾都是“冤枉钱”交易,这种不成熟到有些荒谬的举动让我们有理由怀疑之前已经剥离掉AMD唯一赢利点也就是NAND业务,并将整个企业导入下行轨道的首席执行官Hector Ruiz的行为动机不怎么纯洁——事实上他也确实因被控内幕交易而受到调查并险些锒铛入狱。这桩收购令AMD流失了巨量的宝贵资金和时间,进而丧失了GPU架构研发工作正常进行的必要条件。没有钱,没有时间,没有环境来继续实现自己推动GPU进步的抱负,ATI这位垂暮英雄就这样走完了自己一生,虽然其品牌并没有在收购瞬间消失,但那位曾经在DirectX 9时代铸就无数传奇的英雄之魂却已经消散在风中了。
在位期间将AMD乃至整个业界拖入下行的“涨薪CEO”——Hector Ruiz
该怎么说呢?如果把ATI被收购前后发生的故事交给莎士比亚来谱写的话,那应该会是一部有机会比肩《奥赛罗》或者《李尔王》的传世佳作吧……
当然,ATI并不孤单,还有另一位重量级的神祗与它一起谱写属于那个时代的悲剧,那就是曾经辉煌的DirectX 9的接班人——DirectX 10。
尽管DirectX 9.0C堪称完美,但它的完美本身在出发点上就存在局限。传统的shader单元是分立的,根据不同的需要被分成了独立的Vertex shader单元和Pixel shader单元,分别处理不同的shader programs,实际的shader program是不可能完全做到两种单元的平衡,也不可能根据特定硬件架构的单元比例来安置代码结构。软件和硬件两端的双重制约呼唤着图形API这位隐性主宰的进步,而作为回应,DirectX 10来了。
Unified Shader是DirectX 10最大的特点,它将Vertex Shader和Pixel Shader单元合并成一个具有完整执行能力的US(Unified Shader)单元,指令可以直接面向底层的ALU而非过去的特定单元,所以在硬件层面US可以同时吞吐一切shader指令,同时并不会对指令进行任何的修改,也不会对shader program的编写模式提出任何的强迫性的改变要求,遵循DirectX 10规范设计的硬件在理论上可以达到100%的shader效率,这无疑是积极向上的,足以让DirectX继续辉煌下去的一次更新。
但是,DirectX 10却成了微软历史上第一个同时也是唯一一个几乎被人遗忘的API……
作为统一构架的开端,微软的初衷显然是好的,Unified解决方案不仅能够保证Shader指令执行率的最大化,更可以最大限度的保障对旧有指令格式的兼容性。也就是说,即便是一个编程习惯和思路依旧停留在DirectX 9时代的程序员,他所写出的仅符合DirectX 9要求的代码,在DirectX 10硬件中依旧可以被完全无问题的执行。这种良好的初衷带来了一个令人尴尬的结局——开发商并不需要为新的API开发全新的引擎,程序员也不需要去学习新的编程方式并改变自己的编程习惯,整个业界都缺乏一个明确的必须过渡到DirectX 10的理由。
DirectX 10究竟尴尬到了什么地步呢?在推出5年之后的2011年3月,真正意义上支持DirectX 10的游戏的总量,仅为56个……甚至直到今天,我们仍就能够从各色游戏配置列表中那一行“DirectX 9.0C/DirectX 11”当中读到DirectX 10的寂寞。
铸就GPU10年时代中辉煌开端的量大重要支柱,也就是图形API和对等且激烈的竞争,在接下来的3年时间里消失得无影无踪。曾经屹立于奥林匹斯之巅的诸神们纷纷陨落,整个业界仿佛都陷入了无光的寒夜。
5清冷的星光
● 清冷的星光
我们并不喜欢完全浸没在悲剧当中,相信任何人都不会喜欢这样的感觉,在一片绝望中寻找慰藉和希望才是正确的选择。所以即便GPU10年时代的中段凄冷的如同漫漫冬夜,我们依旧要抬头寻找天空中闪烁的那些星光。RV770,便是整个DirectX 10时代最能给人带来慰藉的那一点星光。
基于RV770架构的HD4870显卡
R600的构架强调的是吞吐能力,而劣势在于延迟的掩盖能力不足,所以要解决R600构架的问题,最终的核心就成了解决延迟掩盖问题并提升单元复用率。对于缓存体系和运算单元的改进不可能一蹴而就,ALU的逻辑结构也不太可能发生大变化,所以留给AMD的机会只有一个了——继续放大吞吐能力,以最暴力的手段来掩盖延迟带来的影响。但是暴力放大吞吐能力这事情说的轻巧,做起来风险极大的,要放大吞吐能力就要大幅提升运算单元的数量,而这么做也就意味着要大幅增加芯片的晶体管总数。所以其实AMD的选择只有一个,那就是赌博。
还好,它赌赢了,DirectX 10的漫漫寒夜也因此而获得了一抹光亮。
借由55nm工艺,RV770成功的将ALU团簇的规模放大了惊人的250%,被大幅放大的单位吞吐能力很好的起到了掩盖执行延迟的作用。同时为了进一步弥补缓冲体系的不足,AMD还在RV770中引入了LDS单元作为重要的补充,虽然对LDS的使用在整个RV770时代并不顺利,但依旧大幅缓解了原来严重不足的缓冲体系问题。最后,新加入的并且同属赌博战利品的高速GDDR5显存不仅为图形处理的其他部分提供了良好的助益,同时还因为其极高的带宽而“意外”的成了寄存器溢出之后可供选择的缓冲体系。有了这些改进,RV770的性能相对于R600/RV670有了大幅提升,虽然它并没有触及R600架构失误的核心,在绝对性能以及效率上依旧无法和GT200相提并论,而且对于改变DirectX 10与整个图形业界的尴尬关系于事无补,但RV770依旧凭借成功的小核心策略获得了市场的认同和褒扬。
在GPU10年时代中最黯淡的阶段为我们送来慰藉的不仅有RV770,还有同时代的一款经典NVIDIA产品,虽然它的成功多少有些出人意料,但这并不妨碍成为那个时代为数不多的亮点,它就是GeForce GTX 260+。
GT200核心巨大的尺寸除了带来极高的功耗之外,还对整个芯片的可制造性提出了巨大的挑战,想要生产出一枚完整规格的GT200核心是如此困难,以至于即便更换了55nm工艺并成功的将核心面积拉回D线以下之后,NVIDIA依旧要面对大量功能单元无法全部开启的GT200b GPU。成本/利润的负担加上RV770的压迫让NVIDIA倍感压力,无奈之下,将这些拥有216个流处理器的GT200b芯片打造成定位低于次级旗舰的全新产品,并以更低的价格包装上市就成了唯一的选择。结果出人意料的是,这些定位在GeForce GTX 275之下的显卡竟然大获成功,甚至创造了一个“260时代”。
相对于旗舰级的GeForce GTX 285/275,GeForce GTX 260+的差距其实十分微小,它仅在前两者的基础上削减了10%的ALU以及12.5%的MC单元,默认性能距离前两者也并不遥远,只需相当少的超频,GeForce GTX 260+便可以提供不逊于旗舰级单芯显卡的最终性能以及相当惊人的游戏体验,但其售价却要低上许多。以相对低廉的价格获得与旗舰级产品十分接近的特性及性能,这样的产品显然会受到游戏玩家的追捧,这种追捧甚至一直延伸到了Fermi时代的中后期。毫无疑问,它已经成为了许多玩家记忆中最美好的部分。
GeForce GTX 260+产生的影响是划时代的,它不仅是GT200时代的芯片出货主力,帮助NVIDIA度过了那段成本不断出血的艰难时期,同时也向所有人展现了一个全新产品阶层——sweetspot级市场的巨大潜力。我们完全可以将GeForce GTX 260+看作甜点级显卡的雏形和鼻祖,正是它的成功坚定了NVIDIA开发极富针对性的GF104架构的决心,并以此开创了独立架构甜点级产品的先河。而甜点级产品的最终出现和繁盛,则成为了GPU业界持续发展并走向新阶段的重要契机。
6子夜与破晓
● 子夜与破晓
尽管我们有幸遇到了RV770和GeForce GTX 260+,但这并不足以照亮整个GPU业界的茫茫暗夜。无论从API、技术进步以及业界发展速度还是AMD/NVIDIA双方的实际表现来看,DirectX 10时代都是不折不扣的黑暗时代。
导致GPU业界进入黑暗时代的因素很复杂,这其中既有巧合也有必然,新版本API的稀薄存在感就属于典型的命运使然。本来微软的初衷是提供一个能够有效提升软硬件效率,同时维持良好向下兼容性的DirectX,这样做显然即对程序有利,也充分照顾到了程序员的感受。但就是这种“照顾”无意间触碰到了许多负面的人性,包括懒惰、贪婪以及守旧等等。程序员们对DirectX 9的坚守与其说是因为DirectX 10缺乏革新和吸引力,倒不如说是寻求更为安逸和低成本的解决方案罢了。再加上意料之外的金融危机对整个业界的冲击以及家用机平台的崛起,DirectX 10能够在历史上留下些痕迹其实反倒是一间挺不容易的事情了。
在GPU的黑暗时代崛起的家用机平台
如果说DirectX 10的命运尚属巧合,那么竞争的失衡就是GPU业界进入黑暗时代的必然推动力了。R600的失败是没有任何辩驳余地的,但一次架构设计的失败本来不应该如此可怕。在DirectX 9时代,无论ATI还是NVIDIA都曾经经历过与R600程度相当的挫折,但这些挫折都没有导致竞争的失衡,NV30/R420不仅没有让双方一蹶不振,甚至还为两者在挫折后的崛起乃至整个业界的繁荣昌盛奠定了坚实的基础——无论ATI还是NVIDIA,都会在失败后拼尽全力在架构设计和绝对性能层面挽回损失并给予对手强有力的回击,DirectX 9时代之所以能够产生众多技术进步并被人所铭记,很大程度上正是源自这种“正面的”、“堂堂正正”的激烈对抗和碰撞,但是这种美景并没有再次降临到GPU业界,正面的能够擦出璀璨火花的技术及架构竞争,在整个DirectX 10时代甚至连一次都没有出现过。
R600的这次失利,在事实上彻底击倒了AMD。AMD对ATI的收购严重的同时挫伤了双方的实力,由此产生的各种令人扼腕的资源/时间浪费以及沉重的债务负担将本属于ATI的翻身机会消磨殆尽,并让AMD从此失去了与NVIDIA进行正面对抗的能力。虽然RV770获得了市场的肯定,但其性能以及对技术进步的推动作用显然完全无法与GT200相提并论,它所取得的成功仅仅是狭隘的对AMD财务状况的改善(这种需要被“改善”的源头其实本来就不应该存在!),并没有缩短双方在架构研发层面的差距。NVIDIA虽然迫于压力承受了成本出血之痛但却坚定的维持了原有的架构路线并持续前进,而转进小核心策略并放弃正面技术对抗的AMD与其说是执行更加灵活的市场策略,倒不如说是在拉开落后差距之后选择了逃避。
如果逃避能够缩小差距并带来真正的胜利的话,这个世界上的失败者也许会大幅减少到变成稀有动物也说不定呢……
一个没有存在感的DirectX版本、一次正在被越来越多人看清真面目的错误收购、一个与前者息息相关并严重影响后续历史进程的战略性架构设计失误,这几乎就是GPU业界在DirectX 10时代的全部遭遇。看似不多,但绝对痛彻灵魂。
GPU十年时代的开端是灿烂辉煌的黄金时代,中段则陷入了漫长的黑夜,光与影的轮转倒也算符合世事常理。那么在黑夜之后我们又将迎来些什么呢?接下来的DirectX 11会给业界带来怎样的冲击?AMD和NVIDIA又将在怎样的竞争状态下为我们上演什么内容的舞台剧呢?
Even after the darkest night,morning always comes……这句源自《皇牌空战6》的经典台词,也许可以作为上面这些问题的回答吧。至于更多的细节和精彩,就让我们在《GPU十年历史追忆(下)》中再见吧。
如果是你是一名DIY发烧友,一定对显卡的发展有兴趣。本文作者将用浅显、诙谐的文字,让你领略GPU发展这10年那点儿事。
推荐经销商