从R580到R600,这中间发生了许多的事情。在那个即便强调吞吐,效率的提升也依旧会被分离单元设计吃掉的年代,R580尽管理念先进但却着着实实的赢了面子输了肚子。它为效率提升付出了巨大芯片面积的代价,最终的效率却被非统一单元低下的运作率无情的吞噬。后来,ATI被AMD收购,AMD继承了ATI全部的遗产,这其中也包括了R600。
二代电吹风——X2900XT
业界很少有一款产品,能够像NV30这样在与对手的战争中输得如此的彻底。本来我们以为NV3X的经历可以让整个业界记住教训,今后很难会再出现超越NV30的失败了,但R600却非常坚定的打破了我们的观点……
同NV30一样,很多事情都要站出来为R600的失败负责,比如说慢如公共汽车的ringbus总线,充足但却各种受制并最终变得羸弱的后端设计,还有对GDDR4不正确的热衷。但同样和NV30一样,这些都不足以成为最本质的罪魁祸首。真正导致R600大溃败的原因,依旧来自像素处理单元的设计问题。
R600构架
R600采用VLIW捆绑的4D+1D结构,4个非全功能1D ALU和1个全功能4D ALU以捆绑的形式构成一个SIMD US处理单元,所有单元公用US的发射端口资源。这种设计可以带来极大的理论吞吐能力,但同时要求若干条指令以VLIW的超长指令形式统一进行吞吐,才能发挥出全部ALU的运算能力。这种强制的要求不仅对驱动被编译器提出了极大的要求,而且要求程序段必须让指令之间尽可能的不存在任何关联性。如果指令A与指令B存在条件分支,指令B需要指令A的结果作为初始判断条件,而这两个指令又非常不幸的凑巧或者不得不被打包成同一条超长指令,那结果就是灾难性的。指令A和指令B一同进入了US单元内部,指令B必须等待自己和指令A一起跑完US单元内部全部的寄存器和运算单元才能出来,而且由于条件分支关系,指令B在这一整个过程中实际上是什么都做不了的,他必须徒劳的经历一次打包过程,进入一次US,经过完整却无意义的过程之后从US中出来,再经历一次解包过程,等待指令A释放执行结果,然后再经历第二次打包过程并回到US中进行处理。如果遇到多重条件分支,这个灾难性的过程还将被重复数次。
条件分支问题
如果仅仅吞吐这么麻烦,那倒也不是什么可怕的事,我们可以通过优秀的缓冲和并行机制设计来充分的掩盖这部分由VLIW产生的延迟。但糟糕的是R600的缓冲机制就如同NV30的寄存器设计一样,无厘头到不可理喻的地步。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构架
什么?你说你有了即视感?感觉好像在哪里见过这句话?放心,那不是错觉,在NV30对战R300时,我们曾经说过一摸一样的话。现在,历史轮回,一切都被以几乎完全相同的形式重演了。
既然历史以相同的形式重演了,那导致R600失败的原因,会不会也跟着非常欢乐的重演一次呢?没错,会的——如果你把R600看成一款具有优秀DirectX 9.0C性能,同时兼顾DirectX 10要求的GPU,一切就都了然了。
AMD在R600身上所要强调的是ILP,也就是强悍的吞吐能力和单位指令执行能力,这种能力在Shader Modle3.0时代是非常重要的。如果把R600身上对应DX10的特性都去掉,并用这些节省下来的晶体管稍微强化一下总线以及材质单元等领域,然后早出1年,R600便可以摇身一变,成为一款强悍到令全世界震惊的怪兽级显卡。之前一代天骄在性能上的成功,让ATI跟当年的NVIDIA犯了几乎一摸一样的错误,令其对Shader Modle4.0的方向进行了错误的预估,同时也失去了同微软原本十分紧密的联系。甚至因为程序员对R580设计的赞美太过真诚,ATI产生了一个致命到几乎可以说精神失常的错觉——我ATI可以通过强大的影响力直接影响程序员,不管未来的Shader Modle发展成什么样,只要我设计出了自己觉得合适的硬件,就可以迫使程序员就范,从编程的角度来迁就我的硬件设计方式。
TLP与ILP之分
再来看NVIDIA,在经历了NV3X的教训之后,汲取了丰富经验的NVIDIA放下了几乎所有的架子,全天候的跑去跟微软跳起了暧昧的贴面布鲁斯。这种与规则制定者的紧密联系让NVIDIA在第一时间获得了足够的新API的信息,并根据这些信息正确的判断了Shader Modle4.0将会从传统的强调吞吐转向强调灵活shader应用以及逐步并行化的发展方向。其实无论ATI/AMD还是NVIDIA,其整体设计水平虽然确实存在差异,但却绝对没有达到足以致命的地步,因此决定胜利方的要素,几乎就是在预研过程中对未来方向的判断和把握。谁掌握着正确的方向,谁就能够在竞争中胜出,而如果双方的方向都没有错误,那必然会带来殊途同归以及平淡的结局。
至于获得正确方向的途径,我想你大概也已经发现了吧。先别急着说出来,像素处理单元变迁的故事还没讲完呢,我们不妨继续看看后面的双方对战情况吧。
三秦IT网的官方微信:更多资讯请关注:三秦IT网官方微博