|
Core之体验全球之旅 长城脚下感受王者之风
岁月如梭, 2005年秋季IDF上Intel宣布替代P4的下一代构架计划仿佛还在昨天,而计划中的下一代微体系构架桌面主力的酷睿(CONROE)处理器7月份上市如今已经是铁板钉钉的事情了。我们在感叹Intel这次在构架更替动作的雷厉风行外,也不禁为6年来为Intel征战南北的Netburst最终黯然离场而嗟叹,回头看看,Netburst自从2001年4月进入消费者视野后,就一直没有摆脱过流言蜚语的纠缠,遵循着“频率至上”的设计思想,6年最终演化出一个功耗失控、执行效率低下的畸形产品。Intel当然也认识到问题的严重性,在65nm Netburst构架的终极Prelser投产销售的同时,将性能/功耗比当作首要研发目标的新一代微构架已经如箭在弦,蓄势待发。

而从IDF上Intel透露新的微构架部分细节开始,有关Intel新一代微构架的传闻就陆续不断,其中不乏猜测成分。其实这个在IDF还被称为“Merom”的新一代核心微构架,如今早已有了名为“Core”的官方命名,相关的后期测试工作早已完成,已经进入前期的市场运作阶段。为此,Intel特意准备了一行七人的全球巡回“Conroe”媒体见证和体验之旅,为我们带来了有关新一代处理器微构架以及性能表现的第一手官方资料。不过具体的测试数据Intel对应邀参与的媒体发布有严格的时间要求,所以本文仅就Core微构架体系上变更做详尽的讨论。让大家对Intel未来一统台式机的Conroe、移动平台Merom以及服务器Woodcraft三大平台处理器的新一代微构架有一个深刻的认识。

延续经典 Core五大核心变革终结Netburst

在开始进入Core构架的相关技术讨论之前,我想向读者们讲清楚Core构架和它的前辈们的关系。虽然Intel的技术人员反复强调Core是兼顾功耗和性能的全新微构设计,但是从技术发展角度讲Core核心构架还是大量吸取了来自Pentium 4 以及 Pentium M (Banias)的优秀设计,而因为Pentium
M的设计和上一代的P6微构架颇具渊源,我选择把Core看成是P6构架血统新的延续和发展,但两者之间只能说是总体思路相似但是具体实现相差万里。
在Core微体系构架中,Intel加入了很多旨在提高性能和改善功耗表现的新技术,其中最为重要的有如下五大变革:
l
宽度动态执行技术
l
高级智能高速缓存技术
l
智能内存访问技术
l
高级数字媒体增强技术
l
智能功率技术
在下文中我们就结合本次全球巡回“Conroe”媒体见证和体验之旅获得的《官方Core微体系白皮书》以及笔者所能获得的相关资料来为大家深入剖析未来五年Intel主力核心构架——酷睿Core

Core微构架体系结构示意图
注:
最初的Pentium微构架被称为P5。因为Pentium
Pro的微构架被认为是P5的继任者,所以也就被Intel顺理成章的赋予P6的代号,P6被认为是Intel无论是技术还是商业都取得极大成功设计,而经过多次完善历经了从Pentium
Pro到Pentium III漫长岁月,也是公认的Intel长寿构架之一。
  
宽区动态执行 Core历史上最强悍X86执行核心
目前有越来越的处理器的设计方向开始从乱序执行 (OOOE,或者 OOO)转向顺序执行设计,这些设计普遍更多地使用超长指令集,这些设计更依赖于多线程以及对编码器和编辑器的性能。但是Core的设计仍旧是坚定的传统乱序执行设计思想的体现,可以说将OOOE设计思想的巅峰之作。总体说来,Core是比NetBurst
微架构或者 Yonah 微架构更宽、更多硬件资源以及更大规模的产品。几乎在Core构架流水线上所有的组成部分都被强化设计了:更多的指令解码逻辑单元;更大的乱序指令缓冲空间;更多的保留站入口;更多的指令调度端口;更多的执行硬件;更多的内存缓冲空间等等。简而言之,“尽可能增强所有对性能有益的配置”似乎成了Intel以色列海法设计团队的研发Core的指导思想。
更宽的构架有时并不意味着更好的性能,因为现实世界的程序代码执行的时候都会受到可并行执行指令数量的限制,所以更宽有时候也可能由于指令并行(ILP)产生更多的每周期执行单元的浪费。同时,内存延迟造成的代码和数据供给不及时也会造成执行单元的浪费。
为此Core在构架设计之初就准备相应的技术来解决ILP和内存延迟的问题,保证能喂饱强大的执行单元。在前端,宏融合(acro-fusion)、指令融合(icro-ops fusion)以及强壮分支预测单元(BPU)一起保证执行核心有足够的代码供应量;在后端,大规模扩充的指令窗口确保在每周期供给执行单元足够的指令数量。此外Intel还解决长期存在于以前设计中的SSE指令处理瓶颈,比起前辈们在SIMD指令处理方面有两到三倍的提高。
P6血统延续,从Pentium Pro 到Core
我们知道P6构架流水线当初最为与众不同的设计之一就是引入了“调度端口”的设计,Core仍旧在执行核心上使用了类似的结构,不过在具体的调度端口和保留站(Reservation Station)的结合方式上有了很大的不同。为了对调度端口设计的发展历史,我们要先从最初使用该设计的Pentium Pro.处理器执行核心开始。

