步入康庄大道 酷睿微架构解析 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
http://www.sina.com.cn 2006年08月04日 16:21 IT168.com | ||||||||||||||
作者:IT168评测中心 neo 【IT168评测中心】Intel Netburst架构曾经创造了无数的辉煌,它把超长流水线发挥到极至,挑战一个个CPU主频高峰。但对于管线长度与性能的迷思一直困惑着我们,专为高频处理器打造的超长流水线在发展后期面临着高功耗高发热量的困扰,在频率的提升上也遇到瓶颈。这也造成了Netburst必然走到终点,新的酷睿(Core)架构成为主角。 在Netburst上虽然利用了超线程技术,可以充分填充和使用流水线,在编程上,通过一定时序间隔发送指令可以更有效的发挥超线程性能。不过超长流水线带来低IPC(每时钟周期执行指令数),同时高频率带来的高功耗与发热量,都使NetBurst的优势越来越小。同样使用NetBurst架构的双核处理器也不是很成功,显然INTEL需要推出新一代核心架构来面对多核时代。酷睿架构因此诞生,带着五大法宝开始一统江湖。
Core的核心 Intel酷睿微体系结构将涵盖笔记本,台式机和服务器,达到了真正的架构统一。同时Intel大量使用65nm制程工艺,相对于90nm工艺,性能提升20%而功耗降低30%。2007年Intel会推出45nm工艺,同样能提升20%性能并降低30%功耗。结合了工艺与架构的优势,酷睿微架构的出现不亚于处理器界的一次超新星爆发。
Intel微架构的Roadmap,中间的红线是核心转化的分水岭,从此Core微架构登上舞台,在这我们还可以看到未来四核心的Kentsfield。 回顾历史,Intel的Pentium III处理器也是一个分水岭,之后移动与桌面就走向了两个不同的微架构,桌面的Netburst向超长管线发展,而移动处理器Pentium M走了另一条路。而现在的Core架构更多的是建立在Pentium M所走得道路上,所以我们必须了解这段历史。 我们知道Pentium III的微架构是基于RISC核心的,具有5个执行单元。另外它的管线(pipeline)长度是10 stage。Pentium M核心使用了类似的特征,但是要提高处理器的时钟频率需要使用更深的流水线。一般情况下加深流水线会降低CPU的指令执行效率,但是可以提高时钟频率。Pentium 4需要高精度的预测机制来减少分支失败和提高流水线的输出。 提高分支预测精度 当分支预测失败后流水线就会失效,现代CPU都可以同时处理和管理几个指令,它们可以乱序执行,但是当指令中包含分支时问题就出现了。哪个指令分支会被选择,这时就需要应用到CPU的分支预测机制,分支预测基于一些复杂的算法。分支预测机制会去判断那个分支将会被执行,假如CPU犯错,它违背了指令的顺序造成分支预测失败。分支预测失败后需要把流水线中无用的代码都清除掉,这个操作是很耗时间的,尤其是长流水线更是如此,这对CPU的性能是个严重的打击。因此超长流水线的CPU需要尽量避免出现分支预测失败的情况,这是一个很大的挑战,因此需要提高它们的分支预测的算法。 Pentium III CPU加入了两个分支预测机构,Pentium M使用了两个同样的分支预测机构,另外又增加了一个。 NetBurst提高了超标量处理的性能,这依赖于分支预测的精度。减少分支预测失败造成的性能损失有两种方法,一是采用类似Pentium4的“回溯缓存”(trace cache)技术,回溯缓存保存了解码后的微代码的执行次序,一但分支预测失败它能够使流水线返回失败前的断点。但是回溯缓存要使用不少的晶体管,会增加能源消耗,第二种方法是彻底抛弃回溯缓而努力去提高分支预测精度,这是Pentium M所采用的技术。 在微处理器世界,性能通常指的是执行给定应用或任务所用的时间,或者指在给定时间内运行多个应用或任务的能力。其实这里很多时候普通人会产生误解,会认为性能就简单的指时钟频率(GHz)或者每时钟周期执行的指令数(IPC),性能是两者的综合体: 性能=频率×每时钟周期的指令 该公式表明,性能可以通过单独或同时提高频率和IPC来进行增强。频率是制造工艺和架构共同作用后的结果,如长流水线能提升频率,因为长流水线每个stage的频率一样时,CPU主频能达到更高。在给定的时钟频率下,IPC由处理器架构和具体应用决定。尽管同时提高频率和IPC不一定切实可行,但是提高一项,同时使另一项与前代保持不变,也可显著提高性能。 除了上述两种方法之外,还可以通过减少被执行的指令数来提高性能。单指令多数据(SIMD)是一项可用来实现此成效的技术,Intel于1996年首次在支持MMX技术的Pentium处理器上采用了64位整数单指令多数据(SIMD)指令,随后在Pentium III处理器上推出了128位单指令多数据(SIMD)单精确浮点指令集(SSE),后来又在随后几代处理器上相继亮相了SSE2和SSE3扩展。 Intel在其移动架构中推出了一项称为宏融合(MicroFusion)的技术。宏融合可将多个常用微操作融合为单个操作,这样就可以减少完成任务所需处理的操作数量。Intel在侧重提供最适合用户需求的能力时,也注意提供出色的能效——即充分考虑处理器完成具体任务将需消耗的功率。此处功耗就相当于维持IPC功效所需的动态电容(导体上的静电荷与维持电荷所需导体之间电位差的比率)乘以向晶体管和I/O缓冲区供应的电压平方,再乘以交换晶体管和信号的频率。这可以表示为: 功耗=动态电容×电压×电压×频率 考虑到功耗与性能的等式,设计人员就需要在IPC功效与动态电容,及优化性能与功耗所需的电压与频率之间做出精确的权衡。在Core微架构中,Intel提供了领先的性能和每瓦特性能。
新架构统一了桌面的Netburst微架构与移动处理器微架构,并加入了新的创新,打造了Intel Core 2 Duo处理器微架构,它引入了五个主要的创新,更宽和更深的动态执行机制,提升了SSE指令性能,增强了内存访问性能,提高了缓存性能,增强了节能机制。其它改进包括:更短的流水线——14 stages;增加了一个整数执行端口;改善多条微指令的延迟。
Intel让Core架构核心每个时钟周期执行更多的指令,以缩短执行时间并改进效率。在Core架构中每个执行内核将变得更加宽阔,这样它们就可以同时获取、分配、执行和返回达4条完整的指令。(而之前的移动以及NetBurst架构每次只可处理3条指令)。4条是指转换后的微指令,每条x86指令大约是一条微指令。进一步提高效率的特性包括进一步提高执行灵活性的更精确的分支预测、更深的指令缓冲区,以及可以缩短执行时间的其它特性。Core拥有四个寄存器重命名单元和四个微指令分配单元。在指令译成微代码之前都是顺序执行的,指令的流程是FIFO,也就是先入先出。而到了微代码的分配与执行单元,则进行乱序分配与执行。 新的Core 2 Duo处理器的内存管线包含2MB或4MB缓存,它的调用与存储流水线同样是乱序执行,能够重新排序内存命令来提升性能。 宏融合,Core新架构的前端硬件可以将x86指令在预解码单元合并,发送它们经过一个解码单元并翻译成一个微操作。这个特征被称为宏融合。它对某些指令很有用,特别是比较和测试指令能够与分支指令进行宏融合,Core四个解码单元中任一个都能在一个时钟周期内生成一个宏融合微指令。 Core的执行单元
Core拥有三个64位的整数执行单元,每个执行单元能进行单周期64位标量整数操作,并且有一个64位复杂整数单元(CIU),它同P6核心的CIU完成的工作相同,两个简单整数单元(SIUs)进行基本的操作,象是加,一个SIU同分支执行单元(BEU)共享指令端口2。SIU能够同BEU进行宏融合指令。Core能够在一个时钟周期内进行三个整数操作。 Core拥有两个浮点执行单元,能够进行标量与矢量浮点数学运算,在发布端口1的执行单元可以进行浮点加与其它简单的操作,它使用的数学格式如下:
在端口2上的浮点执行单元可以进行标量与矢量的浮点乘法和除法。 当Intel在Pentium产品线中增加128位矢量处理,也就是著名的SSE指令集(扩展的SIMD指令集),但是在P6微架构及其后的Banias中矢量处理实现有两个不利的地方:在ISA方面,SSE主要的缺陷是只能支持三个操作的指令,而在硬件方面,它又局限在P6核心的64位内部数据宽度上,128位的操作会被分成两个64位执行,结果就是128位的矢量操作在P6核心上执行至少需要两个时钟周期。 Core架构最终实现了单时钟周期的128位矢量操作,Intel将浮点与矢量的内部数据带宽增加到128位,这意味着仅仅一个微操作需要被生成,分派,调度,大幅提升了性能。而且它提升了解码、分配和调度的带宽。
新的酷睿架构能够在单周期内以128位执行全部的SSE指令,而之前的微架构每个时钟周期只能执行一个64位SSE指令,128位的SSE指令要分成两个64位执行。酷睿可以在一个时钟周期内完成128位SSE指令执行,这是相当大的改进,SSE的延迟从3个时钟周期降到1个时钟周期。 前面提到Core微架构的内存管线采用乱序执行,通过重新安排内存指令顺序来提升性能减少等待。 Intel智能内存访问(Intel Smart Memory Access)是另一个能够提高系统性能的特性,它能够优化内存子系统对可用数据带宽的使用,并隐藏内存访问的延迟。以前我们要从内存中读取数据,就需要等待处理器完成前面的所以指令后才可以进行,这样的效率显然是低下的。而Core架构中可以智能地预测和装载下一条指令所需要的数据,从而优化内存子系统对可用数据带宽的使用,并隐藏内存访问的延迟。该目标是为了确保能够尽快地使用数据,并使该数据可能地用于需要的地方,以将延迟最小化,最终提高效率和速度。 智能内存访问包含一项重要的被称作内存消歧(Memory DisaMBIguATIon)的新能力,该能力提高了乱序处理的效率,因为它可以为执行内核提供内建的智能,以帮助其在执行完所有预先存储的指令前,预测性地载入指令即将需要执行的数据。为了解其工作原理,我们需要了解绝大多数乱序微处理器的情况。通常情况下,当乱序微处理器重新对指令进行排序时,它不能在存储前对载入数据进行重新编排,因为它不了解是否会破坏某些数据的位置关联性。但是在许多情况下,载入数据与之前的存储无关,完全可以提前载入,进而提高效率。问题在于如何确定哪些可以装载,哪些不可以装载。
智能内存访问重新排序内存指令来优化性能,通常内存调用是按照完全顺序执行的,但是当内存的读取不会影响其它数据,这时在等待其它内存读取和存储完成前就去执行会极大的提升性能。上图显示了智能内存访问,Load4被安排在第一条执行,这样就隐藏了内存延迟。 Core微架构的内存消歧使用特殊的智能算法来评估数据是否可以在存储之前进行装载。如果它智能地推测出可以装载,那么就可以将装载指令编排在存储指令之前,以实现可能性最高的指令级并行计算。如果预测性装载最终产生效果,就能减少等待时间,将更多的时间用来处理,从而加快执行速度并实现处理器资源的更高效利用。如果装载没有产生效果,Intel的内存消歧包含检测冲突的内建智能、可以重新装载正确的数据并重新执行指令。 内存预取
提升内存访问性能的第二个手段就是预取(Prefetch),预取概念在PC中用得是相当广泛的,我们熟知的DDR内存其内部就是采用了数据预取,这样就能够以较低的核心频率获得较高的数据传输率。上图显示了内存是即远又慢,从中读取数据需要较长的时钟周期,当然这是相对于共享的二级数据缓存和一级数据缓存而言的。 Intel智能内存访问还包含增强的预取器。预取器负责“预取”内存内容,并将其放入高速缓存中。增加从高速缓存而非内存的装载量将缩短内存延迟并提高性能。为了让数据位于每个执行内核所需要的地方,IntelCore体系结构为每个L1高速缓存和L2高速缓存均配置了两个预取器。这些预取器同时检测多个数据流和大跨度的存取类型。这样它们便可以在L1高速缓存中“及时”准备待执行的数据。L2高速缓存的预取器可以分析内核的访问情况,以确保L2高速缓存拥有未来可能需要的数据。总之,改进的预取器和内存消歧通过最大化可用系统总线带宽和隐藏内存子系统延迟,提高了执行吞吐率。
检测应用程序数据的参考模式进行预取
通过从就近的缓存中调用数据来减少延迟
每两个核心可以使用8个预取,包括了每核心的两个数据预取,每个核心一条指令预取,它能够操作多个并发的区块。两个在二级缓存中的CPU预取单元可以让每个核心去追踪多区块。 上一代Intel双核处理器之所以倍受指责,主要原因还在于两个核心使用各自独立的L2缓存,它们之间的数据交换需要通过前端总线进行。新的Core架构两个核心使用共享的缓存,这非常类似于Core Duo。
Core架构的智能缓存提供了快速的数据共享,而无需通过前端总线,它提供了快速带宽共享,不需要在缓存中复制数据,并且到一级缓存的带宽增加了两倍。在新的共享缓存架构下,执行多线程应用程序时,两个核心能够很容易的共享数据,一个核心要访问另一个核心缓存中的数据无需通过前端总线。
Intel智能功率能力是一组旨在降低功耗和设计要求的能力,它可以管理所有处理器执行内核的功耗。它包含一项高级功率门控制能力,该能力可以在仅需要的单独处理器逻辑子系统上运行极高效率的逻辑控制。此外,许多总线和阵列被分开,一些操作模式中的所需数据在不需要时可被变换为低功耗状态。 过去,实现功率门控制是非常困难的,因为在关闭电源和备份时需要大量的功率,而且回升至全功率时,还需要保持系统的响应性。通过Intel智能功率能力,这些要求全得到满足,从而使功耗在不影响性能的前提下得到显著降低。结果,出色的功率优化使Core微架构为台式机,笔记本和服务器提供更高的能效表现。 |