Optimization 乘1.0比通常的乘法花费的时间少吗

Optimization 乘1.0比通常的乘法花费的时间少吗,optimization,x86,processor,Optimization,X86,Processor,如果乘法的一个操作数恰好为1.0,x86(也有64个)处理器是否会优化乘法 PS:我不是说编译器优化1.0的常数乘法。这不是我在文件中提到的英特尔或AMD CPU的指令延迟或微体系结构 我怀疑这不会发生,因为可变延迟会干扰流水线执行单元。(在同一时钟周期内,来自同一执行单元的多个结果=额外复杂性)。此外,可能还有其他逻辑位(uop调度/排队、结果转发网络)围绕每个具有已知延迟的uop设计。(除分部/sqrt等特殊情况外) IIRC是一位分析师,可能是Agner Fog或David Kanter,

如果乘法的一个操作数恰好为1.0,x86(也有64个)处理器是否会优化乘法


PS:我不是说编译器优化1.0的常数乘法。

这不是我在文件中提到的英特尔或AMD CPU的指令延迟或微体系结构

我怀疑这不会发生,因为可变延迟会干扰流水线执行单元。(在同一时钟周期内,来自同一执行单元的多个结果=额外复杂性)。此外,可能还有其他逻辑位(uop调度/排队、结果转发网络)围绕每个具有已知延迟的uop设计。(除分部/sqrt等特殊情况外)

IIRC是一位分析师,可能是Agner Fog或David Kanter,他建议一些UOP可能会实现2个周期的延迟,但需要3个周期才能匹配其执行端口可以处理的其他UOP。因此,对于英特尔的CPU设计来说,操作的持续延迟似乎是一个大问题,因此降低操作速度是值得的

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

Haswell CPU可以维持每时钟2 FP矢量倍数的吞吐量。(256b矢量为4个双精度或8个浮点)。延迟=结果准备就绪的5个时钟周期,与输入无关。或每个时钟1个向量整数乘法。(向量乘法ALU位于端口0上。向量FP乘法器位于端口0和端口1上)


尽可能避免倍增,这会导致长的依赖链。(通常是整数乘以来计算循环索引。当您编写循环以将计数器递增16,而不是将
i++
乘以16作为数组索引时,编译器会做得更好。)

有很多x86处理器。通常,乘法时间可能取决于某些CPU上的操作数。