我们知道,英特尔CPU在端口0上的非完全流水线除法执行单元上进行整数除法和FP div / sqrt。 我们从IACA输出,其他已发布的内容和实验测试中了解到这一点。 (例如https://agner.org/optimize/)
但是,FP和整数是否有独立的除法器(仅通过端口0竞争分派),或者如果一个是整数,另一个是FP,则交错两个吞吐量限制工作负载会使它们的成本几乎呈线性增加? 英特尔CPU(与AMD不同)将整数除法解码为多个uop,例如Skylake上的
但是,FP和整数是否有独立的除法器(仅通过端口0竞争分派),或者如果一个是整数,另一个是FP,则交错两个吞吐量限制工作负载会使它们的成本几乎呈线性增加? 英特尔CPU(与AMD不同)将整数除法解码为多个uop,例如Skylake上的
div r32
需要10个uop。
AMD的CPU同样在一个执行端口上拥有它们的除法器,但我对它们的了解不多,并且没有一个可以测试。AMD的整数除法只解码为几个微操作(用于写入RDX和RAX),而不是微代码化的。在AMD上进行实验可能更容易解释,因为不会有大量的微操作飞来飞去,可能会导致整数和浮点数除法之间的争用。
更多阅读:
- 半相关:基数分频器内部结构
- 浮点数除法与浮点数乘法 - 在各种英特尔和AMD CPU上,FP div / sqrt与乘法/ FMA的吞吐量。
- 在Windows上以32位运行的试除法代码比在Linux上以64位运行的快2倍 - 英特尔的64位整数除法要慢得多。解码为更多的uops(SKL上的36 vs. 10),甚至没有饱和
算术.divider_active
性能计数器。