【发布时间】:2011-05-05 18:59:51
【问题描述】:
为什么 mod (%) 运算比乘法 (*) 的成本要高出2 倍?
请详细说明CPU如何进行除法运算并返回MOD运算的结果。
在以下示例中,每个线程运行一秒钟。测试是在SPARC 处理器上执行的。
// multiplication
void someThread() {
int a = 10234;
while (true) {
opers++;
a = a * a;
a++;
}
// opers ~ 26 * 10^6 in a sec.
}
// MOD
void someThread() {
int a = 10234;
while (true) {
opers++;
a = a % 10000007;
a++;
}
// opers ~ 12 * 10^6 in a sec.
}
【问题讨论】:
-
两个代码示例相同。
-
有
+的版本在哪里? ^^ -
比较乘法算法 (en.wikipedia.org/wiki/Binary_multiplier) 和整数除法算法 (en.wikipedia.org/wiki/Division_(digital))。我不知道 sparc 为除法实现了什么。也许是非恢复算法。
-
-1 这个问题的分数?否决者可以解释/评论吗?
-
虽然像这种情况can be converted to multiplication一样被常数除法,但它仍然比单个除法指令复杂得多,因此要慢得多
标签: c++ cpu-architecture multiplication division