Pentium Pro的执行内核示意图
我们从上图可见,ports 0 /1负责对算术逻辑单元的数据供给,而o ports 2, 3, 和 4 主要用于内存存取硬件。P6核心的保留站设计拥有每周期5条指令到执行单元的能力,每个调度端口每周期一条指令。
当P6核心构架发展到Pentium II 和Pentium III的时候, Intel开始为执行单元增加用以执行整数以及浮点矢量运算的单元,即最早的MMX和SSE指令集。不过这些这些新的矢量执行硬件被硬性增加在 ports 0/1的连接上,其结果就是造成这两个调度端口到了PIII构架的时候已经被各种数据弄得拥挤不堪。P6的执行核心构架如下图所示。

Pentium III执行内核示意图
PIII核心设计其实相当的宽,但是把矢量处理资源分配到主调度端口也就决定了其必然因为缺乏足够的调度端口带宽造成矢量数据处理能力的瓶颈:标量和矢量运算指令的代码留争夺着对两个调度端口的控制权。再加上SSE指令必须分两周期完成的限制,最终导致了PIII矢量运算指令性能低下。有关Pentium M (Banias) 指令调度端口功能分配的具体细节目前Intel都没有给出具体的说明,但是我们认为它基本延续了Pentium III.的设计思路,瓶颈仍旧存在,而这些问题都在Core核心上得到针对性的解决。
除了更大的保留站设计 (32 入口),
Core核心的执行核心采用了一个全新的调度端口设计,把调度端口的数目增加到了6个 (与此类比P6是5个,而Netburst只有4个),并且把用于连接算术逻辑指令的调度端口增加到了3个,尽管Intel还没有具体公布调度端口的具体任务分配,但是笔者估计每一种类的算术逻辑执行硬件获得了单独代码获得端口通路。

