x86_64 CPU可以在同一个管道阶段执行两个相同的操作吗?

时间:2015-01-27 15:30:22

标签: x86 cpu x86-64 intel cpu-architecture

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

这意味着CPU可以:

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

    • ADD(阶段1) - > ADD(阶段2) - >没什么
    • 没什么 - > ADD(阶段1) - > ADD(stage2)
  2. 超标量 - 在一个时钟,执行一些不同的操作。例如,ADD和MUL在相同的阶段并行:

    • ADD(阶段1) - > ADD(stage2的)
    • MUL(阶段1) - > MUL(stage2的)
  3. enter image description here

    这是可能的,因为处理器有几个指令调度程序(英特尔酷睿有4个简单解码器)。

    但是只有重复的调度程序(4个简单解码器),还是算术单元有重复?

    即。例如,我们可以在同一级中执行两个ADD,但是在同一CPU内核上的独立算术单元(例如,端口0上的 ALU和端口1上的ALU

    • ADD1(阶段1) - > ADD1(stage2的)
    • ADD2(阶段1) - > ADD2(stage2的)

    是否有任何执行单元的副本能够在同一个时钟执行两个相同的指令?

1 个答案:

答案 0 :(得分:1)

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

(只是发布一个答案,将其从未答复的问题列表中删除。)

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

http://agner.org/optimize/,尤其是microarch doc,有关uop缓存中指令吞吐量的详细信息,以及uop缓存行边界如何干扰管道可以处理的每周期传递常量4 uops。适合循环缓冲区的小循环不会遇到这个潜在的瓶颈。

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