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

时间:2019-10-16 21:55:30

标签: performance assembly x86 intel cpu-architecture

我们知道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之间发生争执。


进一步阅读:

1 个答案:

答案 0 :(得分:2)

英特尔CPU架构师Ronak Singhal mentions on Twitter认为Broadwell(并暗示后来的架构直到ICL)使用FP硬件进行除法,但是Ice Lake具有专用的整数除法单元:

  

请记住,以此为基准的Broadwell在FP除法器上进行整数除法。在冰湖中,现在有一个专用的整数除法单元。

因此,我预计将会出现激烈的竞争。毫无疑问,整数除法执行的许多操作都是不使用除法器的普通ALU操作,因此我不一定会期望它们的逆吞吐量是严格累加的,但它们肯定会竞争。

Ronak并不暗示有关Broadwell之前的实现,但是基于至少在Sandy Bridge之前的相似端口分配和性能,我认为我们可以期待相同的共享。