2015-03-31 76 views
1

x86(64位)处理器是否优化了乘法运算,如果其中一个乘法运算结果恰好为1.0? PS:我不是指编译器优化1.0的常数乘法。乘以1.0比通常乘法花费的时间更少

+0

有很多那里有x86处理器。通常,乘法时间可能取决于某些CPU上的操作数。 – 2015-03-31 07:09:33

回答

2

这不是我在文档中提到的关于Intel或AMD CPU的指令延迟或微架构的文章。

我怀疑它不会发生,因为可变延迟会干扰流水线执行单元。 (在同一个时钟周期内从同一个执行单元出来的多个结果=额外的复杂度)。此外,可能还有其他逻辑位(uop调度/排队,结果转发网络),这些逻辑围绕具有已知延迟的每个uop而设计。 (除了像division/sqrt这样的特殊情况)。一个分析师IIRC,也许是Agner Fog或者David Kanter,建议一些uops可能可以实现2个周期的延迟,但需要3个周期来匹配其执行端口可以处理的其他uops。因此,对于英特尔CPU设计来说,持续的操作延迟似乎是一件大事,因为它值得让操作变得更慢。

请注意,我们只是在讨论延迟。如果您的乘法不是循环运行的依赖链的一部分,或者您有足够的独立乘法,则可以保持乘法器每个时钟一次运行。

Haswell CPU可以承受每时钟2个FP矢量乘法的吞吐量。 (4个双打或8个浮点的256b个向量)。无论输入如何,延时= 5个时钟周期以使结果准备就绪。或每个时钟1个矢量整数乘法。 (矢量乘ALU在端口0上。矢量FP乘法器在端口0和端口1上)。

当你可以避免乘法时,它会导致很长的依赖链。 (通常这会出现整数乘法来计算循环索引,当你编写你的循环来将计数器增加16,而不是将i++乘以16作为数组索引时,编译器会更好。)