Bulldozer:AMD的复仇之刃

今年1月份,AMD公司提拔了两名技术高管Sam Naffziger、Leendert van Doorn为公司的科研理事(Corporate Fellow),这也是AMD公司对技术人员的最高奖励,之前获得这份殊荣的还有02年的Rich Witek、05年的Rich Oehler、06年的Bruce Gieseke以及07年的Raj N.Master和Phil Rogers。

在这些技术大牛当中有两人是跟AMD的核心业务CPU设计有关的,Bruce Gieseke领导设计了AMD的“先进直连”架构,也就是自K8时代以来在AMD CPU架构中有着重要作用的HyperTransport(HT)总线技术。Sam Naffziger的经历更牛,出身HP,后转投大腕Intel,05年开发出安腾(Itanium )架构,06年投奔AMD,参与Bulldozer(推土机)和APU架构研发,现在所知的Bulldozer、Llano(K10.5架构APU)、Orochi(Bulldozer服务器版)以及Trinity(Bulldozer增强架构)都是在他的参与下研发的。

有意思的是,K8是在2003年发布上市的,而直到三年后它的设计师才得到了AMD的奖励,Bulldozer架构的CPU迄今尚未上市,其设计师就已经修成正果,位列企业理事“仙班”,其中的含义不言而喻—AMD不仅对”Bulldozer”寄予厚望,而且也对它充满了信心。

AMD复仇之剑:Bulldozer推土机预览及展望

自信来自于实力,作为AMD耗尽心血研发的新一代CPU,Bulldozer堪称K8之后的最大革新(K10架构只能算K8的增强版,架构变化并不多),它改变了传统CPU的设计思路,将CPU模块化,每个模块又可细分为两个微内核,这两个微内核相互独立而又高度共享浮点单元、L2缓存等功能单元。同时模块化设计也使得AMD的CPU支持多线程技术,每个模块就可以处理两个线程,这种实现多线程的方式与目前支持多线程技术的CPU所用的方法有很大区别,Bulldozer的架构设计也要重来。

由于这几年AMD一直没有发布什么CPU新产品,AMD在当前的CPU竞争中实际上一直处于防守态势,Phenom II面对Intel的疯狂进攻已经显露疲态,因此即将发布的Bulldozer对AMD来说意义非凡,它成为AMD的反攻武器,只许成功不能失败。Bulldozer到底有多锋利,将成为AMD能否复仇的关键。

梦断SSE5,Bulldozer的开场序曲

早在Bulldozer这个名字未被人们熟知之前,AMD就已经为它做准备了新一代X86指令集。指令集是CPU架构的的关键所在,使用什么样的指令集也决定了一款CPU的先进程度。在X86架构中,SSE(Streaming SIMD Extensions,流式单指令多数据扩展)指令集当之无愧地成为绝对主角,作为X86架构的当家人,Intel也一直牢牢掌控着SSE指令集的发展方向,从SSE、SSE2、SSE3再到分批问世的SSE 4.1和SSE 4.2都是Intel首先发布的。

AMD复仇之剑:Bulldozer推土机预览及展望
抢先发布SSE5指令集

2007年8月AMD抢先宣布了SSE5指令集扩展,并表示将之用于2009年发布的Bulldozer架构处理器上(AMD当时画了好大一个饼)。SSE5依然是128位指令集,一共有170条指令,旨在解决先前SSE指令集的一些缺陷和不足,充分发挥多核心及多媒体的性能。其中最主要的是新增的3操作数指令(3-Operand Instructions)和熔合乘法累积(Fused Multiply Accumulate,FMAC)指令,这两条指令都可以大幅提高操作效率,简化代码。

