英特尔 Nehalem 微架构可以实现的最大 IPC 是多少?
What is the maximum possible IPC can be achieved by Intel Nehalem Microarchitecture?
是否有对英特尔 Nehalem 架构可实现的最大每周期指令数的估计?另外,影响每个周期最大指令的瓶颈是什么?
TL:DR:
Intel Core、Nehalem 和 Sandybridge / IvyBridge:最多 5 个 IPC, 包括 1 个宏融合 cmp+branch 到将 5 条指令放入 4 个融合域 uops,其余为单 uop 指令。 (其中最多 2 个可以是 micro-fused store 或 load+ALU。)
Haswell 最多 9 代:使用两对 instructions and two instructions that are decoded into two potentially micro-fused uops. The max unfused-domain uop throughput is 7 uops per clock, according to my testing on Skylake..
可以实现每个周期最多 6 条指令
早期 P6 系列:Pentium Pro/PII/PIII 和 Pentium M。还有 Pentium 4:每个周期最多 3 条指令可以使用被解码为 3 微指令的 3 条指令来实现。 (没有宏融合,3-wide decode and issue)。
Sunny Cove 上的最大 IPC 可能是 7,这要归功于增加了每个时钟 5 微指令的前端带宽。
来源:Agner Fog's microarch pdf and instruction tables. Also see the x86 标签 wiki。
Intel Core2 及更高版本中的无序流水线可以 issue/rename 每个时钟 4 个融合域微指令。这是瓶颈。 宏融合会将 cmp / jcc
组合成一个 uop,但每个解码块只能发生一次。 (直到哈斯韦尔)。
此外,解码(最多 4 条指令以 4-1-1-1 模式转换为最多 7 微指令)是 SnB 系列中微指令高速缓存之前的另一个重要瓶颈。多 uop 指令必须在第一个 "slot" 中解码。有关 Nehalem 中潜在瓶颈的更多信息,请参阅 Agner Fog 的微架构指南。
Nehalem InstLatx64 shows that nop
surprisingly only has 0.33c throughput, not 0.25, but it turns out according to 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
为了便于测试,并消除 cache/memory 瓶颈,您可以将其更改为每次从同一位置加载,而不是在寻址模式下使用循环计数器。 (只要您避免过多的冷寄存器导致寄存器读取停顿。)
请注意,Haswell 之前的 Uarches 只有三个 ALU 端口。但是 mov
加载或存储会占用管道带宽,因此使用 4-wide issue/rename 是有好处的。前端能够比无序内核执行得更快地发出命令也很有用,因此在调度程序中总是有一个工作缓冲区要排队,这样它就可以找到指令级并行性并尽早开始处理未来的负载,诸如此类。
我认为除了 load/store(包括 push
/pop
多亏了堆栈引擎),fxchg
可能是唯一没有的融合域 uop Nehalem 中不需要 ALU 端口。或者它可能确实如此,例如 nop
。在 SnB 系列 uarches 上,,有时也有 reg-reg mov
s(IvB 及更高版本)。 nop
也从未执行过,与 Nehalem 不同,因此 SnB/IvB 对 nop
的吞吐量为 0.25c,即使它们只有 3 个 ALU 端口。
是否有对英特尔 Nehalem 架构可实现的最大每周期指令数的估计?另外,影响每个周期最大指令的瓶颈是什么?
TL:DR:
Intel Core、Nehalem 和 Sandybridge / IvyBridge:最多 5 个 IPC, 包括 1 个宏融合 cmp+branch 到将 5 条指令放入 4 个融合域 uops,其余为单 uop 指令。 (其中最多 2 个可以是 micro-fused store 或 load+ALU。)
Haswell 最多 9 代:使用两对
早期 P6 系列:Pentium Pro/PII/PIII 和 Pentium M。还有 Pentium 4:每个周期最多 3 条指令可以使用被解码为 3 微指令的 3 条指令来实现。 (没有宏融合,3-wide decode and issue)。
Sunny Cove 上的最大 IPC 可能是 7,这要归功于增加了每个时钟 5 微指令的前端带宽。
来源:Agner Fog's microarch pdf and instruction tables. Also see the x86 标签 wiki。
Intel Core2 及更高版本中的无序流水线可以 issue/rename 每个时钟 4 个融合域微指令。这是瓶颈。 宏融合会将 cmp / jcc
组合成一个 uop,但每个解码块只能发生一次。 (直到哈斯韦尔)。
此外,解码(最多 4 条指令以 4-1-1-1 模式转换为最多 7 微指令)是 SnB 系列中微指令高速缓存之前的另一个重要瓶颈。多 uop 指令必须在第一个 "slot" 中解码。有关 Nehalem 中潜在瓶颈的更多信息,请参阅 Agner Fog 的微架构指南。
Nehalem InstLatx64 shows that nop
surprisingly only has 0.33c throughput, not 0.25, but it turns out according to 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
为了便于测试,并消除 cache/memory 瓶颈,您可以将其更改为每次从同一位置加载,而不是在寻址模式下使用循环计数器。 (只要您避免过多的冷寄存器导致寄存器读取停顿。)
请注意,Haswell 之前的 Uarches 只有三个 ALU 端口。但是 mov
加载或存储会占用管道带宽,因此使用 4-wide issue/rename 是有好处的。前端能够比无序内核执行得更快地发出命令也很有用,因此在调度程序中总是有一个工作缓冲区要排队,这样它就可以找到指令级并行性并尽早开始处理未来的负载,诸如此类。
我认为除了 load/store(包括 push
/pop
多亏了堆栈引擎),fxchg
可能是唯一没有的融合域 uop Nehalem 中不需要 ALU 端口。或者它可能确实如此,例如 nop
。在 SnB 系列 uarches 上,mov
s(IvB 及更高版本)。 nop
也从未执行过,与 Nehalem 不同,因此 SnB/IvB 对 nop
的吞吐量为 0.25c,即使它们只有 3 个 ALU 端口。