# Multilevel Cache ###### tags: `IT鐵人` ## 兩層以上的城牆 上一次我們提到了Set Associate Cache,意思是在entry中加入多個Block,以避免常常存取的Block要求進入同一個entry導致miss rate居高不下。 所以我們可以在外面加上第二層Cache,不論是晶片內外都可以,實作的方式也很多,就不特別說明了。 因為多了第二層,hit time不可能比第一層高,所以第二層以後注重的是減少miss rate,降低hit time就留給第一層注重。 ## Total Miss Rate 在計算Miss Rate之前,需要先介紹兩個詞: * GMR(Global Miss Rate):對於所有access的miss rate。 * LMR(Local Miss Rate):只看自己經歷access的miss rate。 底下提供了一個例子,假設發生了1000次的access,其中L1發生了50次miss,而這50次又在L2發生了20次miss,後面又在L3發生了5次miss,所以總的來說,這樣子的三層Cache miss rate為0.5%。 ![](https://i.imgur.com/WhlCss5.png) ||CPU|L1 Cache|L2 Cache|L3 Cache| |-|-|-|-|-| ||1000 access|50 miss|20 miss|5 miss| | GMR || 50/1000 | 20/1000 | 5/1000| |LMR||50/1000|20/50|5/20| L1 GMR = L1 LMR L2 GMR = L1 LMR x L2 LMR L3 GMR = L1 LMR x L2 LMR x L3 LMR ## 計算Multilevel Cache效能 剛剛都是用miss rate說明,這次用實際一點的時間計算來示範: > 假設處理器CPI=1.0,clock rate=4GHz,Memory access time=100ns,並且保證所有access都能在Memory hit。第一層Cache miss rate=2%。 > 如果加上了第二層Cache,其access time=5ns,GMR=0.5%,那麼整個處理器速度會提昇多少? 在這類型的題目要把單位都換成一樣的,換成時間會是cycle數量,以下用cycle換算: clock rate:4GHz -> clock time:0.25ns Memory access time=400 cycles secondary cache access time=20 cycles 因為最快速的第一層access時間很短,可以直接省略。 未加上第二層時,Cycle數 = 1(CPI) + 2% x 400(Memory stall) = 9 加上第二層後,Cycle數 = 1(CPI) + (2%-0.5%) x 20(L2 Cache stall) + 0.5% x (20+400)(Memory stall) = 3.4 所以performance提昇 9/3.4 = 2.6左右 要特別注意的是L2miss後進入Memory,不能只有考慮Memory stall,還要考慮剛剛L2miss的時間,所以才有20+400的數字。 ## 小結 這三回講的是Cache System,分成了Direct Mapped, Set Associate還有Multilevel三種,下一回開始會講Virtual Memory,會比Cache System複雜一些些。 | 上一篇 | 下一篇 | |-|-| |[Set Associative Cache](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/ryJNh_igY)|[Miku Memory](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/r1ziQtgWF) ![](https://i.imgur.com/dBLIrD9.png)