MOD操作比乘法更加CPU密集吗?

Leo*_*nid 14 c++ multiplication division

为什么MOD操作比multiplication一个多一点多贵factor of 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.
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*vey 12

MOD是除法运算,而不是乘法运算.分区比乘法更贵.

有关MOD操作的更多信息,请访问:http://en.wikipedia.org/wiki/Modulo_operation

  • 罗伯特:同样可以讲述分裂 - 即分割更昂贵,因为它是MOD操作,而MOD比乘法更昂贵.我想知道CPU级别的更多细节为什么division/mod比乘法更昂贵.这个答案重复了我的问题. (2认同)

APr*_*mer 5

用于除法的算法(处理器执行除法和门中实现的算法的乘法)比乘法更昂贵.事实上,一些具有良好复杂性的划分算法使用乘法作为基本步骤.

即使你使用在学校学到的天真算法.它们都具有相同的渐近复杂度,但是除法的常数更大(你必须找出数字并且这不是微不足道的,所以你可以搞砸并且必须解决这个问题).