作为老大的Intel当然不会那么容易就范,直接弃用SSE名称,于08年推出了AVX(Advanced Vector Extensions,高级矢量扩展)指令集规范(详细情况可点击这里)。AVX支持256位指令,理论性能可比当前128位CPU提高一倍,另外AVX在思路上与SSE5有异曲同工之妙,同样支持3操作甚至4操作数指令,乘加指令以及一些置换指令,而且还有SSE5没有的特性,比如SIMD浮点指令长度加倍,为旧版SSE指令增加3操作数支持等。由于Intel的强势,软件厂商大都倒向支持AVX指令。

AMD复仇之剑:Bulldozer推土机预览及展望
Intel后发先至赢得了下一代指令集之争

AMD眼看大势已去,也于09年5月份宣布支持AVX指令集,但是SSE5中的一些特色指令并未完全弃用,而是利用AVX规范重写,其中的FMA4、XOP和CVT16指令都将在Bulldozer架构上得到支持,这也是泄露的Bulldoerz处理器的CPU-Z截图上会显示超多指令的原因。

这场指令集之争也对Bulldozer的上市造成了一定影响,前面提到AMD最初打算在2009年发布Bulldozer,但是因为要重新设计一些功能单元以支持AVX,Bulldozer的上市时间也是一拖再拖(AVX的影响也只是部分原因,Bulldozer的延期还有其他因素)。

谈到指令集的问题,其实Bulldozer身上不仅加新,而且也有除旧,它不再支持AMD独家的3DNow!指令,去年的时候AMD就已放言未来的处理器不再支持这一指令集,而Bulldozer的一些文档上已经看不到3DNow!指令集的身影了。由于目前单独针对这一指令优化的软件不再是主流,放弃3DNow!指令也不会有什么影响,不过其中的PREFETCH、PREFETCHW两条指令将会保留。

Bulldozer未出世就已遭遇险境,AMD除了在X86-64位指令上令Intel低过一次头之外,指令集方面还是要跟在Intel后面。乐观点看,这并非什么坏事,指令集统一对软件开发是一件好事,双方指令集不兼容更容易导致软件应用层面出现问题。虽然在指令集上落了下风,不过Bulldozer的革新重点不在指令集上,而是革命性的架构设计,故事才刚刚开始。

突破传统,Bulldozer设计思路大不同

自从X86架构成型以来,Intel和AMD等厂商的CPU设计思路几乎是一成不变,为了获得更强的性能,采取的多是优化或者加入新指令集,加大L2缓存(cache)容量,引入L3缓存等方式,这些年除了HT与QPI直连总线算得上创新之外,CPU内核部分并没有太大改变。进入多核时代后,设计思路则转向多核心以及多线程两种方式。

CMP(Chip MultiProcessors)也就是增加核心数量,现在桌面级CPU拥有四核心乃至六核已不是什么新鲜事,而服务器领域也有十二核、十六核CPU出现。用CMP方式提升性能是显而易见的,但是它的缺点是成本要随核心数增加而不断提高,内核数量达到一定程度性能提升也不成比列。

SMT(Simultaneous Multithreading)也就是我们常说的超线程技术,它可以让一个CPU核心的多个线程共享资源并同步执行,硬件上几乎不需要增加成本。虽然服务器领域应用SMT多线程技术已有多年,但把SMT技术带入桌面领域还要归功于Intel,P4时代以HT(Hyper-Threading)身份登场,不幸遭遇P4的疲糜,之后的Core时代HT超线程技术销声匿迹,直到Nehalem架构上重新启用并一直延续到现在的SNB架构,只是现在的超线程技术与与P4时代的HT超线程在技术原理上早已不完全相同。

AMD的CPU并不支持SMT超线程技术,目前AMD在市场上实行的“田忌赛马”策略实质上就是用CMP技术对抗Inte的SMT技术,相近价位下用四核以及三核对抗Intel的双核,用六核对决Intel的高端四核。这种策略看似高明,但是二者在成本上差异明显,是苦是乐只有AMD自己知道了。

