FP 和整数除法是否在 x86 CPU 上竞争相同的吞吐量资源?

Do FP and integer division compete for the same throughput resources on x86 CPUs?

我们知道英特尔 CPU 在端口 0 上的非完全流水线化 divide 执行单元上执行整数 division 和 FP div / sqrt。我们从 IACA output, other published stuff, and experimental testing. (e.g. https://agner.org/optimize/)

知道这一点

但是是否有独立的 dividers 用于 FP 和整数(仅通过端口 0 竞争调度),或者 是否交错两个 div-吞吐量-bound 工作负载使它们的成本几乎线性增加,如果一个是整数,另一个是 FP?

英特尔 CPU(与 AMD 不同)将整数 div 解码为多个 uops,例如Skylake 上 div r32 10 个。


AMD CPU 同样在一个执行端口上有它们的 divider,但我对它们了解不多,也没有可以测试的。 AMD 整数 division 仅解码为几个 uops(用于写入 RDX 和 RAX),而不是微编码。 AMD 上的实验可能更容易解释,没有大量的 uops 飞来飞去成为 int 和 fp 之间争用的可能原因 div。


进一步阅读:

英特尔 CPU 架构师 Ronak Singhal mentions on Twitter Broadwell(以及 ICL 之前的后续架构)使用 FP 硬件进行除法,但 Ice Lake 有一个专用的整数除法单元:

Keep in mind that Broadwell that this was benchmarked on does integer division on the FP divider. In Ice Lake, there is now a dedicated integer divide unit.

所以我预计会有激烈的竞争。整数除法执行的许多操作无疑是不使用除法器的普通 ALU 操作,所以我不一定期望它们的逆吞吐量是严格累积的,但它们肯定会竞争。

Ronak 并未暗示任何关于 Broadwell 之前的实施,但基于至少可追溯到 Sandy Bridge 的类似端口分配和性能,我认为我们可以预期相同的共享成立。