4
有關緩存相關性能問題的大量討論。我有幾個關於它們的問題:緩存相關的性能優化技術?
- 可能最受歡迎的問題是cache locality和false cache sharing。任何其他?
- 有什麼好的概述?
- 有沒有經過驗證的技術可以對抗他們?
- 什麼是他們是真正問題的應用程序的共同特點?計算密集的領域(數學/圖像處理等)?高度並行的應用程序?
有關緩存相關性能問題的大量討論。我有幾個關於它們的問題:緩存相關的性能優化技術?
其中一個比較有趣的是避免緩存衝突。如果您知道內存訪問模式,則可以以最小化所訪問數據之間的緩存行衝突的方式來佈局訪問的項目。您可以爲數據和代碼執行此操作。
找出數據訪問模式相對困難,但您可以相對輕鬆地找出代碼訪問模式。給定一個調用圖,構成函數體的塊集以及塊間轉換頻率的一些估計,您可以將代碼塊分配給緩存,從而最大限度地提高下一個塊所需的機會位於與當前緩存行不衝突的其他緩存行中。一個有趣的想法是,你只需要分配「熱」(高執行概率)的代碼塊;你放冷的地方並不重要。 IIRC,這意味着您可以按可能執行的頻率對塊進行排序,然後按照該順序進行分配。
你只需要一個全局分析: - }我讀到的第一個地方是,optimizatoin實際上是作爲鏈接器的一部分實現的,這是實現整個程序的一種方式。
我不記得任何好的概述或一套收集的技術。不過,PLDI會議往往有關於這個主題的研究論文。
對齊循環相對於緩存行可以幫助,取決於衝突和驅逐。不常使用但重用的項目,這就是說需要兩個緩存行,但可能適合一個花費你兩倍的獲取時間,每次執行時取8個單詞而不是2或3個。爲了在行動中看到這個,添加或儘早在.text中刪除一個,然後兩個,然後三個nops,以強制整個程序的對齊方式發生變化,然後觀察性能變化。 – 2011-02-14 17:43:29