为什么模运算(%
)比乘法(*
)昂贵,其代价超过了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.
}
+
的在哪里?^^ - user166390a
的结果。如果使用优化编译,则两个循环均不会执行任何工作。如果未使用优化,则这不是一个非常有意义的基准测试。 - Peter Cordes