Core执行核心整数执行单元示意图
Core内核拥有3个64-bit整数执行单元,每一个都能在单周期内完成64bit标量整数操作。但是三个单元又有不同,其中一个是64bit复杂整数单元 (CIU),它的作用和P6 核心中的CIU基本相似,以及两个简单整数单元(SIU),它们主要用以处理像加法这样的基础操作。两个SIU之一和分支预测单元 (BEU Intel称之为跳转执行单元)公用Port2调度端口。在这个端口上的简单整数单元可以和分支预测单元一前一后执行宏融合指令.(compare 或者 test + jcc).
在Core核心上Intel第一次赋予了X86体系构架单周期完成64bit整数计算的能力,在这一点上Core甚至领先于IBM的PowerPC 970, 要知道后者完成这一整数操作的时候还必须产生两个时钟的延迟。不仅如此,因为所有的64-bit 整数ALU都和调度端口独立连接,这样Core核心能够维持每周期三条64-bi整数操作的指令吞吐能力,这是一个相当强悍的指标,而且对于无论是移动计算、游戏或者是服务器运算都会有巨大性能提升。
浮点执行单元
Core核心拥有两个浮点执行单元,两者都可以执行标量和浮点算术运算。和port
1相连的执行单元负责执行以如下格式的浮点加法及其他简单操作:
标量: 单精度
(32-bit), 双精度
(64-bit)
矢量: 4x 单精度,
2x 双精度
和port 2相连的浮点执行单元负责执行上述格式的浮点乘法和除法。需要注意的是,在上面的Core核心示意图上,我将FADD/VFADD以及FMUL/VFMUL管线描绘成了四条独立的区块,为了更清楚的表述FADD/FADD, FMUL/VFMUL两队执行硬件的共享关系,两组区块使用了相同的颜色,实际上上图描绘出来的四个区块物理上实际只是两条处理管线。
Core核心的流水线设计
Intel目前还没有透露有关Core构架流水线的设计细节,我们到目前所知道的也仅仅是14级流水线的设计,这一长度和PowerPC 970的流水线不谋而合,介于Pentium 4 Prescott'高达31级的流水线和P6构架12级流水线之间的数字。这说明了Core的构架是兼顾流水线执行效率和后续频率提升得设计,而不是像Pentium
4.那样设计完全向有利于提高频率倾斜。-
假如我必须猜测Core流水线的组成的话,我宁愿相信它很大程度上和P6的流水线设计相同,但是增加了两级进行信号传播和或者预留频率提升空间,新的两个阶段可能是为额外的预解码或者为编码级前端增加各种特性增加的,比如下面要提到的宏融合以及微融合,以后我们在Intel公开更多的信息后会得到肯定的答案。
Core指令窗口设计
因为Core核心的后端处理单元吞吐量及高,性能强悍,所以相应的乱序执行缓冲(ROB) 被加大到96个入口,这比Pentium
M 40路入口设计多出一倍不止。此外Core的统一保留站(RS)也被相应加大以便适应供给足够的指令和数据给执行单元
不但如此,Core的指令窗口(ROB + RS)不但在物理规模上增大,而且在执行效率上也进行了增强,下面要讲到的宏融合以及微融合就是起到这样的作用,在同等的硬件开销下Core获得了更强的指令追踪能力。如此看来,Core的指令窗口实际上比ROB和RS 提供的绝对入口数量所显示的更多。
我们看到Core的指令窗口比起它的前辈们有成倍的增涨,如何为这样庞大的指令窗口提供稳定充裕的新指令流就成了一个问题,为此Intel在Core的执行核心前端使用了不少新的创新技术来保证有充裕的代码供给量喂饱指令窗口和执行单元。
前端设计,X86体系首个四发射指令译码单元
执行内核前端的作用就是把足够的X86指令译码至处理内核可以直接处理的微指令代码,为此Core配备了一系列重要的新特征,其中最重要的是全新设计的译码器单元,提高了每周期X86指令转化为微指令的能力。
下图所示的是最初的P6构架译码单元的硬件设计,由两个简单解码单元和一个复杂解码单元组成。简单解码单元主要负责处理直接译码后生成一条处理器微指令的X86 指令,这一类型的指令占据X86指令集中的绝大部分。这些简单译码器一般都是以每周一条的速度将译码后获得的微指令传送到微指令缓冲区(micro-op buffer)。

P6构架的译码器设计
而复杂译码单元面对的情况就复杂的多,它主要负责译码后生成2到4条微指令的X86指令。这些指令在X86指令集中只占到很少的部分,比如字符串操作指令,它译码后就可能产生四条甚至更多的微指令,这些微指令以指令流的形式传输到微指令缓冲区。
如此看来,P6核心的三个译码单元拥有每周期六条微指令的最大输出能力,而译码单元和微指令缓冲区整体构成的译码部分每周期能向ROB传输3条微指令。
因为Core的微指令分派单元和执行核心部分都被空前的加宽增强了,原有的P6译码单元的设计已经很难为处理器的后续部分提供充足的微指令。Intel决定进一步提高已经维持了近十年的X86三译码器结构,提高单位周期的微指令产出率,所以在Core的设计中我们看到为达成这一目标的全新译码器设计。
我们看到的第一个改进设计增加了第四个简单译码器,这意味着新的Core译码硬件每周期能输出7条微指令到微指令序列中去,而每周期传输到ROB的能力也提高到了4条。新的译码器单元结构如下图所示。

