正文内容 评论(0

显示世界的2012:年度GPU架构回顾
2012-11-08 09:40:25   编辑:上方文Q     评论(0)点击可以复制本篇文章的标题和链接

AMD的致命伤——寄存器

开普勒与Tahiti都是双方积蓄许久之后爆发的革新之作,都应用了双方最全面的新技术和各项突破,其中Tahiti架构的革新不仅目的性更强烈而且也应该更加行之有效,但它们在旗舰级领域的对决结局却是出人意料的。尽管提前发布了73天,同时兼顾了大量革新且具有纠偏意义的理念和技术,但基于Tahiti的HD7900系列依旧在性能、功耗和成本等所有环节全部落败。大核心在功耗和成本层面输给小核心尚属正常,但在此基础上还在性能对决中输给小核心,这在GPU发展史上是非常罕见的——即便是功耗和成本令人诟病的GF100,起码也在性能和DirectX 11效率层面保住了面子。

是什么让Tahiti对各项先进技术的整合出现了状况并输掉了竞争呢?这个问题对我们来说既熟悉又陌生——让Tahiti陷入这样境地的根本,来自其架构内部的寄存器设计,而且早在一年半以前的GCN情报分析中,我们就已经对寄存器的隐患提出了预警。


显示世界的2012:年度GPU架构回顾
寄存器在处理器中的地位

作为最重要的缓冲单元,寄存器需要面对来自线程(Thread)和数据的缓冲需求。如果设计者缺乏寄存器的使用和管理经验,寄存器对于每个线程的复用率较低,或者说每个线程在特定时间片段内可以占用的寄存器数量不足,要满足大并行度Thread的性能需求就必须通过增大寄存器总量的手段来完成。在此基础上,双精度数据通常需要组合单精度寄存器来完成缓冲需求,因此双精度数据对寄存器的需求量要来的更大,如果此时寄存器复用状况不佳,要保证线程充分并行和DP运算的性能需求,唯一的做法就只有进一步加大寄存器总量一途而已了。

为方便理解,我们将寄存器数量折合成3项指标,分别是Reg per Thread(每线程寄存器数量),Reg per ALU(每ALU寄存器均摊数量)和DP Reg(双精度寄存器)。Reg per Thread越高,架构就能以越少的寄存器总量来满足尽可能多的线程并行处理需求,进而在等量寄存器的前提下腾出更多的空间给提升DP性能做准备。Reg per Thread越低,架构就需要以更多地寄存器总量来满足并行处理需求。寄存器的整体需求量可以被不严谨但简单的量化成Reg per ALU数值,一个架构的Reg per Thread越低,它实现更高线程并行度和DP性能所需要的Reg总量就越高,摊到每一个ALU身上的Reg per ALU数值也就越高。

显示世界的2012:年度GPU架构回顾
包含缓冲体系的CU单元内部结构

好了,现在我们来到了问题的关键环节。根据AMD和NVIDIA公布的数据,Tahiti架构拥有总计8192KB的32bit Vector Reg,在不考虑Scalar Reg等其他特殊需求寄存器的前提下,其Reg per ALU为4KB,它可以实现1/4速的DP性能。而开普勒架构的Reg per ALU数量则为1.33KB,NVIDIA可以以这一数值的实现1/3速的DP性能(GK110)。另外作为参考,Fermi的这一数值为4KB per ALU/半速DP。

4KB per ALU的Tahiti和1.33KB per ALU的开普勒,这样的数据意味着什么事呢?我们来算一笔通俗的帐——1个最基本的1bit sram单元需要6个晶体管来实现,更高的频率以及更低的延迟会让单元的晶体管数量进一步增加,我们并不清楚AMD和NVIDIA目前所处的频率水平需要多少晶体管来实现1bit的寄存器,但即便忽略一切其他相关单元,单纯考虑纯sram部分并用最保守的6晶体管方案来计算,4KB per ALU意味着Tahiti架构每个ALU均摊的寄存器晶体管数为786432个(6*32*1024*4),而NVIDIA每个ALU均摊的寄存器所占用的晶体管数则仅为261489个(6*32*1024*1.33)。

显示世界的2012:年度GPU架构回顾
SMX单元中的寄存器数量

对于每一个ALU及其周边资源来说,Tahiti需要比开普勒多付出最少超过50万个晶体管的代价,而Tahiti架构总计拥有2048个Vector ALU,换句话说,就是即便以最保守的方式来计算,AMD在Tahiti架构中为寄存器所多付出的晶体管代价也在10亿以上。如果AMD进一步扩大Tahiti架构的Vector ALU规模,或者在寄存器单元中使用的是可以应对更高频率的7晶体管甚至8晶体管方案,这一数值还将继续扩大。

而Tahiti架构,一共只有4.3个“10亿晶体管”。

显示世界的2012:年度GPU架构回顾
Intel 45nm工艺下的6T sram单元

并未超越对手的计算特征和效率、比竞争对手高的Reg per ALU还有更大的DP衰减幅度,这些现象都反映了AMD在寄存器使用策略和算法上的存在的差距,它表明AMD无法完全解决诸如Reg pool以及rename之类许多环节的问题,所以只能以极大的寄存器总量来同时满足Thread性能/DP性能的需求,而这种解决方案恰恰是最致命的。单纯增加规模不仅低效,而且增加出来的晶体管并不会直接产生任何Flops或者图形性能。想要提升DP性能和Thread性能,AMD必须在扩充运算单元规模的同时付出比对手更多的寄存器晶体管代价,而对寄存器的过量使用不仅造成了Tahiti架构更容易受到D线的压迫,让功耗控制变得更加困难,还引发了一系列多米诺骨牌效应并挫伤了其在图形领域的表现。

多米诺骨牌

整体而言,一颗芯片在特定工艺下的规模是存在上限的,制造者不可能无限制的放大芯片的规模。而上限的存在又意味着两个截然不同的结局,你可以用更小的规模换取更好的可制造性,或者在触及上限时面对晶体管使用方向的平衡问题。AMD面临的由寄存器导致的多米诺骨牌效应,就是后者作用的结果。

其实这说起来很简单——Tahiti为寄存器付出了10亿甚至更多的晶体管代价,这些晶体管让它更快的达到了芯片规模的上限。如果没有这层负担,Tahiti本来可以获得更小的芯片面积以及更好的功耗表现,或者用这些晶体管来制造更多“针对图形”的单元来获得更好的图形性能。它可以被塑造成一个与开普勒架构的GK104规模相当,功耗表现比现在更加优秀的产品,或者可以用这10亿晶体管来强化并行度设计,也继续补足曲面细分性能,还能增加ALU、Tex或者MC/ROP的规模等等,对于10亿个晶体管来说,有太多美好的可能可供Tahiti去选择了。


显示世界的2012:年度GPU架构回顾
Tahiti构架CU结构细节

但是现在,由于寄存器使用策略和算法的问题,AMD不得不背负这10亿晶体管的负担。少了这10亿晶体管,以上那些美好的可能全都无法实现,Tahiti架构不得不止步于当前的规模,各项针对过去积累架构错误的先进技术改进都没有进行彻底,传统图形领域相对强势的后端优势得不到发挥,而且还要因此而承受规模释放困难,功耗难以控制等各种各样的问题。无论技术改进和愿景多美好,没有晶体管可用,一切都是空谈。所以由寄存器引发的一个又一个不利的因素像多米诺骨牌那样倒下,最终造就了Tahiti“什么改进和技术革新都好就是效果不好”的结局。

显示世界的2012:年度GPU架构回顾
Tahiti架构与开普勒架构在实际游戏测试中的功耗对比

而没有这层负担的开普勒,则利用这份优势强化了并行化结构、曲面细分以及各种各样的图形相关部分,并在突出图形性能和运算性能平衡的同时依旧维持了比Tahiti少8亿的晶体管规模。其所要经历的事情也就非常简单直接了——性能和效率高于Tahiti,芯片面积小于Tahiti,功耗低于Tahiti……

不光开普勒,即便是在GCN阵营内部,同样也存在着Tahiti的对立面,那就是面向甜品级的Pitcairn架构。

责任编辑:

  • 支持打赏
  • 支持0

  • 反对

  • 打赏

文章价值打分

当前文章打分0 分,共有0人打分
  • 分享好友:
  • |
本文收录在
#显卡

  • 热门文章
  • 换一波

  • 好物推荐
  • 换一波

  • 关注我们

  • 微博

    微博:快科技官方

    快科技官方微博
  • 今日头条

    今日头条:快科技

    带来硬件软件、手机数码最快资讯!
  • 抖音

    抖音:kkjcn

    科技快讯、手机开箱、产品体验、应用推荐...