我们知道Intel CPU在端口0上未完全流水线的除法执行单元上执行整数除法和FP div / sqrt。我们从IACA output,其他已发布的资料和实验测试中了解到这一点。 (例如https://agner.org/optimize/)
但是对于FP和整数是否有独立的分隔符(仅与通过端口0进行分配竞争),或者交错两个div吞吐量约束的工作负载会使它们的成本几乎呈线性增加,如果一个是整数而另一个是FP?
由于Intel CPU(与AMD不同)将整数除法解码为多个微码,因此这变得很复杂。 div r32
在Skylake上为10。
AMD CPU同样在一个执行端口上有分配器,但是我对它们了解不多,也没有一个要测试的分配器。 AMD整数除法仅解码到几微码(以写入RDX和RAX),而不进行微编码。在AMD上进行的实验可能会更容易解释,而不会在周围散乱字句,这可能导致int和fp div之间发生争执。
进一步阅读:
arith.divider_active
性能计数器饱和。答案 0 :(得分:2)
英特尔CPU架构师Ronak Singhal mentions on Twitter认为Broadwell(并暗示后来的架构直到ICL)使用FP硬件进行除法,但是Ice Lake具有专用的整数除法单元:
请记住,以此为基准的Broadwell在FP除法器上进行整数除法。在冰湖中,现在有一个专用的整数除法单元。
因此,我预计将会出现激烈的竞争。毫无疑问,整数除法执行的许多操作都是不使用除法器的普通ALU操作,因此我不一定会期望它们的逆吞吐量是严格累加的,但它们肯定会竞争。
Ronak并不暗示有关Broadwell之前的实现,但是基于至少在Sandy Bridge之前的相似端口分配和性能,我认为我们可以期待相同的共享。