Core构架的译码硬件设计
第二条改进就是扩大了简单译码器提高了处理指令类型的范围,借助于新的微指令融合以及新的SSE执行硬件(下文详述)像以往只能通过复杂译码器处理的访存指令、SSE指令如今都可以简单译码完成。通过上述的综合手段,Intel让译码部分获得了非常接近于每条X86指令产生一条微指令的理想状态,为什么这个状态是理想的呢?我会在下文详述。
指令融合技术(Instruction fusion)软硬兼施拓宽通路
宏融合Macro-fusion
所谓宏融合即针对译码工作前的X86指令,可以在预解码阶段将相似类型的X86指令进行融合操作,然后将其送入单译码器中产生一条微指令操作。这项操作的对于X86指令的针对性很强,并不是所有的X86都可以进行,比如像compare 和test指令就可以和分支指令相融合译码,只会产生一条微指令操作。在Core的四个译码器单元中,每一个单元都有一周期完成一次宏融合到产生微指令的能力,但是总体存在每周期产生一条微操作的总限制。增加微指令融合不但要在预译码部分和译码部分的流水线增加新的硬件设计,同时也要对后端的ALU和分支执行单元进行修改。这些新增加的硬件部分负担会被宏融合带来节省后端硬件开销弥补,因为宏融合在同样的X86指令输入数量下产生更少的微操作指令,最终完成同等工作需要更少的后端硬件开销,从Core核心整体来看就是获得每条X86指令最佳的功耗效率,这就是Intel为何努力尽可能的让译码单元获得X86指令和处理器执行的微操作指令的1:1 译码产生率的原因。
当然,如果说宏融合可以在更少的ROB以及RS后端硬件资源下完成等同甚至更多的工作,那么也意味着该技术的应用为同等或者更宽更强大的后端硬件提供了足够的前端译码能力,总体获得了更大的执行带宽。一个单ALU可以执行一条实际上是两条X86指令融合后的微操作,就好比两条指令同时并行运行,即相同的执行单元数量的前提下获得更强的处理能力。微指令融合Micro-ops fusion
微指令融合是Intel在Pentium
M首次导入的技术,在效果上和前面说到的宏融合类似,都是尽可能的减少微操作指令的生成数量,但是运行原理却是不同。一般情况下,简单译码器接受了通常转化为两条微指令的X86指令后,它就会产成一对相关联的微指令对,通过ROB的单独入口进行追踪。当这个指令对进入保留站,其中每一个成员指令被允许单独调度分配,根据两条指令的并行度决定它们是并行通过两个不同的调度端口,还是连续的从一个调度端口抵达执行单元。最为常见的关联微操作指令就是载入和存储命令,我们可以来看看它们在P6构架上执行的过程,这样更容易理解Core的微指令融合的不同之处。
在P6构架上,存储指令被分解成两条微指令,存储地址计算微指令和存储数据微指令。前者负责计算数据存储的地址,它是由P6构架中的地址产生器处理然后将生成地址暂存在存储地址单元等待执行;后者存储数据微指令将数据存入到外部存储数据缓冲区,当存储指令完成,这部分数据就被写入外存即系统内存,这条微指令由P6构架中的存储数据单元执行。因为这样的两条微指令存在固有的并行关系,它们可以通过两个不同的调度端口进入不同的执行单元处理,当数据写入到存储缓冲的同时,存储地址已经计算出来了,两条微指令形成自然而然的并行运行关系。
而Intel说明在PM处理器后,上述传统的P6构架的译码单元结构出现了变化。它不再将存储指令译码为两条单独的微指令,而是将它们融合成一条。这条指令以融合状态通过调度端口,直到抵达真正的存储单元后,才被执行核心分别处理。融合的load操作与此类似,采用了串行调度替代了并行调度方式。
类似于宏融合,微指令融合在更少的入口和硬件开销下让ROB具备更多的微指令调度和提交能力,等同于把Core执行前端译码器、分配器、调度部分的带宽都等效提高了,为每周期处理更多的X86 指令提供了前提,也为总体构架性能提升贡献不少。提升前端效率,意味着达到同样处理能力后端可以适当简化,同样可以达到降低处理器功耗的作用。
前端分支预测
增加循环探测和间接分支预测
为了达到性能和功耗的均衡设计,Intel花费了大量的晶体管在Core的分支预测单元上。为什么如此呢,其实现在的处理器设计中,内存和处理器的距离(以CPU周期衡量)不断增大,花费如此多的晶体管资源在分支预测硬件的构建上因为能获得和这种投入相称的回报。我们知道,如果分支预测没有命中,就会用相对慢得多的速度从主内存中重新取得正确的分支目标;在这个漫长的时间里,在单线程处理器处在空闲状态,浪费执行资源,是没有产出的纯功率消耗。所以优秀的分支预测单元不仅关乎处理器的性能,而且极大提高处理器单位时钟有效性,从而达到节省功耗的作用。
Core构架本质上仍旧使用了为Pentium M.开发三段式分支预测器,其核心组成部分是一对预测单元,包括一个双峰统计预测单元和一个全局预测单元,它们记录了最近执行过的分支记录信息。这些预测器基于这些过去的执行历史记录决定处理核心前端可能下一步的分支预测结果。如果处理内核前端决定了要执行的分支,那么分支预测器从分支目标缓存中(BTB)取回分支目标代码的地址,然后依照这个新的地址定位取得相应的指令。
Core内核的双峰统计及全局预测器并不是构架中唯一的两个分支预测硬件结构,在Pentium M上两个不同的分支预测器被首次引入,即循环探测器和间接分支预测器。
循环探测器
脱离循环分支在一个循环过程中只会执行一次,因为执行这个分支就意味着循环的结束,所以它不会像标准分支预测那样频繁的发生。如此以来像标准分支预测器中的历史执行记录表存储不可能获得足够的历史条目,来正确预测超过某一数目的循环操作的终结分支。循环镇测器和上述标准分支预测单元的工作原理不同,它不断监控处理器执行的每一个分支的状态,鉴别其是否处在完成循环状态,如果答案是肯定的,则把这个循环直到结束进行的循环次数记录在特殊的一组计数器中以供后续参考。当处理器内核前端再次遇到了同样的脱离循环分支,那么它就能准确知道这个循环结束前往复的次数,这样已经记录下的选环计数器内的数据就让脱离循环预测百分之百的准确。
间接分支预测器
相比直接分支预测,间接分支预测难度和时钟开销更大,因为间接分支预测要从寄存器中载入分支目标代码地址,而直接分支预测在相同情况下就能立即从BTB中获得。Core构架中的间接分支预测就是用来解决这个问题的,其储存了内核前端遇到过的所有间接分支预测产生的首选目标地址历史列表,当遇到间接分支预测时,就可以依照历史信息直接跳转到BTB中存储的目标地址,执行分支跳转。
高级数字增强
数倍增强SSE执行性能
对于苹果电脑迷们来说,苹果迁移到Intel平台可能让他们最不放心的就是失去了原有PowerPC处理器上的AltiVec技术, 不过这些用在现在可以放心了,因为Core特别改进了它的前辈糟糕的矢量处理能力,也就是Intel常说的单指令多数据(SIMD)性能。
在上面讲述Core执行单元结构的时候提到, 128-bit浮点算术运算操作通过 FADD/VFADD 和 FMUL/VFMUL 两条流水线进行,这两个单元是矢量和标量浮点操作兼顾的设计,其中每一个都可以进行浮点和矢量计算器移动操作,最后,我们猜测 FMUL/VFMUL流水线也具备矢量平方根操作能力。
在上图中,有关整数矢量操作 (64-bit MMX 指令和128-bit SSE整数指令)的情况表述的并不明显。从我们获得的信息来看,矢量整数单元连接在 ports 0 和 1上的设计被扩展到 128 bit,这样就顺理成章的具备了单周期完成128bit的矢量整数的能力。我们现在假设它们的构造和PIII类似,一个单元负责 128-bit VALU/shift操作,而另一个负责 128-bit VALU/multiply操作。
此外在port 2上我们还能看到第5个128-bit
矢量流水线,我们现在除了知道它进行矢量寄存器移动外,其他细节尚不得知,我个人猜测它还具备SSE shuffle、矢量数据的取倒和反平方根操作。如此看来这个单元的设计和PowerPC G4和 970上的AltiVec
vector 序列改变处理单元起到的作用是等同的。
现在我们对Core的矢量指令处理器硬件的结构已经差不多搞清楚了,那么我们就一起来看看,Core核心对提高处理SSE/SSE2/SSE3处理能力的最大改进之一:为所有矢量处理单元提供真正的128-bit 数据通路。
真正的128-bit矢量处理能力
当Intel决定为Pentium
产品线加入SIMD扩展指令(SSE),用以获得128-bit 矢量处理能力的时候,其结果并不像程序员或者是最终用户想像的那么完美。 SSE以及它们的继任者 (SSE2 and SSE3) 在P6 和PM(Banias)构架上运行都存在两个设计缺陷:在本身的扩展标准上,SSE的主要缺陷是缺少对三操作数指令的支持,这就让它在执行效率和性能上比起PowerPC上的AltiVec 落了下风。在实施硬件设计上,Intel将128-bit
操作硬生生的塞入P6核心的64-bit 数据通路中也大大限制了128-bit SSE 操作的性能发挥。
我们知道P6 核心用以传输浮点运算和MMX指令的数据总线只有64bit位宽。这样以来连接SSE执行单元的输入端口也同样只有64bit的位宽了。为了在64-bit SSE 单元上执行128-bit的长指令,P6必须先把这条长指令分解为一对可以在后续周期中可以执行的一对 64-bit 指令。
为了更清楚的表明这一过程,我们可以看下面的示意图,它非常形象的为大家呈现了P6译码单元和执行单元是如何处理128-bit SSE 指令的。译码器首先把128bit的长指令一分为二,获得两个64-bit 微操作指令, 分别负责上下两部分的64 bit矢量数据。然后这一对微指令传递给相应的SSE处理单元进行执行。

