宏融合(Macro-fusion或Macro-ops fusion)是一项旨在提高
x86处理器性能的技术。支持宏融合的处理器可令多条(通常为两条)x86
指令融合为一条执行,从而提高了处理器的吞吐率。
x86是典型的
CISC架构。为了便于实现
流水线和
超标量,90年代中期以后的主流x86处理器均在前端使用解码器将x86指令翻译成类似
RISC指令的微指令送入后端执行。一条x86指令将被解码成一条或多条微指令。受解码单元和
执行单元数目限制,在同一时钟周期内,前端能够解码的宏指令最大数量和后端能够执行的微指令最大数量都是有限的固定值。宏融合将在程序中经常连续出现的若干条x86指令在解码前融合成一条,从而提高了解码器的效率;同时,融合后的多条x86指令可以被解码成一条微指令,从而也提高了后端执行的效率。据估计,运行典型的x86程序时,宏融合可以带来约11%的性能提升。
在英特尔的实现中,特定的两条连续x86指令可以被一个解码单元在一个时钟周期内解码成一条微指令,因此4个解码单元可在一个时钟周期里解码5条x86指令。这两条x86指令中的第一条必须是影响标志位的指令,如TEST或CMP;第二条必须是条件跳转。这样的组合在
编译器生成的代码中非常常见,因此程序不需要重新编译就可以获得性能提升。
Core和Nehalem微架构只支持将TEST或CMP作为第一条指令。具体而言,当第一条指令是TEST时,第二条指令可以是任何的条件跳转指令;而当第一条指令是CMP时,Core微架构的处理器仅在第二条指令是JA(JNBE)、JAE(JNB、JNC)、JE(JZ)、JNA(JBE)JNAE(JC、JB)或JNE(JNZ)时支持宏融合,但Nehalem微架构的处理器在第二条指令是JL(JNGE)、JGE(JNL)、JLE(JNG)、JG(JNLE)时也支持宏融合。