




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
英特尔新一代处理器Core 2 Duo架构分析“我们大致回顾了从Pentium到Pentium4架构的演进,细数了Conroe体系结构的特点并以大量的测试结果和深入地分析为大家更透彻地了解Conroe的优缺点。”英特尔Core 2微体系架构的前世今生从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,初期的Pentium 60/66使用600纳米的BiCMOS工艺,采用273 pin的PGA封装,晶体管数量是3.1百万(大约是1971年4004处理器晶体管数量(2250只)的一千三百倍),L2 cache集成于主板上(常见的预安装容量为256KB)。Pentium是一枚32位处理器,拥有64位的外部总线,物理内存定址空间为32位(据说工程样品出现过36位物理定址,但是正式产品降回32位),逻辑内存能力为64TB。Pentium Pro家族微架构 1995年11月1日,英特尔推出了当时看来可以用“硕大”来形容的Pentium Pro处理器(中文名称是高能奔腾),这款代号P6的产品和Pentium相比革新相当大,例如整数流水线采用了10级工位的超级流水线(预测失误的性能损失为1020个周期);能作多重分支预测和猜测执行;具备三个能够把x86指令转换成118位定长的RISC风格微操作的译码器(其中一个能把复杂x86指令转换成4个RISC风格微操作,另外两个解码器则是各可以把一条简单x86指令转换成一条RISC风格微操作,即所谓的“4+1+1”的3路解码格局)、实现了乱序执行等。Coppermine微架构(180纳米Pentium III,属于Pentium Pro家族第3代的改进型)把x86转换成RISC风格的微操作,有利于简化处理器执行流水线的设计,而且在提高性能的同时能确保兼容性。由于x86指令转换成若干个RISC风格指令,因此Pentium Pro的实际指令率要低于理论值(只有部分寄存器-寄存器的ALU/Mov x86指令以及内存-寄存器 Mov x86 Load指令能转换成一条微操作,其他的x86指令大都需要转换成两条以上的微操作来拼凑)。此外,由于指令队列的问题,Pentium Pro的16bit指令执行能力其实要低于Pentium,不过它的32位指令执行能力的确给当时的人们留下了深刻的印象。Pentium Pro的内存定址能力提高到了64GB,而虚拟内存空间能力就和Pentium一样都是64GB。Pentium Pro把L2 cache和CPU做到同一个封装上,但是依然是两枚芯片,只是两枚芯片做到了同一个封装的两个腔体内。Pentium Pro最初采用600纳米的BiCMOS工艺制造,CPU管芯5.5百万晶体管,管芯面积高达306平方毫米(这里未包含同一封装另一腔体内的L2 cache)。Pentium Pro 256KB L2 cache的电压是3.1伏特,耗电为23瓦特。到了Pentium III 180nm版(Coppermine)的时候,英特尔终于把L2 cache集成到了和CPU同一枚管芯(die)内。也是在Pentium III,英特尔引入了71条SSE扩展指令集,显著加强了x86处理器在流媒体处理方面的能力。AMD虽然也尝试在K6上引入3D Now!指令集,但是3D Now!缺乏SSE所具备的IEEE-754兼容性、视频加速能力以及内存流式传输能力,因此虽然3D Now!一开始的时候威势不少并且有大量媒体借机炒作,但事实证明3D Now!的确有不少地方不如SSE。NetBurst体系架构 然而在Pentium III的时候英特尔却遭遇到了有史以来的第一次挫折,突破1GHz的头衔被AMD的Athlon处理器提前数个小时夺去了,别小看这几个小时,对于奉行摩尔定律的英特尔来说这样的局面是无论如何也抬不起头的。英特尔的上层做出了一个惊人的举措,决定把P6架构的发展暂时冻结,转向激进的甚深流水线架构P68,也就是Pentium 4,英特尔为这个流水线工位多达20级的架构起了一个当时非常时髦的名字NetBurst。Willamette(第一代Pentium 4,180纳米工艺)微架构模块图采用甚深流水线的目的是为了在同样的工艺下获得更快的时钟频率,传统上,频率提升对开发人员这意味着程序不需要特别的更改就能获得性能提升。然而对于Pentium 4来说,这样的法则似乎不再是百试百灵的了。流水线越长,对于采用乱序+猜测执行的处理器来说,预测失败的成本就越高。Pentium III的流水线在预测失败的时候会损失10个周期,而在第一代的Willamette Pentium 4 上就达到了20个周期(极端的情况下例如流水线塞满了长延迟、低吞吐量的微操作时,就会出现上100个周期的损失)。2004年推出的Prescott Pentium 4采用31级流水线,因为预测失败造成的性能损失也就更大了。此外,流水线大幅度增长同时也带来了耗电、管芯成本显著提高,特别是耗电问题,在Prescott Pentium 4的时候更加突出,原本计划突破4GHz以上的Prescott最后只是止步于3.8GHz。不过令英特尔蒙羞的是,英特尔当初决定不把IA-64架构快速迁移到桌面平台上,导致64 bit指令集的主导权落到了AMD手上,这个事件所发酵出来的效果比当初1GHz桂冠被AMD首先夺去更具戏剧性。但是不管怎样,Pentium 4都是英特尔非常有意义的尝试,在它身上我们看到了Trace Cache、超线程、Quad Pump总线、SSE2/SSE3扩展指令集、LGA封装等诸多新技术的首次实际采用。英特尔Core新体系架构问世背景 2002年4月份推出的第二代Pentium 4(130纳米时代,Northwood微架构)取得了相当大的成功,在耗电、发热、性能等指标上都已经比第一代的Pentium 4好得多。在笔记本市场方面,Pentium 4的耗电、发热问题依然难以克服,此时的大部分笔记本电脑还是采用130纳米的Tualatin微架构Mobile Pentium III-M而非Mobile Pentium 4-M。2003年3月12日英特尔推出了代号Banias的Pentium-M处理器,这款出自英特尔以色列研究室的微架构被认为在很大程度上和Pentium III相似。处理器前端相对Pentium III来说,Pentium M改进很大。例如分支预测单元上就使用了Pentium 4的分支预测技术并作了较大的增强(这部分增强后来也被回用到Prescott内核的Pentium 4里),引入了相当复杂、高效的节电电路,采用微操作融合技术,具备更大的Cache,流水线工位比Pentium 4短但是比Pentium III略长(没有确切的官方数字,有传闻是12级工位,但是P6微架构的流水线其实也可以说是12级),增加了专门的堆栈引擎,前端总线和Pentium 4一样都是quad pump方式(100MHz时钟,等效400MT/s)。Banias计划刚刚出现的时候其实并没有引起广泛的注意,但是当Pentium M真的摆到大家面前的时候,不少人都开始疑惑,一个性能如此出众的微结构为什么英特尔不把它用(也许应该说重返)到桌面平台上呢?此时英特尔其实还是希望NetBurst微架构的Pentium 4继续往更高的时钟频率推,Prescott微架构最初计划是能达到4GHz,英特尔为此还提前给大家准备了诸如BTX等新的机箱/散热方案。此外,这个时候AMD的AMD64指令集和Intel的IA64指令集都还在争夺微软的64位操作系统支持,英特尔此时如果有什么大的动作都可能出现不少的变数。Prescott微架构的表现的确差强人意,31级流水线工位带来了更大的预测失误性能损耗,而4GHz的频率屏障却由于高发热、耗电问题被迫宣布取消了。按照英特尔的资料,Prescott Pentium 4 3.4GHz(model 550)和Prescott Pentium 4 3.6GHz(model 560)的TDP(热量设计功率)为115瓦特,而竞争对手AMD Athlon 64同级别的产品TDP也不过是89瓦特。在英特尔的LGA775插座连接中,775个连接点中的523个触点都被用作于电力传输,给处理器提供119安培的电流,即便是如此强大的电力供应方案,英特尔也表示如果不对Prescott重新设计的话,4GHz的目标依然是无法达成的。经过这些改动的话英特尔也许有能力推出4GHz的处理器,至少Alienware就推出过水冷的4GHz整机。此外也许还有一个生产能力富裕上的原因,那就是英特尔当时至少拥有三家300毫米直径的晶圆铸造厂,2005年年底的时候增加到五家,2007年将至少有七家。如此庞大的生产力如果都切换到Pentium M上,一片300毫米直径的晶圆用来生产90纳米的第二代Pentium M的话可以生产出最多741枚管芯,相对来说用来生产Prescott 1MB版Pentium 4的话则是568枚,2MB Prescott Pentium 4是438枚,而生产130纳米的Pentium 4 XE(Gallatin微架构,实际上就是Northwood 2MB版 iL3版)是288枚。这就是说,一旦直接切换到90纳米的Pentium M(即Dothan微架构),英特尔所多家晶元厂生产出来的处理器数量将很可能达到市场消化能力的两倍甚至更多,如果只开一半的工厂,那也将是巨大的生产资源浪费。如何才能很好地利用这些生产资源呢,英特尔在左思右想中。新方向全面切换至双核、多核方案 凭借庞大生产力制造出大面积的处理器并以此获得时脉、性能、竞争上的优势,这是英特尔推出Pentium 4的背景和着力点,但是这样的优势随着耗电壁垒的出现而即将嘎然而止,英特尔当初2007年推出10GHz Pentium 4的设想已经不再现实。在2003年秋季IDF(英特尔开发者论坛)上,时任英特尔首席营运总裁(COO)的Paul Otellini首次向外界表示正计划在其产品线中引入双内核(dual core)产品。2004年4月英特尔向其合作伙伴以及媒体以正式文档的方式通知,取消Prescott接替者Tejas微架构计划,转而全力推动双核以及多内核产品,这个重大的变动英特尔称之为“Right-Hand Turn”。NetBurst又或者Pentium 4微架构的不少部分晶体管都被用于拆分流水线以提高时钟频率,而英特尔现在的Right Hnad Turn方向就希望把这些晶体管用于更多的虚拟加速、安全加速以及增加更多内核上。更多的内核能够让英特尔的庞大生产能力得以充分发挥,同时也能显著改善多任务的性能和拥有功耗上的优势。为了配合新的产品战略,英特尔也放弃了单纯使用时脉作为产品标示的方式,转而开始采用有一定特殊含义的数字来表示产品型号,例如前面我们提到的3.4GHz Pentium 4 560。Smithfield双内核Pentium D实际上是由两枚Presoctt Pentium 4粘在一起构成的在2005年,我们看到了Smithfield登场,这款被用来替换掉Tejas的处理器实际上是两枚Presoctt粘在一同一枚管芯达成的双核方案。Smithfield的晶体管数量是230百万,管芯面积是213平方毫米,外部总线为800MT/s,每枚内核都有一个1MB大小的L2 cache,CPU频率有2.8GHz、3.0GHz、3.2GHz等。Smithfield的下一代Presler则更加直截了当,直接采用两枚独立的CedarMill(Prescott 1MB的65纳米版)封装在同一个封装基片上就达成了,由此可以看出,虽然英特尔已经决意全力转向多内核处理器,但是对于末代的NetBurst处理器已经不再想下多大的力气来专门设计真正的单管芯双核产品,它的目标是Conroe。65纳米Yonah双内核Core Duo T2000微架构 在Conroe推出之前,英特尔已经试水双内核产品了,除了前面提到的90纳米smithfied内核的Pentium D 8XX、65纳米Presler内核的Pentium D 9XX以及它们衍生的Pentium XE外,还有针对笔记本电脑市场和低能耗服务器市场的65纳米Yonah内核的Core Duo T2000系列。65纳米Yonah微架构Core Duo T2x00图Yonah基本上就是Dothan的两个处理内核挂在同一个DIB上。所谓的DIB,是从Pentium Pro时代引入的,目的是让CPU能直接访问L2 Cache而无须受制于内存控制器,既能确保更高的L2 cache带宽,也能让系统外部总线运作于一个比较合理的较低频率上。Yonah采用共享L2 cache和单一外部总线控制器的优势主要有两点,首先是确保了L2 cache的数据一致性,某一个内核更新L2 cache内的数据后,另一个内核无需什么等待就马上可以使用这部分的数据,尽可能快地维持数据的一致性,对双内核、多内核处理器来说是极为重要的性能要素,而且共享L2 cache的方式还可以让L2 cache的可用空间最大化;其次,采用单一外部总线控制器能够有利于降低成本,简化总线控制设计。Yonah的CPU内核源自90纳米的Dothan Pentium-M,而Dothan源自130纳米的Banias,Banias源自Tualatin内核的Pentium III,Tualatin则是180纳米Coppermine Pentium III的cache容量、时钟频率增强版,执行单元的“骨架”更可谓是一脉相承。这几个微架构的保留站(用来存放尚未执行的微操作,可以看作是ROB的子集)和执行单元之间都总共有5个微操作端口(Op port),也就是说执行单元最多可以同时执行5个微操作(其中三个是用来分发load/store操作)。其中Port0/1对应的是算术/逻辑单元(ALU),而Port2/3/4对应的是lord/store单元,Pentium Pro、Pentium II、Pentium III、Pentium M、Core DUO T2000单个内核同时能跑两条算术指令和三条Load/store指令。Pentium III乱序执行单元的单元图代号P6KlamathDeschutesKatmaiCoppermineTualatinBanias/DothanYonahPort #Pentium ProPentium IIPentium IIIPentium MCore Duo T2000Core Solo T10000整数ALULEA指令Shift指令iMUL整数乘法指令 x87浮点ALUFADD浮点加法指令FMUL浮点乘法指令FDIV浮点除法指令整数ALULEA指令Shift指令iMUL整数乘法指令 x87浮点ALUFADD浮点加法指令FMUL浮点乘法指令FDIV浮点除法指令MMX SIMD int ADDMMX SIMD int MUL整数ALULEA指令Shift指令iMUL整数乘法指令 x87浮点ALUFADD浮点加法指令FMUL浮点乘法指令FDIV浮点除法指令MMX int ADDMMX int MULSSE SIMD FP MULSSE SIMD FP MOVSSE1/2 SIMD FP DIV整数ALULEA指令Shift指令iMUL整数乘法指令 x87浮点ALUFADD浮点加法指令FMUL浮点乘法指令FDIV浮点除法指令MMX int ADDMMX int MULSSE1/2 SIMD FP MULSSE1/2 SIMD FP MOVSSE1/2 SIMD FP DIV整数ALULEA指令Shift指令iMUL整数乘法指令 x87浮点ALUFADD浮点加法指令FMUL浮点乘法指令FDIV浮点除法指令MMX int ADDMMX int MULSSE1/2 SIMD FP MULSSE1/2 SIMD FP MOVSSE1/2 SIMD FP DIV1整数ALU整数ALU MMX Shift单元整数ALU MMX Shift单元SSE FP ADD/SUBSSE SIMD FP MOV整数ALU MMX Shift单元SSE1/2 FP ADD/SUBSSE SIMD FP MOV整数ALU MMX Shift单元SSE1/2 FP ADD/SUBSSE1/2 SIMD FP MOV2LoadLoadLoadLoadLoad3Store AddressStore AddressStore AddressStore AddressStore Address4Store DataStore DataStore DataStore DataStore Data备注# LEA即Load Effective Address指令# 上面列出的对应微操作指令只是其中的一部分,具体不同port对应的微操作指令请查阅Intel优化指南附录# Yonah引入了SSE3指令,不过Intel的优化指南尚未发表,因此我们还不是很清楚SSE3在Yonah上的基本上,P6(包含Pentium M/Yonah T2000)最多可以每个周期执行一条80位x87浮点指令或者两条64位MMX/SSE/SSE2指令又或者两条32位x86整数算术(最简单的类型,例如add/sub之类能转换成一个微操作的)指令,以及三条load/store指令。虽然Dothan和Banias相比在整数除法方面已经有了一定的性能改进,但是Yonah把这种改进再往前推进了一步。例如32位整数相除的时候,如果除数为1724位,而被除数为116位时候,Dothan的延迟是12个周期,而Yonah的延迟只有4个周期;当在被除数为为17到24位的时候,Dothan的延迟是20个周期,而Yonah的延迟只有12个周期。Yonah微架构的死穴? 任何微架构的设计都需要根据制造工艺、兼容性、复杂性等因素做出性能上的妥协,Yonah微架构和当前英特尔自己的Presler、AMD的Toledo(E6)相比存在哪些先天性的不足呢?4-1-1格局的x86指令解码能力Yonah集成了许多P6家族的特点,也包括其中的弱点。其中的一些弱点在Yonah得到了改善,例如SSE指令由于需要解成两个微操作,之前的Pentium M(自从Pentium III引入SSE指令以来都)只能使用唯一的一个复杂指令解码器作解码。而现在由于Yonah能够对SSE指令作微操作融合,三个解码器都能把SSE指令解码成对应Yonah执行内核的微操作指令,理论上Yonah的解码带宽达到了以前Pentium III/Pentium M的三倍,SSE指令的解码能力从每个周期一条指令达到每个周期三条指令。在AMD的K8微体系结构中集成了内存控制器和HyperTransport总线在AMD K8微架构里,也是可以看作有三个x86指令解码器,但是这三个解码器能力是对等,都能完成中等复杂度的x86指令转换操作,理论上最高可以达到相当于2-2-2的指令解码能力。所谓中等复杂度,就是指可转换成包含两个定长微操作的宏操作(Macro-Op),简称MOP,而对于微操作,AMD则称之为ROP,即RISC-Op的意思,含义和Intel说的micro-op(Op)都是一样的东西(当然,不同的架构具体的微操作实际上是截然不同的)。AMD这样的设计既减少了对编译器的依赖,也能提高Packed SSE指令的效率。K8的解码器每个周期能够把三个宏操作发送给指令控制单元(ICU,也就是Intel所说的ROB),再由ICU把这些宏操作转换成ROP(RISC-ops),发送给K8的乱序执行单元,K8的乱序执行单元每个周期最高能执行9个ROP(乱序,不包括load/store的话,有5个算术ROP)。相比之下,P6、PM、Core Duo T2000/T1000就只能做到5个Op(乱序,不计算load/store的话,只有两个算术或者逻辑Op)。64位浮点及SIMD指令执行能力较低不论是Pentium M(Banias、Dothan)还是Core Duo T2000/Core Solo T1000,它们那继承自Pentium Pro的执行单元“骨架”都存在在现在看来一个非常明显的弱点:那个用于80位x87浮点指令和64位SSE指令的浮点单元,在执行4x32bit SSE指令和2X64bit SSE2指令的时候,需要把这些128-bit指令拆开成两个64位的操作然后连续执行获得结果。如果所有的这些64位操作都能够以全速执行的话,这种拆开执行的方式在速度还是可以让人接受的,然而这样的想法对它们的浮点乘法单元来说却是无法达成的事情。Pentium III、Pentium M、Core Duo T2000/T1000的浮点乘法单元能够单周期完成一个32位标量浮点SSE乘法操作(即延迟时间为1个周期),在执行4X32位向量浮点SSE乘法操作的时候能在比较合理的两个周期完成,但是对于64位SSE2乘法或者80位x87乘法指令就都需要两个周期而不是1个周期。因此在某些情况下,同样是总共128位长的指令,在Pentium III、Pentium M、Core Duo T2000/Core Solo T1000上,2x64bit的双精度指令执行时间就是要比4x32bit的单精度指令执行时间就是要多50%以上。AMD K8的指令控制单元(ICU,包含ROB、整数调度器、浮点调度器)能够最高每个周期分发出9个微操作,其中6个流向整数执行流水线,3个流向浮点执行流水线。K8的整数执行流水线有三个整数执行单元以及三个地址计算单元,对于大多数的简单整数微操作,K8每个周期能完成三个,但是乘法和除法计算则是例外,这是因为K8的乘法和除法操作都需要在整数执行单元0-共享乘法单元-整数执行单元1上辗转地执行。尽管如此,K8的执行单元数量要比Yonah多一些,略胜一筹。缺乏EM64T支持,运行大型程序可能吃力Yonah的另一个问题就是缺乏对EM64T的支持,作为笔记本处理器,4GB的平铺定址能力限制暂时还不是什么大问题,但是随着Windows Vista的推出,内存容量的饥渴问题将会显露出来,届时Yonah将可能成为昨日黄花被新的AMD64/EM64T处理器替换。比较遗憾的是,英特尔其实一直都没有公布Pentium M和Core Duo T2000/Core Solo T1000的体系架构细节,使得我们无法对其架构做更深入的了解,但是从种种迹象来看,Yonah以及之前的Pentium M在微架构上的确和Pentium III非常非常类似。代号Conroe次世代微架构概述Conroe是英特尔针对桌面应用的下一代微架构代号,和它同属一个系列的还有针对笔记本电脑的Meorm以及针对工作站/服务器的Woodcrest,有时候它们又被统称为Core微架构,不过我认为这篇文章主要是给桌面用户的读者阅读而且称呼作Core容易和英特尔的新品牌Core混淆,所以还是觉得叫Conroe比较准确。我们并不清楚一开始的Conroe设计目标是如何的,但是自从Tejas被取消后,我们可以看到英特尔已经放弃了不惜一切追求更高时钟频率极限,转向全力以赴推动双内核、多内核计划,让英特尔的庞大先进制程优势能够以另一种方式得到释放。不管之前的Conroe计划是如何的,此刻的Conroe设计必被确定为单管芯双核、追求高性能/耗电比率为导向的产品计划。正如我们之前所介绍的那样,Conroe并非英特尔的第一枚单管芯双内核处理器,Yonah才是,但是从微体系架构来看,Conroe却拥有不少的第一,例如:英特尔第一个4路IA32微体系结构、英特尔第一个引入Macro-Fusion技术的微体系结构、英特尔第一个具备单周期执行两个128bit浮点微操作的IA32微体系架构等等。对于Conroe的出身,比较多的倾向于源自Banias微体系,这样想法主要是来自于从微架构的角度看,Conroe更多的像是Banias的横扩版,例如解码器、执行单元的数据元宽度、执行单元数量、各类预拾取等。上图为英特尔三款65纳米处理器的管芯比较图,已经尽可能地根据L2 cache的尺寸做出按比例的缩放(Conroe、Yonah、CedarMill的管芯尺寸分别为140mm2左右、84mm2左右和81mm2)。从图中大家可以看到,Conroe的尺寸虽然达到了Yonah的1.6倍左右,但是和由两枚CedarMill组成的Pesler(2*81mm2=162mm2)双核处理器相比还是会小一些。其中,Conroe的单个内核尺寸(不包括总线控制、L2 cache)相当于1MB L2 cache的2.67倍,而Yonah和CedarMill的内核(单个,不包括总线控制、L2 cache)则分别是1MB L2 cache的1.48倍和4.34倍。换句话说,Conroe的单个内核尺寸达到了Yonah单个内核的1.8倍、CedarMill的62%。由于晶体管的增多,在同样的65纳米工艺制程下,同频下的Conroe发热应该比Yonah更高,英特尔提供的Conroe E6000系列TDP(典型设计功耗)为65瓦特,而Yonah E系列的TDP为50瓦特(Yonah另有低耗电版即L系列的TDP为24瓦特,超低电压版即U系列的TDP为14瓦特)。在英特尔的路线图中,针对桌面的Conroe就比针对笔记本市场的Merom提前半年推出。这意味着英特尔需要更多的时间来作细调才能让同样微架构的Merom在笔记本电脑上维持Yonah相当的性能/耗电水平,例如挑选同频下工作电压可以更低的芯片、搭配工艺更加先进耗电更低的芯片组来抵消处理器耗电的增加等等。对于经历了之前Pentium 4动辄100瓦特高发热时代的桌面电脑来说,65瓦特的TDP实在是算不了什么,绝大多数的LGA775散热器都能轻松应付这样的发热,而且还留有一定的盈余应付更高性能产品的需求(例如3.33GHz的E8000,TDP为95瓦特,同样是Conroe微结构)。Conroe微体系架构深入分析前端(Front End) Conroe微架构体系图Conroe微体系结构的前端(Front End)处理器的微结构主要可以分成前端和后端,所谓的前端主要是由指令拾取(Instruction Fetch)、指令解码(Instruction Decode)、分支预测(branch predict)组成,而后端则是保留站和执行单元或者说功能单元,前端和后端之间还有指令控制器用来把前端解码出来的操作分发指令给执行单元。能不能省略掉解码的环节呢?理论上是可以的,但是现在的CPU厂商大都是在数年甚至数十年前的指令集架构上开发新的处理器,为了让CPU加入新技术既能跑得更快,又要确保兼容采用某个指令集体系的软件,解码这个环节是不可缺少的。现在的处理器芯片里还集成了L1 cache、L2 cache,有些甚至集成了北桥(AMD K8)和网络控制器(例如IBM的Blue Gene和一些SoC处理器)。针对不同的市场/产品导向设计出来的处理器微架构往往不一样,但是前端加后端的概念大家都是具备的,我们在这里先从前端开始讨论Conroe的微结构。Conroe前端宏融合、4路解码器、微融合Conroe的“前端”Yonah的“前端”Conroe具备四个x86解码器,包括三个简单x86指令解码器和一个复杂x86指令解码器。简单x86指令解码器能够每个周期把一个x86指令转换成一条微操作指令,而复杂x86指令解码器能够每个周期完成两条到四条微操作指令,构成所谓的4+1+1+1解码格局。Conroe微架构具备4路解码、4路微操作发送以及7路乱序执行单元,成为4路超标量处理器。在此之前的Pentium Pro家族、Pentium M家族、Core Duo T2000、Core Solo T1000均为3路超标量处理器,而Pentium 4虽然在解码上有些特别但是也只能做到每两个周期发送6路微操作,实际上也都还是3路超标量处理器,Pentium则是英特尔第一款超标量处理器(两路超标量)。需要注意的是,Conroe并非第一个4路超标量处理器,在此之前其他RISC厂商早就有4路或者更多路的超标量处理器;Conroe也并非英特尔的第一个大于3路的处理器,在此之前Itanium就是具备6路超标量处理器;Conroe也并非第一个大于三路的x86超标量处理器,AMD在K5的时候已经引入了4路超标量架构,但是这并不代表什么,多少路架构并不反映性能就是多少倍,K5的设计在很多方面都存在Overkill和不平衡的地方,实际性能和竞争力都不如同期英特尔的产品。Conroe的解码电路具备一个全新引入的特性:Macro-Fusion(宏融合),这个宏融合的特别之处在于能够在预解码阶段(尚未转换成微操作)的时候,把两个符合某些特定配对条件(例如其中一条为cmp或者test指令,而另一条为分支指令jne)的x86指令合并成一条指令(这里可以合并成被称作cmpjne的新µ-ops,这条指令并不存在于现有的IA32e指令集中)。解码时,这两条x86指令会以一条微操作的方式发送、存放在Re-Order Buffer(ROB,ROB主要作寄存器重命名、指令排序,降低x86指令集的寄存器数量限制以提高性能)。根据Conroe微架构的首席架构师Jack Doweck的估计,对于包含有大量跳转(Jump)操作的快速整数代码,在经过宏融合之后,µ-ops数量和x86指令的比率实际上可以低于1,即1条µ-ops可以相当于1条以上的x86指令。Conroe的指令拾取单元每个周期能够向解码器发送5条x86指令,解码器每个周期能够对其中符合特定条件的两条x86指令合并成一条微操作。Conroe具备4个x86指令解码器,其中三个能够把简单的x86指令转换成三个微操作(其中一条源自宏融合),还有一个解码器能够把复杂的x86指令转换成两条到4条的微操作。因此在最理想的情况下,解码器能够向下游发送(4+1+1+1)共计7条或者更多的微操作。为什么这里明明是4+1+1+1=7,而要说7条以上呢?很简单,在Pentium M(Banias)时代,英特尔就引入了micro-fusion(微融合)技术,虽然都是“融合”,但是微融合和宏融合差别很大。微融合技术是指一个简单解码器能够把一条x86指令转换成两条符合特定条件的微操作。这两条符合特定条件的微操作会被合并成一条发送到ROB,在ROB中占一条微操作的存放位置(一个entry)。当这条合并的微操作发送到保留站的时候,就会被重新拆开,以并行的方式发送到不同的微操作发射端口或者以连续的方式发送到同一个微操作发射端口。符合微融合的指令最常见的就是load/store类的指令。由于在这个过程中解码器实际发出来的微操作可以做到7条以上,因此我们也就可以说解码器可以给下游的指令ROB(I-ROB)发送7条以上的微操作了。宏融合技术和微融合技术都能提高解码电路的有效带宽和性能并节省存储晶体管,使处理器的性能/耗电比值提升。Conroe前端的另一重要单元分支预测单元沿用了Yonah的技术,而Yonah、Dothan、Banias的分支预测技术其实都是基于Pentium 4的,当初Pentium 4发布的时候,英特尔就曾经宣称Pentium 4的分支预测器命中率优于所有其它已经公开发布的分支预测器。Conroe的乱序执行单元更多的指令端口及增强的向量处理能力 x86指令解码后以长度固定的微操作的形式存放到指令ReOrder Buffer(I-ROB),P6的I-ROB能够存放40条微操作,Pentium 4的I-ROB能够存放126条微操作,这些微操作都是经过了重新排序以及寄存器重命名的(减少x86寄存器约束造成的等待时间,提高性能)。到了Pentium M(Banias、Dothan)和Core Duo/Solo时代,英特尔没有透露其I-ROB的细节,不过根据渐增的指令(nop)测试来看,Banias、Dothan、Yoanh的I-ROB容量大约是48条微操作(也有说法认为是72条)。i-ROB中能放的微操作数量,对于OoO(乱序)执行微架构来说,意味着可以在最接近的距离内有多少个指令随时待命供选择执行,例如指令A执行的时候,指令B如果和指令B不相关的话,那么这两条指令就可以同时执行。而在Conroe上,它的I-ROB可以存放96条微操作,就是说最高同时提供给乱序执行单元可供选择的微操作指令达到了96条,当然,除了专门编写的测试程序外,I-ROB内全是完全不相关指令的情况其实并不多见。不过I-ROB只是代表在同一时间点内有多少条指令完成了寄存器重命名(re-name)和重新排序(re-order),在Conroe的整个流水线上(包括指令拾取、解码),实际上最多可以有56条指令(每一级流水线上有4条指令在运作,因此是14级流水线工位*4条指令)处于运作(in-flight)状态。I-ROB的entries/峰值运作指令的比率为1.7,在P4上这个比率是1.4倍。比率越高,说明流水线上可供乱序执行单元执行的指令资源越充沛,乱序执行单元“碰上”能并行执行的指令也就更多了。Yonah乱序执行单元Pentium 4乱序执行单元Conroe乱序执行单元Conroe每个周期能够向乱序执行单元发射出6条微操作(三条算术/逻辑,三条内存操作),相比之下Yonah是5条(两条算术/逻辑,三条内存操作)。Pentium 4是4到6条,因为Pentium 4拥有两个双倍CPU主频的简单整数运算逻辑单元,它们有专门的倍速传输指令发射端口,在最理想的情况下能够做到4条加法操作+两条内存操作。但是这里的简单整数运算逻辑单元并不能执行所有的整数操作而且还要肩负计算Store地址,在P4只有一个复杂整数算术逻辑单元能完成所有的整数操作。Conroe的整数执行单元Conroe拥有三个整数算术/逻辑单元,在最理想的情况下每一个都能一个周期完成一条简单的64位整数(例如整数加法)指令,但是只有一个单元能执行整数乘法运算。此外,这三个单元中的一个具备JEU(跳转执行单元),用于执行分支操作,如果Conroe的前端有宏操作融合的指令转换出来的话,那么那条被转换出来的宏融合微操作也是在这个JEU执行。Conroe的浮点执行单元Conroe拥有两个浮点算术单元,均能执行向量和标量浮点算术操作,一个能执行加法操作以及还有一些别的简单操作,数据格式如下所示: 标量(Scalar):单精度(SSE)、双精度(SSE2)、加长双精度(x87) 向量(Vector):4D单精度(SSE)、2D双精度(SSE2)另一浮点单元能执行浮点乘法(以及除法)操作,数据格式也如上所示,包括32bit单精度标量和2*64bit双精度标量。为了确保Conroe能达到单周期128bit向量执行能力,Conroe的解码器能够把IA指令转换成128bit的微操作,而不是像Yonah那样转换成两条64bit的微操作;此外,Conroe SIMD执行单元的数据输入路径和L1 D-cache-保留站的写回路径也都拓展为128位(Yonah是64位)。Conroe指令延迟周期与指令吞吐间隔周期列表上面这个列表是Conroe和Yonah的指令延迟周期数和指令发射间隔周期(吞吐量),这个结果是来自我们(PCINLIFE)运行程序侦测出来的,因此并不代表官方的数字(官方尚未发布这方面的细节)。从这个列表来看的话,Conroe的x86指令性能普遍要比Yonah提升,例如ADD r32, r32的 吞吐能力比Yonah提升了50%,Conroe可以每个周期执行3条ADD r32, r32指令,而Yonah只能做到两条;IMUL r32(立即数乘法指令)的 吞吐能力一样,但是延迟时间降低33%。特别值的关注的是,SSE的ADDPS(4D 32bit共128bit,单精度加法)、MULPS(4D 32bit共128bit,单精度乘法)和SSE2的ADDPD(2D 64bit共128bit,双精度加法)、MULPD(2D 64bit共128bit,双精度乘法),这四条重要SSE算术指令的吞吐周期都降低到1个周期,真正做到了英特尔宣称的每个周期执行一条128位向量加法指令和一条128位向量乘法指令的能力,和Yonah相比Conroe双精度乘法的吞吐能力更加是提升了三倍,毫无疑问,Conroe的向量单元已经全面引入了流水线化的设计。Conroe的Memory Disambiguation内存投机资料装载消歧机制 英特尔在Pentium Pro就引入了乱序内存操作,其关键的部件就是MOB(Memory re-Order Buffer,内存重排序缓存),概念类似于I-ROB,可以让多个load和store操作同时处于运作中。不过要实现OoO内存操作,就需要消除出现内存地址重叠造成的冲突问题,即所谓的Memory Disambiguation。上图的上半和下半分别代表了没有/有采用内存投机装载消歧技术不具备内存投机装载消歧的CPU需确保指令1执行后才作新装载动作,否则必须等待内存投机装载消歧技术的Conore可以在指令1还在执行的时候装载地址C的数据具备内存投机装载消歧技术可以有效提升内存装载动作的效率如果遇到前一条指令会改写地址C,那么指令二就会再执行一次装载动作例如指令a=b+c和指令d=b+e,b在这里被使用两次,理论上它只需要被装载到寄存器一次,然后就可以使用两次了。但是实际上不能这样做,因为加入a指向的内存地址和b是一样的话,就会出现地址重叠产生很大的问题,故此编译器还是会生成两次b的load操作。在P6上的OoO内存操作规则是相当保守的,它发现如果有一条store指令包含了未定的内存地址,那么所有的load操作都会被延后,不能作提前执行。不过按照RWT David Kanter所提供的资料,即使是同时具有512条运作指令的EV6+处理器,其中97%的load、store指令地址都不会出现重叠(指针指向同一个内存地址),而对于只有96个同时运作指令的Conroe来说,load、store地址重叠的现象应该更少,因此会假设所有的load和store不存在重叠问题:Conroe虽然看到b需要两次load操作,但是它先load b一次,然后在引退(retirement)之前如果发现b和a的地址撞车的时候才会再load一次b。整个预测、检查操作对程序和操作系统来说都是透明的。当然这是需要增加晶体管来实现的。采用了这样激进的规则后,所有的load操作都能够和算术、Store指令一起执行(Conroe有三个算术单元和一个load单元以及两个store单元),比以往有时候必须等待算术指令、Store指令执行完后才跑load显然要快得多,内存读取得延迟相对更短了,有些类似于对内存读操作作分支预测。由于是猜测性的,所以还是会出现猜错的机会,不过英特尔并没有透露猜错时候的性能损失,更多的是强调命中的机会非常高。Conroe的高速缓存、预拾取、外部总线、主内存系统 Conore的两个内核各拥有32KB两路相连L1指令高速缓存、32KB两路相连L1数据高速缓存,其中两个内核的L1数据缓存具备一致性总线来实现cache一致性,而两个内核都共享一个16路相连CPU全速运作的4MB L2 cache。L1数据cache-L2 cache的连接带宽提升为256位(之前的Yonah、Dothan为128位),而Coppermine PIII时代所说的256bit L2 cache总线其实只是指DIB界面和L2 cache的连接带宽为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东华润电力春季招聘考前自测高频考点模拟试题及答案详解一套
- 2025福建福州市长乐区卫健系统招聘78人模拟试卷及答案详解1套
- 2025年哈尔滨巴彦县公安局公开招聘警务辅助人员32人模拟试卷附答案详解(突破训练)
- 2025广东东莞市东坑镇中心幼儿园第二批招聘老师3人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025广东南粤银行资金运营中心招聘模拟试卷(含答案详解)
- 2025年春季福建华南女子职业学院人才招聘15人考前自测高频考点模拟试题有完整答案详解
- 2025年中国化妆品级2-甲基间苯二酚行业市场分析及投资价值评估前景预测报告
- 2025北京市卫生健康委员会直属事业单位招聘20人考前自测高频考点模拟试题(含答案详解)
- 2025年大庆萨尔图区开展“职引未来全国城市联合招聘高校毕业生春季专场活动”模拟试卷附答案详解(突破训练)
- 2025年5月汉中市铁路中心医院招聘模拟试卷及答案详解(网校专用)
- 2025-2026学年高一上学期第一次月考物理试卷(北京)
- 第一单元《精神信仰力量情感》《大路歌》教学设计湘艺版初中音乐八年级上册
- 动火作业现场安全防护设施布置与维护更新方案
- 核心素养导向课堂教学反思
- 《机器学习》课件-第3章 监督学习
- 山东省济南市2025届中考数学真题(含答案)
- 医疗机构医疗质量安全专项整治行动方案
- 基于SprintBoot的大学生实习管理系统的设计与实现
- 外踝撕脱骨折课件
- 钢架油漆翻新施工方案(3篇)
- 数字平台治理 课件 第五章 数字平台生态治理
评论
0/150
提交评论