2010-11-05 30 views
12

爲什麼MOD的操作比multiplication貴多了一點點factor of 2?請更具體地說明CPU如何執行除法操作並返回MOD操作的結果。MOD操作比乘法更耗CPU嗎?

在以下示例中,每個線程每秒運行一次。該測試在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. 
} 
+2

這兩個代碼示例都是相同的。 – 2010-11-05 19:33:09

+0

解決了這個問題。 – Leonid 2010-11-05 19:35:22

+0

帶'+'的版本在哪裏? ^^ – 2010-11-05 19:51:53

回答

5

算法(處理器上執行分割和由算法的乘法在門實現),用於分割比乘法更昂貴。事實上,一些具有良好複雜性的劃分算法將乘法作爲基本步驟。

即使您使用在學校學到的樸素算法。它們都具有相同的漸近複雜性,但分割的常量更大(您必須找出數字,這不是微不足道的,因此您可能會搞砸並必須修復混亂)。

12

MOD是除法運算,不是乘法運算。分部比乘法更昂貴。

對這裏的MOD操作的更多信息:http://en.wikipedia.org/wiki/Modulo_operation

+3

Downvoter:爲什麼? – 2010-11-05 19:35:10

+2

羅伯特:同樣可以告訴分工 - 即分工更昂貴,因爲它是一個MOD操作,而MOD比乘法更貴。我想知道CPU級別的更多細節,爲什麼division/mod比multiplication更昂貴。這個答案重複了我的問題。 – Leonid 2010-11-05 19:41:46

+1

這是正確的答案,很顯然,OP沒有認真對待mod與div的比較。在互聯網的某個地方應該有塵土飛揚的角落,談論sparc處理器內部。 – 2010-11-05 21:11:24

1

是,國防部比乘法更昂貴,因爲它是通過劃分來實現。 (CPU通常會在除法上返回商和餘數)。但是,兩個線程都使用乘法。複製/粘貼錯誤?