2011-01-21 142 views
2

我正在運行密集型數值模擬。我經常使用長整數,但是我意識到使用整數是安全的。這會顯着提高我的模擬速度嗎?數據類型大小對性能的影響

+3

這取決於。它取決於處理器,如果你在GPU或CPu上運行它。這取決於您消耗的內存量與需要分配的虛擬內存量之間的關係。這取決於...你明白了嗎?給我們更多的信息。 – wheaties 2011-01-21 20:30:59

回答

3

取決於。如果內存中連續存在大量的數字,則它們更有可能適合L2緩存,因此緩存未命中的次數更少。二級緩存未命中 - 取決於您的平臺 - 可能會對性能產生重大影響,因此儘可能使緩存適合緩存(如果可以,請預取),這絕對是一個好主意。但是不要指望你的代碼突然飛起來,因爲你的類型更小。

編輯:還有一點 - 如果你選擇一個尷尬的類型(如32位或64位平臺上的16位整數),你可能會因爲CPU不得不手術提取16位值並將其轉化爲可以使用的東西。但通常,整數是個不錯的選擇。

2

取決於您的數據集大小。顯然,將整數大小減半可以使適合CPU緩存的數據量增加一倍,因此訪問數據的速度會更快。有關更多詳情,我建議您閱讀着名的Ulrich Drepper的論文What Every Programmer Should Know About Memory

0

這就是爲什麼typedef是你的朋友。 :-)

如果數學上可能,嘗試使用浮點數而不是整數。我在某處讀到浮點運算(特別是乘法運算)在某些處理器上實際上可能會更快。

最好的事情是實驗和基準測試。幾乎不可能分析出哪些微優化效果最好。

編輯:這個post討論整數和浮點之間的性能差異。

0

所有的答案已經處理了CPU緩存問題:如果你的數據是兩倍小,那麼在某些情況下,它可以完全適合二級緩存,從而提高性能。

但是,還有另一個非常重要和更一般的東西:內存帶寬。如果你的算法是線性的(又稱複雜性)並且順序地訪問內存,那麼它可能是內存限制的。這意味着內存讀取/寫入是瓶頸,而CPU只是浪費了大量的等待內存操作完成的週期。在這種情況下,減少兩次總內存大小可以提供可靠的2x性能提升。 此外,在這種情況下,切換到字節可能會產生更多的性能提升,儘管事實上CPU的計算可能會比其他應答者已經提到的字節慢。一般來說,答案取決於以下幾種情況:您的算法使用的數據總大小,內存訪問模式(隨機/隨機),算法漸近複雜度,每內存比率計算(主要用於線性算法)。