之所以扯这么多CMP和SMT的差别,就是因为AMD的Bulldozer架构的设计思路不同于当前的CMP以及SMT,而是走上了第三条路,既非硬件上增加CPU核心数,也不是软件上虚拟多线程。

AMD复仇之剑:Bulldozer推土机预览及展望
Bulldozer不走寻常路

AMD在设计Bulldozer时考虑的是如何最大化提高多核心多线程的效能,传统的CMP与SMT各有自己的优点,同时也存在着局限性,SMT不如CMP效率高,而CMP代价(不单单是成本)比SMT高。为此Bulldozer一改传统CPU核心设计思路,设计了一个模块(Module),每个模块中又有两个独立又关联的内核,借此实现了一个模块同时运行两个线程的目的。

AMD复仇之剑:Bulldozer推土机预览及展望
Bulldozer一改传统而采取模块化设计实现了SMT多线程

组成Bulldozer的一个功能单元的不再是传统的整数+浮点单元内核,AMD称之为一个模块(Module),每个模块中拥有两个整数单元(Integer Unit)和一个共享的弹性浮点单元(Flex Floating Point),其中整数单元各自配备了一个调度器(Scheduler),因此可以同时执行两路线程,AMD称自己的多线程技术为CMT(Cluster Multithreading)。

理想情况下,需要计算的数据恰好全是整数型,那么经预读(Fetch)、译码(Decode)之后数据会分别经两个调度器分配至相应的整数单元进行计算,同一时间内可以有两个线程在运行,而且这两个线程都是实打实的硬件计算,效率远超HT超线程这样的软件模拟。之前有传言AMD在搞的是逆线程(anti-HT),可以将多个线程合并为一个线程,这个技术的存在与否并没有谁来证实,不过看看现在的Bulldozer架构,两个整数单元可以同时运算一个任务,从模块的角度看就相当于把两个线程合并为一个,与逆线程的思路有异曲同工之妙。

AMD复仇之剑:Bulldozer推土机预览及展望
增加的一个整数单元只占用一个模块面积的12%,占整个核心的面积

据AMD称,目前CPU中超过80%的运算都是整数运算,增加一个整数单元的好处是显而易见的,用增加5%的核心面积的微小代价即可换来80%的整数性能提升。

最终设计出来的Bulldozer架构如何呢?

AMD复仇之剑:Bulldozer推土机预览及展望
4模块8核心Bulldozer的架构图(来源:chip-architect)

这张图来自chip-architect.com,也是目前最为详细的揭露Bulldozer架构的一张图,结合AMD官方公布的一些消息可以确认图中的大部分信息还是很准确的。

上图中显示每MB L3缓存的面积为3.85mm2,对此结果笔者存疑,因为缓存通常都要占用很大面积,不过09年的时候AMD曾和T-RAM公司达成合作,未来的32nm工艺将会使用T-RAM作为缓存,如果Bulldozer上使用了技术先进的T-RAM缓存,那么缓存的占用面积会更小,上述缓存面积还有可信度。

Bulldozer每个模块的核心面积为18.0mm2(不含L2缓存),包含2MB L2缓存的情况下每个模块核心面积则为30.9mm2,集成2.13亿个晶体管。与之对比的是SNB架构每个核心的面积为18.4mm2,同时集成512KB L2缓存。那么由此估算下,Bulldozer的每个核心可以看作集成1MB L2缓存的同时面积约为15.5mm2,核心面积要小于SNB。AMD的Bulldozer在新工艺的支持下,同等级别下的核心面积已经接近Intel的水平(甚至更低),远高于K10时代的水准。

这里只考虑了CPU部分的核心面积,还要注意到SNB和Bulldozer都会集成了GPU核心,它们对核心面积的大小也有重要影响。SNB中GPU分为HD 2000和HD 3000系列,双核CPU的核心面积分别为131mm2和149mm2,不过Bulldozer目前集成的GPU消息不明,所以这个无从对比。

Source: http://news.mydrivers.com/1/194/194633.htm