x86_64 CPU 可以在流水线的同一阶段执行两个相同的操作吗?

Can x86_64 CPU execute two same operations on the same stage of pipeline?

众所周知,英特尔 x86_64 处理器不仅是流水线架构,而且是超标量的。

这意味着 CPU 可以:

  1. Pipeline - 在一个时钟,执行一个操作的某些阶段。例如,两个 ADD 并联移动阶段:

    • ADD(stage1) -> ADD(stage2) -> 无
    • 无 -> 添加(阶段 1) -> 添加(阶段 2)
  2. Superscalar - 在一个时钟执行一些不同的操作。比如ADD和MUL在同一个阶段并行:

    • 添加(阶段 1)-> 添加(阶段 2)
    • MUL(stage1) -> MUL(stage2)

这是可能的,因为处理器有多个指令调度器(Intel Core 有 4 个简单解码器)。

但是是只有调度器(4个Simple Decoder)重复,还是算术单元也有重复?

即例如,我们能否在相同的阶段执行两个 ADD,但在独立的算术单元(例如,端口 0 上的 ALU 和端口 1 上的 ALU)上执行相同的 [=62] =]-核心?

是否有任何执行单元的重复,使得能够在同一个时钟执行两条相同的指令?

是的。正如评论所解释的那样,问题已经包含了答案。 :P

(只需发布一个答案即可将其从未回答的问题列表中移除。)

我要补充的是,Sandybridge 和后来的 Intel CPU,以及它们的 uop 缓存,比以前的 CPU 更经常接近于在循环中维持每个周期 4 uops(如果前端是瓶颈,而不是数据依赖性(延迟)或执行端口争用(吞吐量)。)这是esp。有助于编码较长的向量指令,因为解码器只能处理 16B/周期,通常小于 4 微指令。

参见 http://agner.org/optimize/,尤其是。 microarch 文档,了解有关 uop 缓存的指令吞吐量的详细信息,以及 uop 缓存行边界如何干扰流水线可以处理的每周期 4 微指令的传输。适合循环缓冲区的小循环不会受到这种潜在瓶颈的影响。

回复其中一条评论:微融合不会让您每个周期获得超过 4 条指令到 运行。只有宏融合将多条指令组合成一个 uop。 (微融合确实使使用内存操作数的指令更便宜,但是 apparently only works with one-register addressing modes。这确实增加了 IPC,并可能使平均值超过 4。)