标题：推土机架构
简介
推土机（Bulldozer）是AMD全新微处理器架构。“推土机”将采用32nm SOI工艺，采用了“模块化（Module）”的设计，每个“模块”包含两个处理器核心。每个BulldozerModule将会集成2M L2缓存， 8MB的L3缓存，核心面积为30.9平方毫米。推土机架构采用了全新的控制结构和运算单元，其性能体现在整数运算、浮点运算方面。推土机架构的时钟发生器、电源管理器、L1缓存等……均是开发重点。AMD计划在2011年推出基于该架构代号为Interlagos服务器级处理器和代号为Zambezi桌面处理器，其中 Zambezi桌面处理器将是针对中高端市场推出的产品，采用新的Socket AM3 r2接口插槽。新处理器将支持新的内存控制器，将可带来更高的内存带宽表现，支持动态频率提升技术（turbo core）等。
推土机架构新技术介绍
一、革新的Turbo Core技术——全核心加速技术
Turbo Core技术：主要是指对于一些没有完全消耗到最大程度的工作负载，去加快时钟速度。在多种不同工作负载上，使用了TurboCore可以最大增加500兆赫兹的性能。最重要的一点，TurboCore加速指的是所有核的加速，和有些核加速技术明显不同，以往的核加速技术可能需要关闭一些核，只对部分核进行加速。采用TurboCore技术，最多可以使所有核增速500兆赫兹，如果再关闭一些核运转的情况下，加速将会超过500兆赫兹。同时我们还对内存控制器进行了进一步优化，从而提高内存的吞吐量。
除了每个核心独享4个整数计算管线，在浮点运算上，“推土机”采用了“FlexFP”技术，两个核心共享一个浮点调度器和两个128位FMAC乘法累加器，可以进行组合，每个时钟周期可以完成两次64位双精度计算或4次32位单精度计算。如果一个核心没有进行浮点运算，那么另一个核心可以占用这两个128位的FMAC，在一个时钟周期完成4次双精度运算或8次单精度计算，AMD将其命名为 AVX模式。这种技术保证了“推土机”的浮点运算能力，在高性能计算中并不会因为“共享”而牺牲性能。
二、新接口新工艺
推土机处理器将采用SocketAM3+接口，941个针脚，不同于目前938个针脚的Socket AM3接口，其好处是可以支持DDR3-1866内存和高级节能技术，而且AM3+将是AMD的最后一代针脚栅格阵列(PGA)封装，之后将改用触点栅格阵列(LGA)，等到Fusion融合处理器降临的时候就会使用LGAAF1新接口，触点多达1591个，支持DisplayPort 1.2标准、PCI-E 3.0规范(32条信道)、四通道内存。
三、加强型内存控制器
8年前AMD首家推出集成内存控制器，根据AMD在这一领域的经验和非常好的技术，又在这一代产品中全面提升了内存控制器的性能。首先对内存控制器在效率方面进行了针对性的重新设计和完善，因此实现30%的内存性能提升。在提升30%性能基础上，让内存支持1600MHz频率，可以获得额外20%的性能。两项加起来，可以实现内存控制器50%吞吐量提升。
四、同时支持AVX指令和SSE指令
FLEX FP是AMD至今为止最有创新意义的浮点计算技术，每一个模块都有一个FLEXFP进行浮点运算。如果使用传统128位编码，意味着每个核会有单独的浮点运算单元。与友商相比，如果在128位编码前提下，AMD所执行的数量多一倍。如果是256位AVX编码，Bulldozer可以把两个浮点运算单元放在一起执行。所以在256位编码执行模式下，与友商比较，执行的数量是一样的。但是Bulldozer有一个非常大的优势，就是可以同时执行256位AVX指令和SSE指令。而友商就不能做到这点，他们只能在AVX或SSE中选择其一，这样的优势能够让Bulldozer在高性能计算、媒体编解码以及在一些技术型运算方面有更高的性能。
五、更先进的电源管理技术
每个模块内第二个整数核心所需要的电路只占总核心面积的12%，从芯片级别上讲这只会给整个内核增加5%的电路。更多的核心、更少的空间，这显然有利于提高单位功耗、单位成本的性能。
能耗大小是由被通电时钟数量决定的，它取决于执行一个普通指令（运算）需要让多少晶体管处于通电状态。在最大时钟供电的百分比下，正常应用状态和闲置状态下，Bulldozer都具有非常好的能耗表现。同时在各能耗单位上进行了优化，可以在各种单位下进行电源关闭。高性能运算能耗之所以高，主要是由于浮点运算，而一般应用运算主要是在执行单元消耗得最高。同时还有闲置状态下，AMD的技术可以做到对于那些完全用不着的核，把电源完全关闭。去年AMD产品有一个大转型，AMD推出了新插槽，2011年推出的推土机可以使用2010年的插槽。而友商为推出新平台，同时推出了新插槽，这也使得AMD更占优势。
总结：推土机重点改进的地方包括功耗/核心面积效率、新的ISA支持、核心扩展性、模块化设计理念，有望显著改善单位功耗和面积的性能。
推土机架构特点
1、内核设计全面模块化
AMD的“Bulldozer”是在K10之后推出的全新一代处理器架构，对AMD来说，这是自K7以来AMD处理器架构的一次根本性变革，在核心架构及功能性上都较K10有较大的改变。相对于目前AMD主流处理器的架构，Bulldozer核心最大的亮点就是引入了模块化设计，这让处理器在功能更加灵活的基础上更容易控制成本。我们都知道AMD在目前无论是羿龙(Phenom)四核，三核还是双核的内核结构都是固化的——统一采用四核（或者更多核）的物理结构，再根据市场价格策略来决定对内核进行有选择的屏蔽。这对产品的性价比取胜的AMD来说难以控制成本，而且要向在目前架构上开发出更多的核心的产品几乎要更新设计基板布局。
而Bullbozer处理器所引入的模块化设计刚好可以解决这个问题。Bulldozer在核心设计方面每两个核心组成一个单独的单元（称之为“核心模块”，两块物理内核集成到一个模块中），比如双核处理器直需要集成一个模块就可以了，即使是八核处理器也只需要集成四个模块，这让产品生产及成本控制更加具有灵活性，处理器核心模块的两个核心各自拥有一级缓存，但是共享二级缓存和预取，解码单元，所有的“核心模块”共享8MB三级缓存和北桥模块。
那么以后AMD处理器内核数量如何定义呢？未来的新架构四核心处理器指的是四个这样的模块呢，还是四个计算核心呢？AMD对此给出的回复是：“将每个拥有双整数核心的推土机模块视为一个独立的单元就对了。”显然，AMD在这里可以的回避了单纯的核心数量问题，更强调两两组成的有机整体，所以在面对推土机架构处理器的时候我们可以说它是四核心，八核心的，也可以说成是双模块，四模块的。只不过未来AMD或许不会再有奇数核心的处理器了。
2、高效的集群多线程架构
Bulldozer架构中的另一个新元素就是采用了基于集群的多线程技术。Bulldozer的内核模块是一个可以同时运行两个线程的处理组件，两个内核可以执行两个完全不会相互干扰的线程，有点类似于Intel的双核处理器的超线程奇数。
尽管双核、多线程和Bulldozer在线程并行执行方面是相同的，但是内核的分区却截然不同。多线程就是在一个单个的处理核心内同时运行多个工作线程的技术，和CMP芯片多处理器技术不同，后者是通过集成多个处理内核的方式让系统的处理能力提升，现在主流的多核处理器都是用了CMP技术，而像Pentium 4、Corei7这样的处理器带的“超线程技术”则属于多线程奇数，而Bulldozer是基于集群化多线程架构，Cluster-BasedMulti-threading：CMT，也称多簇式多线程技术。
在Intel的超线程方案中，采用的是复制处理器架构状态的方法来实现超线程，核心内部并没有增设一套额外的硬件执行单元来处理多线程，只是增加了处理器中存储线程有关数据的单元数量，并在硬件执行单元空闲时将这些数据送往其中处理，一边增加处理器执行单元的利用率。这种设计有一定的缺点，比如它只使用了一个指令窗口来负责两个线程的调度、执行和引退，效率并不高。这就像是生产线只有一名管理调度人员，一个人很难同时处理两个任务，这样有时候便会出现生产线故障，而处理器在碰到这种情况时性能则会出现明显的下降。
相对于传统超线程或双核技术，Bulldozer这种设计集群化架构的理念是让双核模块在多线程运算中更高效。Bulldozer每一个模块中加入了额外的执行单元，每一个模块都具备可以将一个大任务细分为多个并行任务的能力，这些生产线可以按需要任意整合，不会对整个装配线的效能造成影响。因此CMT技术的效能要高于传统的多线程方案。根据AMD介绍，单个“推土机模块”可以达到80%左右的多线程性能提升，而且所用的晶体管数目似乎并不比Intel的超线程奇数更多，这是一个相当鼓舞人心的成就。
根据路线图，Bulldozer架构会推出四核心、六核心和八核心的版本，其中四核心的证书性能大约比频率类似的Phenom II X4高出10%~35%。需要说明的是，CMT并不是AMD独有的技术，例如Sun和Oracle开发的Niagara/Niagara2(Ultra-SPARCT1/UltraSPARC T2)服务器处理器，尤其是Niagara2都采用与Bulldozer类似的线程设计。
3、更强的浮点和整数计算性能
Bulldozer所采用的集群化多线程架构之所以能实现如此高的性能，其中一个大原因就是AMD增加了CPU的运算单元——每个模块中的两个线程都具有独立的整数运算单元，只有浮点单元是共享的，这被称为具有两个证书运算单元“簇”。Bulldozer这种将两个线程的整数运算独立开来的设计可以更有效的提高处理器在基本应用中的性能。由于Intel的Nehalem架构的超线程奇数是两个硬件线程共享3组运算单元，冲突在所难免，而Bulldozer则是两个硬件线程独享4个整数运算单元，性能提升将会更加明显。根据AMD公布的Bulldozer执行单元的结构图，负责整数运算的整数执行单元和负责地质计算的载入/存储单元一共有4组（每单元2组）。（在K7/K8/K10中这样的单元也仅有3组，刚好对应K7/K8/K10的每周期处理3条宏指令的能力。）
需要说明的是，Bulldozer这种双“簇”也让AMD在产品设计上具有更高的灵活性上，未来处理器的分级可以通过控制“簇”的数量来实现：比如以后的Bobcat处理器就是切掉一个整数运算“簇”的Bulldozer。此外，Bulldozer的每个模块还具备两条128Bit FMAC(乘法累加运算)流水线，浙江能够满足Bulldozer中信加入的AVX指令集扩展的需求，这种指令集扩展中包含了大量的128Bit多媒体指令集。
4、制作工艺“两级跳”
随着内核的倍增，处理器对生产工艺也提出了更高的要求，因此近几年来半导体厂商也会通过各种各样的信技术的是是用来维持摩尔法则的“More Moore“。在处理器生产工艺应用上，Intel一直走在AMD的前面，酷睿采用32nm制程已经差不多半年，但AMD的产品目前仍停留在45nm！这种情况将随着Bulldozer的诞生而得到改变，Bulldozer将采用32nm制程。预计32nm工艺将于2010年第三季度开始试产，病在2011年为AMD提供产能，28nm工艺于2010年第四季度上马，超低功耗版28nm工艺则排在2011年第一季度，它们都会是用HKMG技术。这意味着AMD将在2010年完成产品生产工艺升级的“两级跳”，从45nm进化至32nm后迅速再次进化至28nm，追回被Intel落下的时间。
此前，AMD已经展示了它们28nm产品的晶圆图，看来新技术似乎已经非常接近最后可用的程度。如果真的能够实现工艺两级跳，那么长期困扰AMD的工艺制程问题有可能得到巨大改善，AMD将走出目前的窘境，进入全新发展的时代。
5、AMD推土机接口又升级
Bulldozer架构将采用新的AM3+接口，拥有941个针脚（AM3是938针、AM2+/AM2是940针），不同于目前938针脚的SocketAM3接口，其好处是可以支持DDR3 1866内存和高级技能技术。需要说明的是，AM3+是AMD最后一代针脚栅格阵列（PGA）封装，之后将改用触点栅格阵列（LGA），等到Fusion融合处理器降临的时候就会使用LGA AF1新接口，触点多大1591个。针对兼容性方面，按照AMD的说法，AM3+新接口处理器不能使用在目前的AM3插座主办上，但是现在的AM3接口处理器却能够用于未来的AM3+新插座主板。
其实AMD最初也考虑过让Bulldozer沿用AM3接口，但是随后意识到必须做出一个选择，是继续提供AM3而损失新架构的一些新特性，还是升级接口带来更好的性能和功能？最终为了长远利益，AMD选择了后者。Bulldozer处理器将会首先用于服务器，预计首批芯片将是代号为“Interlagos”的服务器处理器，核心数在12个~16个之间，预计在明年发布。而针对桌面服务器市场，Bulldozer将会有4/6/8个核心的三个版本，三级缓存容量为8MB，支持DDR3 1866，首款采用Bulldozer架构的桌面处理器产品代号Zambezi，将成为AMD下一代高端桌面平台Scorpius的核心。
推土机架构解析
一、CMP和SMT
首先有必要来回顾一下CMP和SMT的优劣势：
CMP：CMP的方式非常直接，简单来说，CMP是通过“复制”物理核心来扩展处理器在多线程软件中的性能，这是获得最佳性能一种最简单和最有效的方式。但CMP的缺点是制造成本很昂贵，并且也要受到处理器制造工艺的限制，毕竟不能将芯片做的越来越大。并且CMP的方式对负载要求也很高，只有经过适当并行优化的负载才能充分发挥CMP的性能，很多核心的CMP常常会浪费资源，在一些应用中，主频更高、结构更简单的双核和四核处理器就往往可以获得更好的性能。
SMT：SMT是一个相对廉价的技术，比如英特尔的Hyper-Threading，允许每个物理核心运行两个同步线程。SMT的设计思想是充分利用每个核心的资源。如果一个物理核心只有一个执行线程，那么在等待内存中的关键代码或数据的时候，线程处于停顿状态，这样核心的利用率是低下的。而SMT技术允许一个物理核心运行两个或更多的线程，可以根据当前的状况动态进行切换，如果一个线程处于停顿状态等待内存，另一个线程的指令则可以使用这个物理核心的所有执行单元，让物理核心利用的更加充分。
为了让SMT正常工作，处理器的所有代码和存储部分需要被复制或分区。例如，一个双线程SMT处理器需要两套架构寄存器和重命名寄存器，一套给线程A，一套给线程B。另外组成指令窗口的共享指令队列要具备很大的空间，这样指令窗口才能容纳足够多的来自两个线程的指令，让执行单元可以保持在忙碌状态。最后，两个线程任何共享单元，比如处理管线不同部分的指令缓存，都不能被任一个线程独占。换句话说，SMT核心的两个线程需要和另一个紧密的共享资源，保证核心的缓存单元不会空置没有线程利用。
SMT技术对那些不需要核心线程（threads）全负荷运行的多线程负载比较有意义，对于一个双线程SMT设计来说，如果这两个线程都需要花费很长时间等待主内存，那么这个双线程SMT会表现的就一个CMP双核处理器，甚至更加高效——因为它比CMP双核成本要低得多。在这种理想的状况下，一个双线程SMT核心几乎可以等同于一个双核处理器，并且能耗上还要低的多。
但SMT的效率根据负载不同会有很大差异，AMD认为在真实的应用情况中，一个双线程SMT核心仅仅等同于1.3个常规核心的效能，因为很多时候线程都在执行资源而不是等待主内存响应，换句话说，如果主内存不再是瓶颈，SMT的执行单元就过剩了，而一个SMT核心也就不再比一个单纯的核心更高效，毕竟SMT核心需要增加一些电路设计，比一个单纯的核心成本要高一些。
二、推土机架构分析　
AMD“推土机”将采用32nmSOI工艺，这让“推土机”相比“马尼库尔”皓龙处理器可以在不增加功耗的前提下增加33%的核心数量、增加50%的吞吐量。与AMD之前所有处理器都有所不同的是，“推土机”采用了“模块化”的设计，每个“模块”包含两个处理器核心，这有些像一个启用了SMT的单核处理器。每个核心具有各自的整数调度器和四个专有的管线，两个核心共享一个浮点调度器和两个128位FMAC乘法累加器。
所不同的，在K10架构中，ALU和AGU共享三个管线（平均1.5个），“推土机”中每个核心整数单元管线的数量增加为4个，2个AGU专有、2个ALU专有。L1缓存也有所不同，在K10架构中，每个核心具有64KB L1指令缓存和64KB L1数据缓存；而“推土机”每个核心具有16KBL1数据缓存、每个模块具有64KB双向L1指令缓存，至于减小的L1缓存是否会影响性能还有待观察。两个核心共享L2缓存，模块之间共享L3缓存及北桥。
AMD“推土机”模块
“模块”和“核心”，这让我们不免会产生混淆，实际对于用户们来说，没必要去刻意的关注“模块”的概念，这只不过是AMD在设计上的称谓，而当产品投放市场的时候，依旧会以核心数量为标识，比如我们说采用推土机架构的“Interlagos”服务器处理器具有16个核心，而不会说是8个模块。对于为何采用这种“模块”设计的主要原因，AMD表示是“为了减少CPU的冗余电路”。
如果采用CMP的方式，随着核心数量的增加，CPU的核心面积也会越来越大，重复的电路也会越来越多，功耗也会随之增加——因为CMP是采用复制核心的方式。而采用“模块”设计可以大大减少冗余电路，这对核心的大量增加很有意义。比如“推土机”，两个核心共享浮点部分，对于大部分服务器应用来说，整数运算的部分要远远高于浮点运算（高性能计算除外），所以将浮点执行单元共享并不会影响大多数应用中的性能。而整数部分则不是共享的，否则会造成瓶颈。
上文我们回顾过CMP和SMT设计的特点，我们可以把AMD“推土机”架构看做是介于这两种之间的一种设计：两个线程（核心）共享浮点执行单元，但是各自具有独立的整数执行资源。这看上去像是SMT的另一种形式，或者说是经过AMD改良的一种“AMD式的第三种方式”。但与传统的SMT设计不同，SMT仅仅复制的是核心的存储部分，一个线程一个存储模块（registerfile），而AMD“推土机”架构中，每个线程复制的是完整的整数执行单元硬件，一个线程具有一个存储模块（registerfile）和一组完整的整数执行单元。
AMD“推土机”核心架构的一些特性
每个线程具有独立的整数执行单元是AMD“推土机”和双线程SMT设计的主要区别。不过从“推土机”的设计来看，这并不像真正意义上的“CMP双核”，毕竟两个核心还要共享浮点执行单元，或者可以称之为“1.5核”。这样设计的好处就是能够大大节省晶体管的数量、降低核心面积和功耗，同时降低成本。即使不是真正的“双核”，但不难想象这样的设计要比SMT更加高效，相比之下，传统的SMT设计可以称之为是一种“1.2核”的设计。
AMD表示平均计算下，一个单独的“推土机”核心执行两个线程可以达到1.8核CMP的效率，但是，这样的数字也是要依赖于负载情况。虽然“推土机”的模块设计要比传统的SMT设计在执行效率上更高，但是增加的整数执行单元也提高了成本和能耗。另外，没有意外的话，AMD“推土机”应该具备很好的浮点计算性能。AMD表示虽然FPU是被两个线程共享的一个部分，如果给予足够的内存带宽，芯片将具有很高的浮点运算能力。