P6 构架执行
128-bit 矢量运算过程
但这毕竟是一个折中的方法,带来的坏处就是所有的128-bit 矢量操作在P6构架上至少需要两个时钟周期才能完成,一个时钟处理上半部分,另外一个时钟负责余下的。与此相比PowerPC G4的简单128-bit AltiVec操作只消耗一个时钟。
在新的Core构架上,Intel这次终于为我们提供了单周期延迟的128-bit 矢量操作能力。Intel通过将浮点和矢量内部传输总线提升到128bit位宽彻底解决了这个问题,另外这一设计的改变也意味着每一条128bitSSE指令之需要产生一条微操作指令,这样新的设计不但消除了执行矢量操作过多延迟,更少的微指令产生量也等同于提高了译码、分派、调度整个内核前端的等效带宽。

Core执行 128-bit矢量运算过程
同样如上图所示,矢量ALU的数据端口,无论是输入还是输出,其位宽都比它的前辈们有了成倍的提高,以用来适应每周期的128 bit数据传输。
当我们把上述重要的改进放在一起的时候,一个Intel有史以来最为强悍矢量处理怪兽处理器诞生了。Intel的技术人员如此形容Core的强悍能力,一次 128-bit多数据乘法、一次 128-bit多数据加法、一次 128-bit多数据载入、一次 128-bit多数据储存,一次cmpjcc(y一次比较+一次跳转)的宏融合,上述所有操作在同一个周期都可以搞定,这相当于每周期六条指令的执行能力,比起以前的Intel有着飞跃成长。
智能内存访问
不用集成内存控制器照样玩转
传统的乱序执行处理器都存在这样的一个准则,在指令修改某个内存地址内容前必须确定之前指令的对该地址内容的读取都完全执行了,这是乱序执行处理器重新对指令排序必需要遵从的一个重要准则。我们可以通过下面的示意图了解这个过程。第一行指令的意思是存储数字13到未知的存储单元,下一行的意思是从红色内存单元读取数据到寄存器A,最后一行是一个算术运算指令,将寄存器A和B存储单元的内容相加,结果放置到的寄存器C上。

