扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在11月的时候,AMD公司在2009年财务分析师大会(2009 Financial Analyst Day,美国时间11月11日)上公布了其平台路线图的最新详情,并透露了新的Bulldozer架构的一点细节。通常,一种CPU架构会纵向应用到从高端到低端的各个产品线上,新的Bulldozer(推土机)主要面向服务器平台和桌面市场,而在低功耗消费级市场上则有一个推土机的简化版的Bobcat(山猫),目标大概是对手的Atom处理器。
2010-2011年AMD服务器平台路线图,2011年将是Bulldozer架构
2009-2011,AMD服务器处理器路线图
Bulldozer架构的主要目标在于高效率的多线程,在处理器走向多核化的现下,不少商用处理器都具有了多线程技术。MultiThreading多线程就是在一个单个的处理核心内同时运行多个工作线程的技术,和CMP(Chip MultiProcessing,芯片多处理)不同,后者是通过集成多个处理内核的方式来让系统的处理能力提升——也就是现在常见的多核技术。现在主流的处理器都使用了CMP技术,而如Intel Pentium 4、Core i7这样的处理器带的“超线程技术”则属于多线程技术。
机密揭露:Intel超线程技术有多少种?
Bulldozer处理器架构
不过,Bulldozer推土机架构实现稍有不同,它并不是单纯的SMT(同步多线程)或者CMP(多核)。本文试图就现有的资料对其进行一些分析,不过,在处理器架构方面,AMD透露的资料向来并不多,因此现在任何对Bulldozer的描述都包含了不少的猜测因素。
废话少说,Bulldozer架构的最大特点就是实现了两个线程,按照图下的说法,它是two tightly linked cores(两个紧密连接的核心),并share resources to increase efficeiency(共享资源以提高效率),它是双线程还是双核心呢?
AMD Bulldozer
双核心我们知道,就是晶圆上集成两个一样的核心,它处在处理器的“大”架构上而不涉及到处理器的“微”架构,而双线程则不同,它是在一个处理器核心内硬件实现两个线程,如下图所示:
最典型的双线程:Intel Pentium 4或者Core i7
Intel的超线程是在内部增加了少量的线路实现了同时运行两个线程——两个线程共享相同的运算单元,而AMD的推土机架构实际上是继续增加运算单元,在资源共享的程度上比起超线程来有所降低,如下图所示,两个线程具有独立的整数运算单元,只有浮点单元是共享的,这被称为具有两个整数运算单元“簇”:
整数单元是日常运用当中应用最多的,例如,在终端处理当中是不允许使用浮点运算的,大多数服务器应用也不涉及到浮点运算,浮点单元通常只在科学运算单中有使用。不过现下的设计当中一些整数的SSE运算也使用了浮点单元。AMD Bulldozer通过将两个线程的整数运算独立开来,从而达到了大幅度提升基本应用的性能,具体的表现如数据库服务器的吞吐量:
Intel Nehalem-EP超线程能力对比:with SMT vs without SMT :超线程能力对比测试:Benchmark Factory
由于目前Nehalem架构的超线程技术是两个硬件线程共享三组运算单元,冲突在所难免,而Bulldozer则是两个硬件线程独享四个整数运算单元,性能提升将会更加明显
显然AMD的“簇状双核”架构是在微架构内部的改动,因此按照笔者的看法,它属于多线程技术的一种,只是更偏向“多核”一些,它介于SMT和CMP之间,称为SMT也未尝不可。
由于浮点运算在通常的服务器应用上较少,因此浮点运算单元是共享的;AMD处理器向来都有整数和浮点具有独立的调度器的习惯——同时也拥有独立的寄存器文件
伴随着这样的特别形式的多线程,Bulldozer微架构的资源共享有和常见的超线程不同,在Bulldozer上,拥有三组Scheduler调度器:两个整数和一个浮点,L1 DCache(数据缓存)也每个线程独立,在L1 ICache(指令缓存)、指令拾取、解码器、L2 Cahe都是共享的。
Nehalem Microarchitecture,经笔者整理
Intel Nehalem-EP处理器首发深度评测
Scheduler大致上和上图的Reservation Station、ROB、MOB相当,也就是每一个硬件线程都有自己独立的乱序执行管理引擎,之所以说这个是因为,这样的结构很大程度上决定了两个整数运算核心是独立的,一些粉丝向往的“逆向超线程”是不可能会实现的。两个运算核心具有独立的数据缓存,至少在指令级别上,两个运算核心协作的代价太大。此外,双“簇”的结构也意味着它不太可能,如Intel Nehalem这样的架构加上SMT是实现了最灵活的多运算单元调度,而双“簇”则可以实现更大的吞吐量,以灵活性上为代价。
Bulldozer的微架构确实有些新意思,在设计工程量上估计不算太低——都集中在双“簇”运算单元上以及相关的指令调度上。因此在处理器前端上很可能是和目前比没有什么变化。当然双份的指令拾取是必要的。
AMD Bulldozer
在解码器上,目前的K8~K10架构都是具有三个复杂解码器,解码器将macro-ops——x86指令解码成一条或者多条micro-ops,不同的x86处理器虽然都运行相同的x86指令,不过内部的micro-ops则各有不同。Bulldozer很可能是具有四个复杂解码器。Nehalem则是一个复杂+三个简单,相对来说,笔者比较喜欢四个一样的复杂解码器。之所以说是复杂,是因为虽然大部分x86指令都可以解码成一条micro-ops,但是有些指令则可能会解码出数十条micro-ops。
解码器通常被认为是前端的一个瓶颈,特别是在多线程的情况下。Bulldozer解码器输出若无意外,应该是4条micro-ops指令每周期。
Nehalem Microarchitecture,经笔者整理
所谓的乱序架构,包含了寄存器重命名等一堆架构,大致包含在图上的Scheduler阶段,由于整数单元簇包含了整个硬件线程对数据缓存操作的Load/Store操作,因此Scheduler之前指令应该会按照硬件线程分开,再经过重命名结构发射入类似reservation satation这样的组件。reservation station用于保存一组当前正在执行或者等待执行的指令,AMD处理器一向有整数、浮点具有独立的reservation station的习惯。
在执行单元上,AMD给出的是每个硬件线程具有4条整数执行流水线,此外两个128位浮点F-MAC运算单元,和一般的浮点运算单元有所不同,不过这不是现在的重点……重点在于整数运算流水线,有几个是Load/Store单元,或者具有另外的Load/Store单元?这些目前都是谜团。一个很可能的情况是一半是通常的运算单元,一半是Load/Store单元。这比较符合前端解码器的指令输出能力。不过这样,每个硬件线程就相当于一个双发射的处理器而不是通常的四发射处理器,因此笔者也倾向于每个硬件线程在四个整数流水线之外具有两个独立的Load/Store单元。
距离2011年还有1年左右的时间,AMD Bulldozer架构应该已经基本上定型了,不过现在具有的消息仍然很少。Bulldozer比较特别的是它通过一个“簇”的架构来实现多线程技术。 笔者认为它是SMT,或许你们会具有不同的看法。
AMD Bulldozer,硬件双线程,32nm SOI high-K金属栅极工艺,主要就是通过新的多线程技术提升服务器应用的吞吐量
除去L2、L3缓存,通常如HTT(超线程)这样的两个线程的SMT(同步多线程)通过5%左右的微架构晶体管增加达到了30%左右的吞吐量提升,理想的双核CMP架构则通过100%的微架构晶体管提升达到理论上100%的吞吐量提升,Bulldozer则看起来通过50%左右的晶体管数量提升达到了80%的吞吐量提升。增加的晶体管不仅仅用于额外的4个运算单元及配套的调度器、L1缓存,还要包含其他对应双线程处理的部件。
就处理器架构来说,多核心/多线程的瓶颈其实是在缓存/内存子系统,这也是Nehalem缓存变化的一个原因之一。就Bulldozer来说,独立L1 DCache、多通道DDR3内存都是必要的,实际上Nehalem-EP处理器的Uncore部分(包含L3、内存控制器)都比桌面版本的Core i7频率要高,Bulldozer会如何?L2/L3缓存架构会有什么变化?这些都要拭目以待了。
Bobcat:切掉一个整数运算“簇”的Bulldozer
AMD Fusion计划
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。