1. 程式人生 > 其它 >並行多核體系結構基礎——第五章的偽LRU(PLRU)演算法簡要介紹

並行多核體系結構基礎——第五章的偽LRU(PLRU)演算法簡要介紹

偽LRU(PLRU)演算法介紹

偽LRU英文全名為Pseudo-LRU (PLRU),本概念略難懂,單獨解決。

For CPU caches with large associativity (generally >4 ways), the implementation cost of LRU becomes prohibitive. In many CPU caches, a scheme that almost always discards one of the least recently used items is sufficient. So many CPU designers choose a PLRU algorithm which only needs one bit per cache item to work.
PLRU typically has a slightly worse miss ratio, has a slightly better latency, and uses slightly less power than LRU.

並行多核體系結構基礎一書給出的概念:

一種可能的近似LRU的方法是記錄最近最常訪問的一部分資料塊,當需要替換時, 那些未被記錄的資料塊通過隨機或者特定的演算法被替換出快取記憶體。這種方法的一個最簡單的例子就是記錄最近最常使用(Most Recently Used, MRU)的資料塊,當需要替換時,通過偽隨機演算法選擇MRU的資料塊替換出快取記憶體。

下圖中展示的基於樹的偽LRU替換策略:

筆者翻閱資料,找到一個非常nice的解釋文章,參考於:Cache replacement policies(快取替換策略)

該演算法的工作方式如下:考慮一個二叉搜尋樹(BST)為所討論的專案。樹的每個節點具有一位標誌,該標誌指示“向左查詢偽LRU元素”或“向右查詢偽LRU元素”。要查詢偽LRU元素,請根據標誌的值遍歷樹。要使用對項N的訪問來更新樹,請遍歷樹以找到N,並在遍歷期間將節點標誌設定為表示與所取方向相反的方向

訪問順序為ABCDE。如果只看箭頭,這裡的原理很容易理解。當可以訪問值時,說A,我們無法在快取中找到它,然後從記憶體中載入它,並將其放置在箭頭所指的塊上,從上到下,並在放置該塊時使箭頭指向遠離該塊的底部和頂部。在上面的示例中,我們看到如何放置A,然後放置BCD.然後,當快取已滿時,E替換為A,因為那是箭頭所指的時間。下次訪問時,將替換儲存B的塊。

該演算法可能是次優的,因為它是近似值。例如,在上圖中具有ACBD快取行的情況下,如果訪問模式為:CBDA則在逐出時我們選擇B而不是C。這是因為AC在同一部分,訪問A會將演算法定向到不包含快取記憶體行C的另一部分。