内存混淆发生过程
我们可以把右侧的方格当作是存储地址,红色和蓝色的方块分别代表存储操作可能目标地址A和B。如果存储指令对红色单元(A)进行了写入,这样存储操作必须先于载入进行,这样载入的数据就是前面存储指令更新后的数值,进而这一数值参与了后续的加法指令T (通过寄存器A)。如果存储指令对蓝色单元 (B)进行写入,那么无论是存储指令先于或者晚于载入指令运行都不会整体结果产生影响,因为存储指令改变的是无关的地址数据。
上面的过程形象的说明了内存混淆的过程,当存储和载入对同一个地址产生操作,两条指令就发生了我们所说的“内存混淆”情况,在上述范例中,选择了A就是一个内存混淆的例子,而B不是。
根据权威的统计,在类似上述的例子中,超过97%的内存访存指令实际上都指向了B单元,这样的操作实际上是无相关性的内存单元进行访问,是理论上的独立指令。但是就是为了剩余这3%的内存混淆情况,P6构架和Pentium
4都使用了偏向保守的访存排序策略:如果读取的地址尚未确定,那么它始终不能提升到储存操作之前,以此来避免后续获得的读取地址和存储地址相同发生的冲突。
这种做法看起来非常的安全,但是也非常保守,因为绝大多少的载入-存储操作不会发生内存混淆,这种大而化之的处理方法会带来性能的下降。下图的指令执行时序图反映了在P6 和Pentium
4构架中采用保守访存排序策略时,上面例子中选择A或者B带来性能差异。

