【发布时间】:2012-10-10 05:36:03
【问题描述】:
哪个版本更快?
x * 0.5
or
x / 2
前段时间我在大学里有一门叫做计算机系统的课程。从那时起,我记得两个值相乘可以通过比较“简单”的逻辑门来实现,但除法不是“本机”操作,需要一个循环中的求和寄存器,该求和寄存器由除数增加并与被除数相比。
现在我必须优化一个有很多部门的算法。不幸的是,它不只是除以二,所以二进制移位是没有选择的。将所有除法更改为乘法会有所不同吗?
更新:
我已经更改了我的代码,但没有发现任何差异。您可能对编译器优化是正确的。因为所有的答案都很棒,所以我都投了赞成票。我选择了 rahul 的答案,因为链接很好。
【问题讨论】:
-
好吧,如果您执行 100 万次操作的循环并计时,我认为您可以通过这种方式得到答案:D
-
浮点乘法和除法的速度可能差不多。我怀疑对于整数,乘法要快得多。此外,整数运算往往比 FP 运算更快。换句话说,iMult
-
你是除以常数还是除以变量?你没有明确说。
-
@Wug,FP 乘法在现代 Sandy Bridge 处理器上需要 5 个周期,对于标量 SSE 除法,FP 除法需要 10 到 14 个周期,对于向量 AVX 除法,最多需要 29 个周期。在 x87 单元中执行除法也需要 10 到 24 个周期。
-
在 Sandy Bridge 上,取决于指令变体,对于整数乘法,延迟为 3 - 4 个周期,吞吐量为 1 - 2 个周期,而对于整数除法,延迟为 20 - 103 个周期,11 - 84周期吞吐量(范围的高端是 64 位整数除法,但即使对于 32 位,数字仍然比乘法大一个数量级)。有关详细信息,请参阅 Agner Fog 的网站。
标签: performance cpu low-level