微指令融合(Micro-Op Fusion)是从 Banias 核心开始出现的技术,随后的 Yonah 微架构和 Core
微架构也都具备该技术,并不断进行改进。该技术通过减少X86指令解码后生成的微指令的数目,来降低乱序执行引擎和执行单元的压力,从而达到提升处理器效率的目的。
首先让我们解释一下什么是微指令(Micro-Op)。由于X86指令集的指令长度、格式与定址模式都相当复杂,为了简化数据通路(Data
Path)的设计,从很久以前开始,X86处理器就采用了将X86指令解码成1个或多个长度相同、格式固定、类似RISC指令形式的微指令的设计方法,尤其是涉及存储器访问的
load 及 store 指令。所以,现在的X86处理器的执行单元真正执行的指令是解码后的微指令,而不是X86指令。
微指令融合技术,以及 Intel 的专属栈引擎技术(Dedicated Stack
Engine),目的都在于减少微指令的数目。处理器内部执行单元的资源有限,如果可以减少微指令的数目,就代表实际执行的X86指令增加了,可以显著提升执行效能。而且,微指令的数目减少还有助于降低处理器功耗,可谓有益无害。
微指令融合技术所支持的范围,包括了整数运算、浮点运算和SSE2指令集等各种扩展指令集。根据 Intel
的官方说法,通过微指令融合技术,整数运算大约可以提升5%的性能,浮点运算大约可以提升9%的性能。
如今SSE、SSE2和SSE3等扩展指令集的重要性与日俱增,但是这些SIMD指令的存储器访问操作——尤其是128bit的操作——一般都需要解码成多条微指令,造成执行效率不高。在
Yonah 微架构与 Core
微架构中,这种类型的操作在很多时候可以解码成1条微指令,从而降低了后端执行单元的压力,对提高SIMD指令的执行效率有不小的帮助。
细心的读者可能会发现,我们前面曾经提到,Core
微架构每个周期最多可以解码5条X86指令。奇怪的是,这里只有4个解码单元。那么,怎样才可以做到解码5条指令呢?这就需要介绍 Intel 在 Core
微架构的前端引入的一项新的技术——宏指令融合(Macro-op Fusion)。
所谓宏指令(Macro-Op),即X86指令。宏指令融合技术的引入使得 Core
微架构在前端可以把2条宏指令融合为1条微指令。例如,X86指令中的cmp指令或者test指令可以与jmp指令融合,产生仅1条微指令。而宏指令融合技术也可以与程序中常见的
if-then-else 结构很好的配合。还有传言声称,Core
微架构还可以将某些连接在一起、有依赖关系的浮点乘法与加法指令结合为1条微指令。最后,4个解码单元中的任何一个都可以执行宏指令融合操作,然而每个周期最多只能有1个解码单元执行宏指令融合,所以最大的解码宽度为每周期5条X86指令。
下面的例子显示了宏指令融合技术的工作方式与效果。
没有宏指令融合技术
采用宏指令融合技术
虽然 Intel
再次拒绝透露宏指令融合技术的具体效果,但是一些估算表明,宏指令融合技术可以把处理器需要执行的微指令的数目降低10%——已经是非常巨大的提升了。
宏指令融合技术的优点是显而易见的,降低处理器需要执行的微指令的数目可以在两个方面提高处理器性能。首先,也是十分直观的,执行单元只需执行更少的微指令,直接提高处理器性能。其次,微指令缓冲区相当于容纳了更多的X86指令,乱序执行引擎可以从中更有效的发现能够并行的指令,也就是说,有利于实现更高的指令级并行度(Instruction
Level Parallelism,简称ILP)。当然,这些优点与以前 Yonah 微架构就拥有的微指令融合技术(Micro-Op
Fusion)十分相似所带来的十分相似。但是,同时拥有宏指令融合技术和微指令融合技术使得 Core 微架构可以比 Yonah
微架构节省更多的执行单元资源和拥有更好的指令级并行度。也许,具有讽刺意义的是,宏指令融合技术和微指令融合技术正在使得 X86 处理器的内核更加接近 CISC
架构,而不是 RISC 架构。这与 Intel 当年推出 IA-64 架构的想法正在背道而驰。
结合微指令融合与宏指令融合技术,与之前的 Intel X86处理器相比较,Core
微架构的解码单元的实际能力,还要远远大于表面上所看到的4组解码单元的数量。
Core 微架构前端的改进还包括分支预测单元。分支预测行为发生在取指单元部分。首先,它使用了很多人们已经熟知的预测单元,包括传统的 NetBurst
微架构上的分支目标缓冲区(Branch Target Buffer,简称BTB)、分支地址计算器(Branch Address
Calculator,简称BAC)和返回地址栈(Return Address Stack,RAS)。然后,它还引入了2个新的预测单元——循环回路探测器(Loop
Detector,简称LD)和间接分支预测器(Indirect Branch
Predictor,简称IBP),其中循环回路探测器可以正确预测循环的结束,而间接分支预测器可以基于全局的历史信息做出预测。Core
微架构在分支预测方面不仅可以利用所有这些预测单元,还增加了新的特性:在之前的设计中,分支转移总是会浪费流水线的一个周期;Core
微架构在分支目标预测器和取指单元之间增加了一个队列,在大部分的情况下可以避免这一个周期的浪费。看起来很微不足道?要知道,对微内核设计来说,节省每一个可以节省的周期就是最大的目标;对已经发展了很多年的设计进行改进也是非常非常困难的。
(责任编辑:刘伟) |