没有应用内存消歧技术的程序运行过程
在上面的例中中,无论选择了A 或者B,在开始其它访存指令之前存储指令的目的地址必须首先获得。但是这个目标地址知道第二个时钟周期才能得到,这意味着处理器在第二时钟之前不能进行任何访存操作。当在第二周期获得地址后,如果选择了A有效,那么处理器还必须等待一个周期让存储指令将红色存储单元更新,才能运行载入操作。接下来,载入操作执行,它还需要执行额外的一个时钟去将数据从红色存储单元移至寄存器。最终,这个加法运算耗费了六个时钟周期才得以完成。
如果处理器发现选择B有效的话能避免出现访存混淆,载入操作能在存储操作执行后(甚至并行)马上执行。
Intel在Core构架中全新倒入的内存消歧技术就是用来解决上述问题的。该技术能智能识别内存混淆是否发生,在确认不会发生后,以往在
P6构架和Pentium 4中载入操作不能提前到不明地址存储操作之前的限制就不存在了。下图中模拟了采用内存消歧技术后同样一段代码的执行情况。

应用内存消歧技术的程序运行过程
但是如果应用的内存消歧技术选择了B有效,那么载入操作就可以在存储地址尚未确定之前进行,存储操作留在后续地址确定后进。在这样的访存重新排序后,处理器把执行同样的加法代码时间缩短了整整两个周期。这只是一个简单的加法运算提供的性能提升,我们再想想Core的加大号指令窗口中大量指令所包含的访存操作,内存消歧技术能够节省大量的执行周期。现在来说内存消歧给最终性能带来多少影响可能为时尚早,但可以肯定是在访存密集型的浮点代码执行时,这一设计会起到非常明显的性能提升。
除了内存消歧外,Intel的智能内存访问还包含增强的预取器。预取器负责提前获得内存的内容,并将其放入处理器的高速缓存中,以备读取。增加从高速缓存而不是内核的装载量将会算短内存延迟并提高性能。为了让数据位于每个执行内核所需要的地方,Core微构架为每一个以及高速缓存和二级高速缓存均配置两个预取器。这些预取器同时检测多个数据流和大跨度的存取类型。这样就可以在一级高速缓存中“及时”准备待执行的数据。二级高速缓存的预读器可以分析内核的访问情况,确保二级缓存拥有未来潜在需要数据。
通过内存消歧和增强型预取器,Intel最大化的拓展了系统总线带宽和隐藏了内存子系统的延迟,从一定程度上拉近了和对手集成内存控制器的延迟差距。同样,要达到媲美集成内存控制器的效果,共享型高级智能缓存也功不可没。
高级智能高速缓存
结束真假双核之争
在缓存结构上,Core仍旧延续了Yonah的共享式二级缓存设计,被称为高级智能高速缓存。我们要了解该设计的优势之前,需要明确目前多数的多核心产品均不能在执行内核之间共享二级高速缓存。这意味着当两个执行内核需要同样的数据时,每个内核均得将数据存储在自身的二级高速缓存上。而且每当一个内核运算改变自己二级缓存的数据时,必须通过FSB和另外一个二级缓存交换变化数据,始终保持一致性,这也大大增加了FSB的流量负担。而共享式二级缓存不同,数据仅需存储在每个内核均可访问的同一个地方,能更加充分利用二级缓存资源。
之所以称为智能,是因为在Core的二级缓存上可以让每个内核动态的利用高达100%的可用二级高速缓存。当一个尼和只需要较少的二级高速缓存时,其他内核便可以增加其二级缓存的百分比,减少缓存错误提高性能。在实际成品Conroe的4M共享二级缓存起到的作用远大于两个独立2M二级缓存简单相加容量的提高。
此外,在多线程多任务处理应用中,相关中间数据可以直接通过共享二级缓存在两个内核线程中共享,大大降低了FSB的重复利用。就拿典型的转换视频文件格式来说吧,该应用通常要涉及解码和重新编码两个过程,解码后获得的数据是重新编码的操作数据。传统的独立二级缓存双核心处理器遵循如下的处理方式,解码线程运行的内核获得解码后数据,通过FSB写入内存,然后另一个内核的编码线程再通过FSB从内存读取前面解码获得中间数据,经过编码后再通过FSB写入内存,此间有四种数据流共同占用FSB资源,使得FSB过分拥挤并且增加了很多访存延迟。而Core的高级智能共享二级缓存技术允许第一个解码线程直接把中间数据写入到大容量共享二级缓存中,而编码线成直接从这里获得中间数据进行后续工作,如此以来不但原来FSB流量最大的中间数据存取到内存的过程不见了,因为它所增加的访存延迟也没有了,整个过程效率也得到极大的提高。

