超标量和OoO执行的一般区别是什么?

clo*_*ose 12 cpu cpu-architecture

我一直在阅读关于superscalr和OoO的一些材料,我很困惑.
我认为他们的架构图看起来非常相似.

Kra*_*lew 27

超标量微处理器可以同时执行两个或更多指令.例如,它们通常具有至少2个ALU(尽管超标量处理器可能具有1个ALU和一些其他执行单元,如移位器或跳转单元.)

(更准确地说,超标量处理器可以在同一个周期内开始执行两个或多个指令.流水线处理器一次可以执行多个指令,但非超标量流水线处理器只能在任何给定周期内启动单个指令.单位采用多个周期来执行端到端.换句话说:超标量处理器通常能够执行两个非流水线指令,每个周期具有单周期延迟,而非超标量流水线处理器不能在ALU中执行两个单周期指令同时.)

无序处理器可以执行原始订单之外的指令.例如,在下文中,MULTIPLY需要5个周期,指令3可以在指令2之前执行 - 因为指令2正在等待指令1的MULTIPLY的5个周期结果:

1: MULTIPLY reg1 := reg2 * reg3
2: ADD reg4 := reg1 + 5
3: ADD reg6 := reg2 + 1
Run Code Online (Sandbox Code Playgroud)

大多数无序处理器也是超标量处理器.但是,您可以想象构建一个非超标量的无序处理器,它只能在每个周期的流水线ALU上启动一个操作.(我已经提出了这样的操作,当英特尔使用,低功耗芯片.哎呀,你可以打造出序处理器是唯一中途标,例如只具有一个16位的ALU,服用2个周期一个32位的添加,等等.但这是拉伸.)

然而,许多超标量处理器并非无序.在上面的示例中,有序超标量首先执行指令[1].它不会启动指令3,但会等到指令2开始 - 此时它将一起启动指令2和3.

希望这可以帮助.

有时您必须考虑不太可能的极限情况,例如1宽或半宽的OOO机器,以了解这些概念.