1. 程式人生 > 其它 >4 種 cache 替換策略對比

4 種 cache 替換策略對比

4 種 cache 替換策略對比

RAND, FIFO, LRU, LFU

實驗參考條件

參考的是我電腦上的 i7-10750H ,根據《Intel Core i7-10750H Processor 12M Cache up to 5.00 GHz 產品規範》顯示,這款 CPU 的快取容量大小為 12MB ,考慮到其有 6 個相同大小的核心,實際執行簡單程式時,基本上是單核心工作,我們將其進行平分為每個核 2MB (實際上 intel 處理器快取不止一層,實驗為了簡化模型,只採取一層模型)

個人考慮了 5 種常見的使用情況

  1. linar array random query / 線性表隨機訪問
  2. 2-demension random query / 二維隨機訪問
  3. binary tree query / 二叉樹式資料結構詢問
  4. DP trans / DP轉移
  5. Graph DFS / 圖DFS遍歷

根據根號分塊原理,我們採取 128 路組相聯對映方式

實驗結果

以下圖片都是 gif ,可以點開播放

1-2 隨機訪問

結果相差不大

|Cache 命中率|RAND|FIFO|LRU|LFU|
|---|---|---|---|---|---|
|一維|25.71|25.99|26.00|25.91|
|二維|25.69|25.97|25.96|25.96|

二叉樹式資料結構

區域性性原理在此體現的較為突出

二叉樹式資料結構能維護 set, map, heap 等資訊,是極為常見的資料結構,故 LRU, LFU 在時間上

||RAND|FIFO|LRU|LFU|
|---|---|---|---|---|---|
|Cache 命中率|90.29|90.49|91.81|92.76|

DP 轉移

由於 DP 轉移主要在時間上較為飽和,佔用空間普遍不多,測試了多種 DP 程式碼,cache 命中率普遍高於 99%

||RAND|FIFO|LRU|LFU|
|---|---|---|---|---|---|
|Cache 命中率|99.33|99.50|99.50|100.00|

圖的 DFS

||RAND|FIFO|LRU|LFU|
|---|---|---|---|---|---|
|Cache 命中率|7.52|7.72|7.72|7.69|

由於 DFS 耗時最大的主要是棧遞迴,在空間使用分佈上極為稀疏,cache 命中率普遍較低

總結

在 cache 快取對映方式較為合理、快取大小較大等條件下,四種替換策略差距並不是很大,考慮對 cache 空間的額外佔用, LFU 雖然在幾種情況下表現出了一定的時間上的優越性(主要在二叉式資料結構上),但結合空間上的佔用,總體可能並沒有明顯的優勢。