「快取不友善」和「快取友善」程式碼有什麼不同?
「快取友善」是指最大化效能的程式碼透過有效地使用電腦的記憶體層次結構,特別是其快取。另一方面,「快取不友善」的程式碼會導致快取未命中,從而降低效能。
如何寫快取高效的程式碼:
-
利用時間局部性: 存取最近使用過的數據,增加在快取。
-
利用空間局部性:將相關資料在記憶體中分組在一起,以最大限度地減少跨越記憶體頁邊界的快取線,這可能會觸發多個快取未命中。
-
使用快取對齊的資料結構: 選擇std::vector 等資料結構而不是std::list,因為它們連續儲存元素,從而改善快取
-
利用資料結構和演算法排序:設計最佳化快取所使用的資料結構和演算法。快取阻塞和利用資料順序等技術可以顯著提高效能。
-
思維分支預測:避免不可預測的分支,因為它們會阻礙預取並增加快取未命中。
-
最大限度地減少虛擬函數呼叫:虛擬函數會引入固有的開銷,並可能導致查找期間快取未命中。對效能關鍵型程式碼使用替代設計模式或考慮手動函數綁定。
常見的快取相關問題:
-
錯誤共享:當多個執行緒存取相同快取中的資料時,多處理器可能會遇到快取未命中的情況
-
Thrashing:由於記憶體使用過多而導致連續頁面錯誤,導致磁碟存取速度變慢。
以上是是什麼讓程式碼對快取友好或對快取不友善?的詳細內容。更多資訊請關注PHP中文網其他相關文章!