cpu - 超标量和乱序 (OoO) 执行之间的一般区别是什么?

标签 cpu cpu-architecture

我一直在阅读一些有关 superscalar 和 OoO 的 Material ,但我很困惑。
我认为他们的架构图看起来非常相似。

最佳答案

超标量微处理器可以同时执行两条或更多指令。通常它们至少有 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

大多数乱序处理器也是超标量的。然而,您可以想象构建一个非超标量的乱序处理器,每个周期只能在流水线 ALU 上启动一个操作。 (我已经提出这样的操作,当英特尔采用时,作为低功耗芯片。哎呀,你可以构建只有半标量的乱序处理器,例如只有 16 位宽 ALU,需要 2 个周期进行 32 位加法等。但这是拉伸(stretch)。)

然而,许多超标量处理器并不是乱序的。在上面的示例中,中序超标量将首先执行指令 1。它不会启动指令 3,而是会等到指令 2 启动,此时它将同时启动指令 2 和指令 3。

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

关于cpu - 超标量和乱序 (OoO) 执行之间的一般区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074831/

相关文章:

linux - systemd中CPUQuota的使用

cpu-registers - 寄存器传输在量子计算机中如何工作?

c++ - 整数决定论

assembly - 有什么理由在 MOV pc 上使用 BX R,R 除了拇指互通之前的 ARMv7 吗?

cluster-computing - vCPU 是否可以使用两台不同硬件计算机的不同 CPU

.net - 检测处理器数量

java - 单核 cpu 上的 volatile 和 synchronized(示例 - pentium pro)

java - 如何检查 Java 中的 CPU 和内存使用情况?

encoding - 使用统一格式的指令有什么好处?

linux - Linux内核编程中如何确定wordsize?