首先,正如基兰(Keelan)的评论和Turbo J的答案所指出的那样,该度量是113,093 Dhrystone MIPS,而不是本机 MIPS。
i7 3630QM的常春藤微体系结构每个周期只能提交4个融合微指令,尽管每个周期可以执行6个微指令。(代码痕迹中融合的微指令的数量大约等于指令的数量;一些复杂的指令被解码为多个未融合的微指令,并且某些指令对可以融合为一个微指令,例如,立即比较然后有条件的跳转。)
关于如何在单个周期内执行多条指令的两种推测非常有效,并且已在实际处理器中使用。您最初的猜测是,使用了更快的内部时钟,这是在原始Pentium 4的“火球” ALU中使用的。这些ALU的时钟频率是内核其余部分的两倍,而后者已经相当高。
(这是通过使用交错的ALU完成的,其中加法运算的下半部分在一个周期内完成,允许从属运算在下一个循环中使用结果的下半部。对于加法,异或运算或左移运算仅需要操作数的下半部分来产生结果的下半部分,这种交错操作(也称为宽度流水线操作)允许单周期结果延迟以及单周期吞吐量。)
HyperSPARC使用了一种有点相关的技术,即级联ALU。HyperSPARC将两个ALU的结果馈入第三个ALU。这允许在一个周期内执行两个独立的操作和第三个独立的操作。
您猜测“每个内核有多个并发管道”是已使用的另一种技术。这种设计称为超标量,是迄今为止增加单个循环中执行的操作数的最常用方法。
可能还有其他一些指令执行的零散目标。可以在普通执行单元之外更有效地执行某些操作。移动消除技术利用乱序处理器中的寄存器重命名来在寄存器重命名过程中执行移动操作。此举只是将物理寄存器号从重命名表(称为寄存器别名表)的一个位置复制到另一位置。这不仅有效地增加了执行宽度,而且还消除了依赖性。这项技术在基于堆栈的x87上很早就使用过,但是现在广泛用于Intel的高性能x86处理器中。(与典型的RISC相比,在x86中使用破坏性的双操作数指令使消除操作更有帮助。)
类似于移动消除的技术是重命名过程中寄存器清零指令的处理。通过提供一个提供零值的寄存器名称,寄存器清除指令(如xor或减法,两个操作数都在同一寄存器中)可以简单地将该名称插入重命名表(RAT)中。
一些x86处理器使用的另一种技术降低了推送和弹出操作的成本。通常,使用堆栈指针的指令必须等待一个完整的周期才能进行上一次压入或弹出操作,以更新堆栈指针的值。通过认识到推入和弹出仅向堆栈指针添加或减去一个小值,可以并行计算多个加法/减法的结果。加法的主要延迟是进位传播,但是值较小时,基值的更高有效位(在这种情况下为堆栈指针)最多只能有一个进位。这允许类似于进位选择加法器的优化被应用于小值的多次加法。另外,由于堆栈指针通常仅由常量更新,
也可以将指令合并为单个更复杂的操作。尽管将指令拆分为多个更简单的操作的逆过程是一种旧技术,但合并指令(Intel称其为宏运算融合)可以使实现支持比指令集中公开的操作更复杂的操作。
从理论上讲,已经提出了其他技术。RAT中可以支持零以外的其他小常数,并且可以尽早处理一些使用或可靠地产生此类小值的简单操作。(“物理寄存器内联”,Mikko H. Lipasti等人,2004年,建议使用RAT作为减少寄存器数量的一种方法,但是该思想可以扩展为支持加载小立即数和对小数进行简单操作。)
对于跟踪高速缓存(在控制流的特定假设下存储指令序列),可能有机会合并由分支分隔的操作,并删除在跟踪中产生未使用结果的操作。在跟踪高速缓存中对优化进行高速缓存还可以鼓励执行诸如指令合并之类的优化,如果每次获取指令流时都必须执行这些优化,那么这些优化可能就不值得了。
值预测可用于通过删除依赖项来增加可以并行执行的操作数。基于跨步的值预测器类似于前面提到的专用堆栈引擎的弹出/推入优化。它几乎可以并行计算多个加法,而无需序列化。值预测的一般思想是,有了预测值,相关操作就可以毫无延迟地进行。(分支方向和目标预测实际上只是值预测的一种非常有限的形式,允许提取以下指令,这些指令取决于分支的“值”(是否采用)以及下一条指令地址,即另一个值。)