多核处理器 核心结构分析.docx
- 文档编号:5133253
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:32
- 大小:1.87MB
多核处理器 核心结构分析.docx
《多核处理器 核心结构分析.docx》由会员分享,可在线阅读,更多相关《多核处理器 核心结构分析.docx(32页珍藏版)》请在冰点文库上搜索。
多核处理器核心结构分析
英特尔新一代处理器Core2Duo架构分析
“我们大致回顾了从Pentium到Pentium4架构的演进,细数了Conroe体系结构的特点并以大量的测试结果和深入地分析为大家更透彻地了解Conroe的优缺点。
”
英特尔Core2微体系架构的前世今生——从586到NetBurst
在1993年3月22日,英特尔引入了该公司的第5代x86处理器,由于x86兼容处理器大量冒起,许多兼容处理器厂商(NEC、西门子、AMD、富士通、Harris、德州仪器、IBM、Cyrix、UMC、NexGen、IDT、SGS-Thomson、C&T等等)都早就把"xxx86"当成其自己产品的生招牌使用(例如1995年就出现了NexGen公司的Nx586),而单纯的数字代号是不能作为商标受到保护的。
为了巩固品牌的知名度,英特尔希望给这个原本代号586(也被称作P5)的处理器注册一个商标,最后选择了内含数字“5”玄机的商标——“Pentium”,中文名称为奔腾。
Pentium(P5)微架构体系图
Pentium处理器是英特尔第一枚桌面超标量处理器,能够最高同时执行两条指令,在执行条件跳转指令的时候,U-Pipe的预测失误带来的性能损失是4个周期,V-Pipe的预测失误带来的性能损失是5个周期,其余的控制转移指令预测失误性能损失是4个周期。
Pentium拥有8KB数据cache和8KB指令cache,初期的Pentium60/66使用600纳米的BiCMOS工艺,采用273pin的PGA封装,晶体管数量是3.1百万(大约是1971年4004处理器晶体管数量(2250只)的一千三百倍),L2cache集成于主板上(常见的预安装容量为256KB)。
Pentium是一枚32位处理器,拥有64位的外部总线,物理内存定址空间为32位(据说工程样品出现过36位物理定址,但是正式产品降回32位),逻辑内存能力为64TB。
PentiumPro家族微架构
1995年11月1日,英特尔推出了当时看来可以用“硕大”来形容的PentiumPro处理器(中文名称是高能奔腾),这款代号P6的产品和Pentium相比革新相当大,例如整数流水线采用了10级工位的超级流水线(预测失误的性能损失为10~20个周期);能作多重分支预测和猜测执行;具备三个能够把x86指令转换成118位定长的RISC风格微操作的译码器(其中一个能把复杂x86指令转换成4个RISC风格微操作,另外两个解码器则是各可以把一条"简单"x86指令转换成一条RISC风格微操作,即所谓的“4+1+1”的3路解码格局)、实现了乱序执行等。
Coppermine微架构(180纳米PentiumIII,属于PentiumPro家族第3代的改进型)
把x86转换成RISC风格的微操作,有利于简化处理器执行流水线的设计,而且在提高性能的同时能确保兼容性。
由于x86指令转换成若干个RISC风格指令,因此PentiumPro的实际指令率要低于理论值(只有部分寄存器-寄存器的ALU/Movx86指令以及内存-寄存器Movx86Load指令能转换成一条微操作,其他的x86指令大都需要转换成两条以上的微操作来拼凑)。
此外,由于指令队列的问题,PentiumPro的16bit指令执行能力其实要低于Pentium,不过它的32位指令执行能力的确给当时的人们留下了深刻的印象。
PentiumPro的内存定址能力提高到了64GB,而虚拟内存空间能力就和Pentium一样都是64GB。
PentiumPro把L2cache和CPU做到同一个封装上,但是依然是两枚芯片,只是两枚芯片做到了同一个封装的两个腔体内。
PentiumPro最初采用600纳米的BiCMOS工艺制造,CPU管芯5.5百万晶体管,管芯面积高达306平方毫米(这里未包含同一封装另一腔体内的L2cache)。
PentiumPro256KBL2cache的电压是3.1伏特,耗电为23瓦特。
到了PentiumIII180nm版(Coppermine)的时候,英特尔终于把L2cache集成到了和CPU同一枚管芯(die)内。
也是在PentiumIII,英特尔引入了71条SSE扩展指令集,显著加强了x86处理器在流媒体处理方面的能力。
AMD虽然也尝试在K6上引入3DNow!
指令集,但是3DNow!
缺乏SSE所具备的IEEE-754兼容性、视频加速能力以及内存流式传输能力,因此虽然3DNow!
一开始的时候威势不少并且有大量媒体借机炒作,但事实证明3DNow!
的确有不少地方不如SSE。
NetBurst体系架构
然而在PentiumIII的时候英特尔却遭遇到了有史以来的第一次挫折,突破1GHz的头衔被AMD的Athlon处理器提前数个小时夺去了,别小看这几个小时,对于奉行摩尔定律的英特尔来说这样的局面是无论如何也抬不起头的。
英特尔的上层做出了一个惊人的举措,决定把P6架构的发展暂时冻结,转向激进的甚深流水线架构——P68,也就是Pentium4,英特尔为这个流水线工位多达20级的架构起了一个当时非常时髦的名字——NetBurst。
Willamette(第一代Pentium4,180纳米工艺)微架构模块图
采用甚深流水线的目的是为了在同样的工艺下获得更快的时钟频率,传统上,频率提升对开发人员这意味着程序不需要特别的更改就能获得性能提升。
然而对于Pentium4来说,这样的法则似乎不再是百试百灵的了。
流水线越长,对于采用乱序+猜测执行的处理器来说,预测失败的成本就越高。
PentiumIII的流水线在预测失败的时候会损失10个周期,而在第一代的WillamettePentium4上就达到了20个周期(极端的情况下例如流水线塞满了长延迟、低吞吐量的微操作时,就会出现上100个周期的损失)。
2004年推出的PrescottPentium4采用31级流水线,因为预测失败造成的性能损失也就更大了。
此外,流水线大幅度增长同时也带来了耗电、管芯成本显著提高,特别是耗电问题,在PrescottPentium4的时候更加突出,原本计划突破4GHz以上的Prescott最后只是止步于3.8GHz。
不过令英特尔蒙羞的是,英特尔当初决定不把IA-64架构快速迁移到桌面平台上,导致64bit指令集的主导权落到了AMD手上,这个事件所发酵出来的效果比当初1GHz桂冠被AMD首先夺去更具戏剧性。
但是不管怎样,Pentium4都是英特尔非常有意义的尝试,在它身上我们看到了TraceCache、超线程、QuadPump总线、SSE2/SSE3扩展指令集、LGA封装等诸多新技术的首次实际采用。
英特尔Core新体系架构问世背景
2002年4月份推出的第二代Pentium4(130纳米时代,Northwood微架构)取得了相当大的成功,在耗电、发热、性能等指标上都已经比第一代的Pentium4好得多。
在笔记本市场方面,Pentium4的耗电、发热问题依然难以克服,此时的大部分笔记本电脑还是采用130纳米的Tualatin微架构MobilePentiumIII-M而非MobilePentium4-M。
2003年3月12日英特尔推出了代号Banias的Pentium-M处理器,这款出自英特尔以色列研究室的微架构被认为在很大程度上和PentiumIII相似。
处理器前端相对PentiumIII来说,PentiumM改进很大。
例如分支预测单元上就使用了Pentium4的分支预测技术并作了较大的增强(这部分增强后来也被回用到Prescott内核的Pentium4里),引入了相当复杂、高效的节电电路,采用微操作融合技术,具备更大的Cache,流水线工位比Pentium4短但是比PentiumIII略长(没有确切的官方数字,有传闻是12级工位,但是P6微架构的流水线其实也可以说是12级),增加了专门的堆栈引擎,前端总线和Pentium4一样都是quadpump方式(100MHz时钟,等效400MT/s)。
Banias计划刚刚出现的时候其实并没有引起广泛的注意,但是当PentiumM真的摆到大家面前的时候,不少人都开始疑惑,一个性能如此出众的微结构为什么英特尔不把它用(也许应该说重返)到桌面平台上呢?
此时英特尔其实还是希望NetBurst微架构的Pentium4继续往更高的时钟频率推,Prescott微架构最初计划是能达到4GHz,英特尔为此还提前给大家准备了诸如BTX等新的机箱/散热方案。
此外,这个时候AMD的AMD64指令集和Intel的IA64指令集都还在争夺微软的64位操作系统支持,英特尔此时如果有什么大的动作都可能出现不少的变数。
Prescott微架构的表现的确差强人意,31级流水线工位带来了更大的预测失误性能损耗,而4GHz的频率屏障却由于高发热、耗电问题被迫宣布取消了。
按照英特尔的资料,PrescottPentium43.4GHz(model550)和PrescottPentium43.6GHz(model560)的TDP(热量设计功率)为115瓦特,而竞争对手AMDAthlon64同级别的产品TDP也不过是89瓦特。
在英特尔的LGA775插座连接中,775个连接点中的523个触点都被用作于电力传输,给处理器提供119安培的电流,即便是如此强大的电力供应方案,英特尔也表示如果不对Prescott重新设计的话,4GHz的目标依然是无法达成的。
经过这些改动的话英特尔也许有能力推出4GHz的处理器,至少Alienware就推出过水冷的4GHz整机。
此外也许还有一个生产能力富裕上的原因,那就是英特尔当时至少拥有三家300毫米直径的晶圆铸造厂,2005年年底的时候增加到五家,2007年将至少有七家。
如此庞大的生产力如果都切换到PentiumM上,一片300毫米直径的晶圆用来生产90纳米的第二代PentiumM的话可以生产出最多741枚管芯,相对来说用来生产Prescott1MB版Pentium4的话则是568枚,2MBPrescottPentium4是438枚,而生产130纳米的Pentium4XE(Gallatin微架构,实际上就是Northwood2MB版iL3版)是288枚。
这就是说,一旦直接切换到90纳米的PentiumM(即Dothan微架构),英特尔所多家晶元厂生产出来的处理器数量将很可能达到市场消化能力的两倍甚至更多,如果只开一半的工厂,那也将是巨大的生产资源浪费。
如何才能很好地利用这些生产资源呢,英特尔在左思右想中。
新方向——全面切换至双核、多核方案
凭借庞大生产力制造出大面积的处理器并以此获得时脉、性能、竞争上的优势,这是英特尔推出Pentium4的背景和着力点,但是这样的优势随着耗电壁垒的出现而即将嘎然而止,英特尔当初2007年推出10GHzPentium4的设想已经不再现实。
在2003年秋季IDF(英特尔开发者论坛)上,时任英特尔首席营运总裁(COO)的PaulOtellini首次向外界表示正计划在其产品线中引入双内核(dualcore)产品。
2004年4月英特尔向其合作伙伴以及媒体以正式文档的方式通知,取消Prescott接替者Tejas微架构计划,转而全力推动双核以及多内核产品,这个重大的变动英特尔称之为“Right-HandTurn”。
NetBurst又或者Pentium4微架构的不少部分晶体管都被用于拆分流水线以提高时钟频率,而英特尔现在的RightHnadTurn方向就希望把这些晶体管用于更多的虚拟加速、安全加速以及增加更多内核上。
更多的内核能够让英特尔的庞大生产能力得以充分发挥,同时也能显著改善多任务的性能和拥有功耗上的优势。
为了配合新的产品战略,英特尔也放弃了单纯使用时脉作为产品标示的方式,转而开始采用有一定特殊含义的数字来表示产品型号,例如前面我们提到的3.4GHzPentium4560。
Smithfield双内核PentiumD实际上是由两枚PresocttPentium4粘在一起构成的
在2005年,我们看到了Smithfield登场,这款被用来替换掉Tejas的处理器实际上是两枚Presoctt粘在一同一枚管芯达成的双核方案。
Smithfield的晶体管数量是230百万,管芯面积是213平方毫米,外部总线为800MT/s,每枚内核都有一个1MB大小的L2cache,CPU频率有2.8GHz、3.0GHz、3.2GHz等。
Smithfield的下一代——Presler则更加直截了当,直接采用两枚独立的CedarMill(Prescott1MB的65纳米版)封装在同一个封装基片上就达成了,由此可以看出,虽然英特尔已经决意全力转向多内核处理器,但是对于末代的NetBurst处理器已经不再想下多大的力气来专门设计真正的单管芯双核产品,它的目标是Conroe。
65纳米Yonah双内核CoreDuoT2000微架构
在Conroe推出之前,英特尔已经试水双内核产品了,除了前面提到的90纳米smithfied内核的PentiumD8XX、65纳米Presler内核的PentiumD9XX以及它们衍生的PentiumXE外,还有针对笔记本电脑市场和低能耗服务器市场的65纳米Yonah内核的CoreDuoT2000系列。
65纳米Yonah微架构CoreDuoT2x00图
Yonah基本上就是Dothan的两个处理内核挂在同一个DIB上。
所谓的DIB,是从PentiumPro时代引入的,目的是让CPU能直接访问L2Cache而无须受制于内存控制器,既能确保更高的L2cache带宽,也能让系统外部总线运作于一个比较合理的较低频率上。
Yonah采用共享L2cache和单一外部总线控制器的优势主要有两点,首先是确保了L2cache的数据一致性,某一个内核更新L2cache内的数据后,另一个内核无需什么等待就马上可以使用这部分的数据,尽可能快地维持数据的一致性,对双内核、多内核处理器来说是极为重要的性能要素,而且共享L2cache的方式还可以让L2cache的可用空间最大化;其次,采用单一外部总线控制器能够有利于降低成本,简化总线控制设计。
Yonah的CPU内核源自90纳米的DothanPentium-M,而Dothan源自130纳米的Banias,Banias源自Tualatin内核的PentiumIII,Tualatin则是180纳米CopperminePentiumIII的cache容量、时钟频率增强版,执行单元的“骨架”更可谓是一脉相承。
这几个微架构的保留站(用来存放尚未执行的微操作,可以看作是ROB的子集)和执行单元之间都总共有5个微操作端口(μOpport),也就是说执行单元最多可以同时执行5个微操作(其中三个是用来分发load/store操作)。
其中Port0/1对应的是算术/逻辑单元(ALU),而Port2/3/4对应的是lord/store单元,PentiumPro、PentiumII、PentiumIII、PentiumM、CoreDUOT2000单个内核同时能跑两条算术指令和三条Load/store指令。
PentiumIII乱序执行单元的单元图
代号
P6
Klamath
Deschutes
Katmai
Coppermine
Tualatin
Banias/Dothan
Yonah
Port#
PentiumPro
PentiumII
PentiumIII
PentiumM
CoreDuoT2000
CoreSoloT1000
0
整数ALU
LEA指令
Shift指令
iMUL整数乘法指令x87浮点ALU
FADD浮点加法指令
FMUL浮点乘法指令
FDIV浮点除法指令
整数ALU
LEA指令
Shift指令
iMUL整数乘法指令x87浮点ALU
FADD浮点加法指令
FMUL浮点乘法指令
FDIV浮点除法指令
MMXSIMDintADD
MMXSIMDintMUL
整数ALU
LEA指令
Shift指令
iMUL整数乘法指令x87浮点ALU
FADD浮点加法指令
FMUL浮点乘法指令
FDIV浮点除法指令
MMXintADD
MMXintMUL
SSESIMDFPMUL
SSESIMDFPMOV
SSE1/2SIMDFPDIV
整数ALU
LEA指令
Shift指令
iMUL整数乘法指令x87浮点ALU
FADD浮点加法指令
FMUL浮点乘法指令
FDIV浮点除法指令
MMXintADD
MMXintMUL
SSE1/2SIMDFPMUL
SSE1/2SIMDFPMOV
SSE1/2SIMDFPDIV
整数ALU
LEA指令
Shift指令
iMUL整数乘法指令x87浮点ALU
FADD浮点加法指令
FMUL浮点乘法指令
FDIV浮点除法指令
MMXintADD
MMXintMUL
SSE1/2SIMDFPMUL
SSE1/2SIMDFPMOV
SSE1/2SIMDFPDIV
1
整数ALU
整数ALUMMXShift单元
整数ALUMMXShift单元
SSEFPADD/SUB
SSESIMDFPMOV
整数ALUMMXShift单元
SSE1/2FPADD/SUB
SSESIMDFPMOV
整数ALUMMXShift单元
SSE1/2FPADD/SUB
SSE1/2SIMDFPMOV
2
Load
Load
Load
Load
Load
3
StoreAddress
StoreAddress
StoreAddress
StoreAddress
StoreAddress
4
StoreData
StoreData
StoreData
StoreData
StoreData
备注
#LEA即LoadEffectiveAddress指令
#上面列出的对应微操作指令只是其中的一部分,具体不同port对应的微操作指令请查阅Intel优化指南附录
#Yonah引入了SSE3指令,不过Intel的优化指南尚未发表,因此我们还不是很清楚SSE3在Yonah上的
基本上,P6(包含PentiumM/YonahT2000)最多可以每个周期执行一条80位x87浮点指令或者两条64位MMX/SSE/SSE2指令又或者两条32位x86整数算术(最简单的类型,例如add/sub之类能转换成一个微操作的)指令,以及三条load/store指令。
虽然Dothan和Banias相比在整数除法方面已经有了一定的性能改进,但是Yonah把这种改进再往前推进了一步。
例如32位整数相除的时候,如果除数为17~24位,而被除数为1~16位时候,Dothan的延迟是12个周期,而Yonah的延迟只有4个周期;当在被除数为为17到24位的时候,Dothan的延迟是20个周期,而Yonah的延迟只有12个周期。
Yonah微架构的死穴?
任何微架构的设计都需要根据制造工艺、兼容性、复杂性等因素做出性能上的妥协,Yonah微架构和当前英特尔自己的Presler、AMD的Toledo(E6)相比存在哪些先天性的不足呢?
4-1-1格局的x86指令解码能力
Yonah集成了许多P6家族的特点,也包括其中的弱点。
其中的一些弱点在Yonah得到了改善,例如SSE指令由于需要解成两个微操作,之前的PentiumM(自从PentiumIII引入SSE指令以来都)只能使用唯一的一个复杂指令解码器作解码。
而现在由于Yonah能够对SSE指令作微操作融合,三个解码器都能把SSE指令解码成对应Yonah执行内核的微操作指令,理论上Yonah的解码带宽达到了以前PentiumIII/PentiumM的三倍,SSE指令的解码能力从每个周期一条指令达到每个周期三条指令。
在AMD的K8微体系结构中集成了内存控制器和HyperTransport总线
在AMDK8微架构里,也是可以看作有三个x86指令解码器,但是这三个解码器能力是对等,都能完成中等复杂度的x86指令转换操作,理论上最高可以达到相当于2-2-2的指令解码能力。
所谓中等复杂度,就是指可转换成包含两个定长微操作的宏操作(Macro-Op),简称MOP,而对于微操作,AMD则称之为ROP,即RISC-Op的意思,含义和Intel说的micro-op(μOp)都是一样的东西(当然,不同的架构具体的微操作实际上是截然不同的)。
AMD这样的设计既减少了对编译器的依赖,也能提高PackedSSE指令的效率。
K8的解码器每个周期能够把三个宏操作发送给指令控制单元(ICU,也就是Intel所说的ROB),再由ICU把这些宏操作转换成ROP(RISC-ops),发送给K8的乱序执行单元,K8的乱序执行单元每个周期最高能执行9个ROP(乱序,不包括load/store的话,有5个算术ROP)。
相比之下,P6、PM、CoreDuoT2000/T1000就只能做到5个μOp(乱序,不计算load/store的话,只有两个算术或者逻辑μOp)。
64位浮点及SIMD指令执行能力较低
不论是PentiumM(Banias、Dothan)还是CoreDuoT2000/CoreSoloT1000,它们那继承自PentiumPro的执行单元“骨架”都存在在现在看来一个非常明显的弱点:
那个用于80位x87浮点指令和64位SSE指令的浮点单元,在执行4x32bitSSE指令和2X64bitSSE2指令的时候,需要把这些128-bit指令拆开成两个64位的操作然后连续执行获得结果。
如果所有的这些64位操作都能够以全速执行的话,这种拆开执行的方式在速度还是可以让人接受的,然而这样的想法对它们的浮点乘法单元来说却是无法达成的事情。
PentiumIII、PentiumM、CoreDuoT2000/T1000的浮点乘法单元能够单周期完成一个32位标量浮点SSE乘法操作(即延迟时间为1个周期),在执行4X32位向量浮点SSE乘法操作的时候能在比较合理的两个周期完成,但是对于64位SSE2乘法或者80位x87乘法指令就都需要两个周期而不是1个周期。
因此在某些情况下,同样是总共128位长的指令,在PentiumIII、PentiumM、CoreDuoT2000/CoreSoloT1000上,2x64bit的双精度指令执行时间就是要比4x32bit的单精度指令执行时间就是要多50%以上。
AMDK8的指令控制单元(ICU,包含ROB、整数调度器、浮点调度器)能够最高每个周期分发出9个微操作,其中6个流向整数执行流水线,3个流向浮点执行流水线。
K8的整数执行流水线有三个整数执行单元以及三个地址计算单元,对于大多数的简单整数微操作,K8每个周期能完成三个,但是乘法和除法计算则是例外,这是因为K8的乘法和除法操作都需要在整数执行单元0->共享乘法单元->整数执行单元1上辗转地执行。
尽管如此,K8的执行单元数量要比Yonah多一些,略胜一筹。
缺乏EM64T支持,运行大型程序可能吃力
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多核处理器 核心结构分析 多核 处理器 核心 结构 分析