【问题标题】:Execute operations of the same instruction separately in an OoO processor在 OoO 处理器中分别执行同一指令的操作
【发布时间】:2020-10-03 13:46:12
【问题描述】:

假设我们有一条指令,它被分为 3 个微操作,并且我们有一个乱序处理器。我的问题是:这 3 个微指令必须按顺序执行,还是处理器可以将这些微指令与其他指令中的其他微指令交替执行?

我的意思是,在OoO处理器中,你可以乱序执行指令,但是如果我们将一条指令分成一些微操作,这些微操作可以非顺序执行吗?

例如我们有 3 条指令:A、B 和 C。A 和 C 被分成 1 个微指令:A1 和 C1,B 被分成 3 个微指令:B1、B2、B3。 OoO 处理器能否执行,例如,B1 - A1 - B2 - C1 - B3?还是必须连续执行B1-B2-B3?

【问题讨论】:

  • 是的,微操作可以独立重新排序。

标签: assembly x86 cpu-architecture instructions micro-architecture


【解决方案1】:

是的,每个 uop 都是独立调度的,只需等待其输入准备就绪。 (对于执行端口上的一个空闲周期,当它发布到无序后端时分配它。)How are x86 uops scheduled, exactly? 指令边界与 RS aka 调度程序无关。

对于许多多微指令,微指令对早期指令具有数据依赖性。但有时较早的微指令只需要其中一个输入即可准备好,因此每个指令都有单独的最小延迟输入到输出。 What do multiple values or ranges means as the latency for a single instruction?

例如add eax, [rdi] 只需要在加载 uop 完成后准备好 EAX。所以通过 EAX 的关键路径延迟只有 1 个周期。但是如果 RDI 没有准备好,或者 RDI 指向的内存没有准备好,那么 add ALU uop 就不能执行。但是,这仍然是对 uops 进行解码的重点,这与 P5 Pentium 不同的是,P5 Pentium 必须在其有序管道中进行加载和相加1

(或以variable-count shifts on Intel CPUs为例,额外的微指令仅用于FLAGS输出;GP-integer部分准备好1个周期延迟,但FLAGS结果稍后准备好。产生 GP 整数结果的 uop 本质上与唯一的 uop BMI2 shlx 解码到的相同。)

但有些确实有一些 ILP(实际上是 uop 级并行性)。例如,xchg eax, ecx 在 Intel CPU 上解码为 3 个寄存器复制微指令,我们可以分别测量 EAX->ECX 和 ECX->EAX 方向在 1 和 2 个周期的延迟。 Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures?

另一个例子是phaddd;它解码非常像两个shufps uops(2 输入随机播放)和一个paddd uop,这取决于两个随机播放。这两个 shuffle 都在读取两个输入以提供 shuffle。 Ice Lake 在 2 个端口上有 shuffle 单元,实际上可以并行运行 shuffle 微指令,使其具有 2 个周期延迟 (uops.info),低于早期英特尔的 3 个周期,因为单个 shuffle 端口的资源冲突。 (Ice Lake 的额外 shuffle 端口只运行一些整数 shuffle,所以 haddps 在 Ice Lake 上仍然和以往一样糟糕)

请注意,我们无法证明每个 uop 正在做什么,但考虑到测量的延迟和每个端口的总 uop 计数,对于许多指令来说,只有一个合理的设计可以解释行为。例如对于phaddd,我们知道CPU 有SIMD-integer add 执行单元和整数shuffle 单元,因此将phaddd 实现为3 uop 最明显可以通过解码为两个硬连线shuffle 模式和一个普通的paddd呵呵。


脚注 1: 对 P5 的优化显然涉及使用 x86 的 RISCier 子集,例如避免使用除 mov 之外的内存源操作数,并且绝对避免使用内存目标指令。那是因为它是一个有序管道,并且无法将多指令分解以独立调度它们。

进一步阅读:p5 与更高版本的微架构:https://agner.org/optimize/。还有https://www.realworldtech.com/sandy-bridge/很好。

http://www.lighterra.com/papers/modernmicroprocessors/ 如果您还没有阅读过它,那么它是一个很好的选择,但它并没有涉及到您的问题所涉及的详细程度。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2020-09-18
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多