浮点除法与乘法的性能影响
有人指出,浮点除法的计算速度比乘法慢。本文深入研究了这一断言,并检验了其在现代 PC 架构中的有效性。
浮点运算中的除法在时间复杂度方面通常超过乘法。 CPU 通常在 1-2 个时钟周期内执行乘法,而除法则需要更长时间的过程。
为了说明性能差距,请考虑以下代码片段:
float f1 = 200f / 2; // vs. float f2 = 200f * 0.5;
在许多情况下,由于乘法比除法固有的效率,f2 的计算速度会更快。
这种性能差异也体现在更复杂的运算中。例如,以下循环:
float f1; float f2 = 2; float f3 = 3; for(i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively }
使用乘以 0.5 而不是除以 2.0f 会更有效地执行,因为除法需要迭代步骤。
显着的性能差异源于划分的架构复杂性。与可以通过将其转换为多次加法来并行化的乘法不同,除法涉及迭代减法,这是一种不太可并行化的操作。为了补偿,一些浮点单元采用倒数近似和乘法,牺牲一些精度来提高效率。
以上是现代 CPU 中浮点除法真的比乘法慢吗?的详细内容。更多信息请关注PHP中文网其他相关文章!