之前Intel和AMD有关“真假双核”的核心争议就是是否存在内核间的直连构架,但是后者直连构架的交换数据正是弥补独立缓存造成的问题,而Intel如今的共享高级智能二级缓存推出后,相信诸如此类的争论也会销声匿迹了。
智能功率能力
Conroe峰值功耗最高60W

体验的Intel Conroe平台,使用975XBX原装板和X1900XTX 交火
我们迄今为止所讲述的都是有关性能提升的问题,说明Core微构架是一个执行效率远高于NetBurst 的设计,但是我们回忆一下是否遗漏Pentium M 血统的一个重要特征呢?对,那就是优秀的功耗控制。所以,在下一代基于Core构架的产品,无论是桌面还是服务器平台,所有的处理器都会享用到Intel以往移动平台处理器的功耗优势。

仍然保持LGA775封装 Prescott遗留下来的风扇资源足够Conroe用了
不过我们要说的是Core在运行过程功耗控制能力甚至超越单纯移动处理器的Pentium M,为此,Intel为处理器配备了不少先进的功率门控制系统。举例来说,处理器可以在运行中关闭用不到的特定逻辑处理单元,在降低功耗和发热的同时保证不影响性能;同样处理器中的总线模块在不需要使用时也可以转换为低功耗状态。
在过去要实现功率门控制非常困难,因为关闭电源和备份时会需要大量功率,而在回升至全功率是,还要保证系统和子系统的响应性。通过这项被Intel称为“智能功率能力”的技术,这些不可能完成的任务均得到了满足。
那么这项Intel强调每瓦性能的指导思路下的Core微构架最后的效果如何呢。根据会上Intel提供的资料,即马上到来的基于Core微构架的Conroe处理器,在其性能超过目前的Pentium D 950 40%的同时,其功耗却降低了40%。而面向服务器端的Woodcrest相比双核心 2.8GHz Xeon更是提供惊人了80%行呢个提升和35%能耗降低,这的确是一个值得炫耀的跨越。
总结
Conroe7月上市势压AM2
说到这里,我们大家可能已经对于Core的Intel新一代微核心构架有了详尽的了解,可能最想搞清楚的这样的强大的构架下,应用该构架的桌面产品Conroe处理器在具体应用的表现有多大的提升。不过我很遗憾地告诉大家,尽管在本次体验活动中笔者已经获得了若干亲自动手跑出来的成绩,但由于Intel的保密需要,不能以任何形式发布具体数据。不过我可以肯定的告诉大家,Intel“Conroe同频率下笔竞争对手至少超越20%”的承诺并非虚言。

据我们所知,7月发布的Conroe
处理器将分为E8000、E6000和E4000三个系列,通过频率速度、二级缓存容量、前端总线频率以及是否支持VT等附加技术来进行区分定位,从低端到高端覆盖从150美元到1200美元的处理器市场。
其中最高端的E8000系列即Conroe
Extreme Editon,将完整拥有VT等所有附加技术,并拥有最高的频率,最高的前端总线,毫无疑问将是性能上的最强者。中端E6000系列主要通过频率和缓存来区别,将是DIY市场的主流。无论是频率还是价格,高端型号与低端型号的差别都很大,覆盖面很广。低端的E4000系列把前端总线降到了800MHz,并去掉了VT等附加技术,定位于平价市场,类似于之前 Celeron 处理器的定位。更低的前端总线反而更加有利于超频,有希望成为超频爱好者的新宠。
按照Intel“同频率性能领先对手20%”的承诺,那么即使是面向主流中高端的T6700也足够把AMD目前的旗舰FX60拉下马,更可怕的是,该款处理器预计官方售价只有后者的一半,对目前一统高端游戏处理器的AMD杀伤力之大可见一斑。
从5月底AMD正式发布AM2 ,到7月Intel放出Conroe,这两个月的IT市场会维持和夏日天气一样的火爆高温。虽然大多数网友心中,两家的新品性能孰胜孰败已不存在悬念,性能和市场的双重天平再次向Intel大幅度倾斜。
|