4

英特尔 Nehalem 架构可实现的每周期最大指令数是否有估计?此外,影响每个周期最大指令的瓶颈是什么?

4

1 回答 1

3

TL:博士

Intel Core、Nehalem 和 Sandybridge / IvyBridge:最多 5 个 IPC,包括1 个宏融合 cmp+branch,将 5 条指令放入 4 个融合域 uop,其余为单 uop 指令。(其中最多 2 个可以是微融合存储或加载+ALU。)

Haswell 高达第 9 代:使用两对宏可熔 ALU+分支指令和两条解码成两个潜在微熔uop的指令,每个周期最多可以实现 6 条指令。根据我在 Skylake 上的测试,最大未融合域uop 吞吐量为每时钟 7 uop。.

早期的 P6 系列:Pentium Pro/PII/PIII 和 Pentium M。还有 Pentium 4:使用 3 条指令解码为 3 条微指令,每个周期最多可以实现 3 条指令。(没有宏融合,以及 3-wide 解码和发布)。

Sunny Cove 上的最大 IPC 可能为 7,这要归功于每时钟 5 uop 的前端带宽增加。


资料来源:Agner Fog 的 microarch pdf 和指令表。另请参阅标签 wiki。

Intel Core2 和更高版本中的乱序流水线可以在每个时钟发出/重命名 4 个融合域微指令。这是瓶颈。 宏融合将 a 组合cmp / jcc成一个 uop,但每个解码块只能发生一次。(直到哈斯韦尔)。

此外,解码(最多 4 条指令以 4-1-1-1 模式最多 7 条指令)是 SnB 系列中的 uop-cache 之前的另一个重要瓶颈。多指令必须在第一个“槽”中解码。有关 Nehalem 中潜在瓶颈的更多信息,请参阅 Agner Fog 的微架构指南。

Nehalem InstLatx64令人nop惊讶地只有 0.33c 的吞吐量,而不是 0.25,但根据https://www.uops.info/table.html,这是因为nop在 Sandybridge 之前的 CPU 中需要一个 ALU 执行单元。Agner Fog 说他没有发现 Nehalem 的退休瓶颈。

即使您可以安排每 4 个微指令超过一对宏融合对在一个循环中,Nehalem 的吞吐量也只有每个时钟(端口 5)一个融合测试和分支微指令。因此,即使其中一些没有被采用,它也不能在每个时钟维持一个以上的宏融合比较和分支。(Haswell 可以在端口 0 或端口 6 上运行未采用的分支)。

;; Should run at one iteration per clock
.l:
    mov   edx, [rsi]    ; doesn't need an ALU uop.  A store would work here, too, but a NOP need an ALU port on Nehalem.
    add   eax, edx
    inc   rsi
    cmp   rsi, rdi          ; macro-fuses
    jb   .l                 ; with this, into 1 cmp+branch uop

为了便于测试并消除缓存/内存瓶颈,您可以将其更改为每次都从同一位置加载,而不是在寻址模式下使用循环计数器。(只要您避免由于太多冷寄存器而导致寄存器读取停顿。)

请注意,Haswell 之前的 uarches 只有三个 ALU 端口。但是mov加载或存储会占用管道带宽,因此拥有 4 宽的问题/重命名是有好处的。前端能够比乱序内核执行得更快也很有用,因此在调度程序中总是有一个工作缓冲区排队等待,因此它可以找到指令级并行性并尽早开始未来的负载,诸如此类。

我认为除了加载/存储(包括push/pop感谢堆栈引擎)之外,fxchg可能是唯一一个在 Nehalem 中不需要 ALU 端口的融合域 uop。或者它实际上确实如此,比如nop. 在 SnB-family uarches 上,xor same,same在 rename/issue stage 中处理,有时也是 reg-reg movs(IvB 和更高版本)。 nop也从不执行,与 Nehalem 不同,因此 SnB/IvB 的吞吐量为 0.25c,nop即使它们只有 3 个 ALU 端口。

于 2016-05-06T01:39:31.110 回答