我正在運行密集型數值模擬。我經常使用長整數,但是我意識到使用整數是安全的。這會顯着提高我的模擬速度嗎?數據類型大小對性能的影響
回答
取決於。如果內存中連續存在大量的數字,則它們更有可能適合L2緩存,因此緩存未命中的次數更少。二級緩存未命中 - 取決於您的平臺 - 可能會對性能產生重大影響,因此儘可能使緩存適合緩存(如果可以,請預取),這絕對是一個好主意。但是不要指望你的代碼突然飛起來,因爲你的類型更小。
編輯:還有一點 - 如果你選擇一個尷尬的類型(如32位或64位平臺上的16位整數),你可能會因爲CPU不得不手術提取16位值並將其轉化爲可以使用的東西。但通常,整數是個不錯的選擇。
取決於您的數據集大小。顯然,將整數大小減半可以使適合CPU緩存的數據量增加一倍,因此訪問數據的速度會更快。有關更多詳情,我建議您閱讀着名的Ulrich Drepper的論文What Every Programmer Should Know About Memory。
這就是爲什麼typedef是你的朋友。 :-)
如果數學上可能,嘗試使用浮點數而不是整數。我在某處讀到浮點運算(特別是乘法運算)在某些處理器上實際上可能會更快。
最好的事情是實驗和基準測試。幾乎不可能分析出哪些微優化效果最好。
編輯:這個post討論整數和浮點之間的性能差異。
所有的答案已經處理了CPU緩存問題:如果你的數據是兩倍小,那麼在某些情況下,它可以完全適合二級緩存,從而提高性能。
但是,還有另一個非常重要和更一般的東西:內存帶寬。如果你的算法是線性的(又稱複雜性)並且順序地訪問內存,那麼它可能是內存限制的。這意味着內存讀取/寫入是瓶頸,而CPU只是浪費了大量的等待內存操作完成的週期。在這種情況下,減少兩次總內存大小可以提供可靠的2x性能提升。 此外,在這種情況下,切換到字節可能會產生更多的性能提升,儘管事實上CPU的計算可能會比其他應答者已經提到的字節慢。一般來說,答案取決於以下幾種情況:您的算法使用的數據總大小,內存訪問模式(隨機/隨機),算法漸近複雜度,每內存比率計算(主要用於線性算法)。
- 1. int數組的大小對類型等價性的影響
- 2. 大PermGen的大小+性能的影響
- 3. 大型變量表的性能影響
- 4. 文件大小如何影響性能?
- 5. 表大小是否影響INSERT性能?
- 6. mysql/innodb數據庫大小如何影響性能?
- 7. 哪種操作對性能,最小/最大或模數的影響最小?
- 8. 縮小catch塊的類型是否有性能影響?
- 9. 做數據類型選擇會影響性能嗎?
- 10. 主鍵數據類型是否影響性能? SQL Server 2008
- 11. Systemtap對性能的影響
- 12. connection.commit()對性能的影響
- 13. 嵌套數組影響性能的列表大小是多少?
- 14. Signalr調用與longPolling傳輸類型相當大 - 性能影響
- 15. 對於大型.maxstack,性能會有什麼影響?
- 16. 快捷類影響性能?
- 17. 函數調用次數對性能有多大影響?
- 18. 性能影響
- 19. JAR文件的大小是否會影響JVM的性能?
- 20. file()會影響大小約2 MB的文件的性能嗎?
- 21. 巨大的性能影響(Angular2)
- 22. Access數據庫中的子數據表屬性對性能的影響
- 23. 性能的影響
- 24. Direct 3D影響數據類型double
- 25. ReadProcessMemory - 緩衝區大小影響功能的正確性
- 26. 數據庫(最大)字段長度是否會影響性能?
- 27. 什麼是Redis數據庫索引對性能的影響
- 28. 數據庫字段名稱長度對性能的影響?
- 29. SQL中的隱式數據類型轉換是否會影響性能?
- 30. 對於數據庫,選擇正確的數據類型是否會影響性能?
這取決於。它取決於處理器,如果你在GPU或CPu上運行它。這取決於您消耗的內存量與需要分配的虛擬內存量之間的關係。這取決於...你明白了嗎?給我們更多的信息。 – wheaties 2011-01-21 20:30:59