天天看點

CACHE簡述CACHE簡述

CACHE簡述

1. 為什麼要使用CACHE

  • CPU速度越來越快
  • 處理的資料量越來越大,需要更大的記憶體
  • 記憶體速度越快,價格越高,大容量存儲器,一般價格低廉,但是速度慢。
CACHE簡述CACHE簡述

2. 局部原則

Cache減少記憶體存取時間是利用記憶體存取具有局部特性。就是說如果記憶體某一處的資料在某一時刻被存取,那麼它周圍的資料就非常有可能繼續被存取。也就是資料存取具有兩個局部特性:時間上的局部性(即紅字“某一時刻”),及,和空間上的局部性(即紅字“周圍的資料”)。CACHE真是利用資料存取的這兩個特性來提供記憶體存取效率的。珍貴的容量小速度的cache記憶體,儲存着目前這段時間最有可能使用的資料。

3. Cache記憶體結構概述

CACHE簡述CACHE簡述

4. Cache的基本概念

4.1 直接映射(Direct-Mapped)Caches

以程式CACHE L1P為例解釋Direct-Mapped Cache是如何工作的。

CACHE簡述CACHE簡述
CACHE簡述CACHE簡述

每個line frame(或叫CACHE Line長度是32位元組)總是映射到記憶體同樣的固定位址,例如,位址0000-0019h總是cache在line frame 0,3fe0-3fff總是被cache到幀511

讀迷失:

假設CPU要取0020h單元的内容,且cache完全是無效的,也就是說所有的line frame均沒有cache資料,那麼每個line frame的有效标志V為0,V = 0,表示對應的cache line frame無效,即不包含有效資料,當cpu請求讀0020h時,cache控制器将其位址分成三部分:如下圖

Set 部分(bit13-5)表示cpu的位址映射到cache的哪個集(set)上,這裡,一個set等價于一個line frame。那麼對于0020h這個位址,set是1,控制器然後檢查tag(bit31-14)和有效位V。我們開始假設所有的V都是0,是以,cache控制器認為cache出現了迷失,也就是請求的資料不包含在cache裡。

那麼cache控制器就會從外部記憶體中一下把(0020-0039)管道line frame 1裡,位址的tage部分存儲在tag RAM裡,有效位設為1,表示這個set包含了有效資料,取到資料也送給cpu,這樣一次因迷失的外部存取就完成了。

讀命中:

Cache控制器降低至拆分成三部分,set部分決定set位置,存儲的tag部分同請求的位址相比較,這個比較是必要的,因為許多記憶體中的多個line都映射到同一個set上,,如果我們存取位址是4020h,那麼同一個set的tag不一樣,也是一次迷失,如果位址0020被存取,那麼tag比較正确,V也是1,那麼cpu的這次存取被cache命中,并将cpu所要的資料送給cpu,完成一次命中存取。

  1. Cache迷失的類型

造成迷失有多種好幾種情況:沖突(conflict)和容量(capacity)迷失、強制(compulsory)迷失。

4.2 集相關(Set-Associative)Caches

同direct-mapped cache不一樣,圖中的2-way cache裡,每個set包含兩個line frame(cache line 長度是64byte),一個line frame在way 0,另一個才way 1,記憶體的一個line依然映射到一個set,但是現在就有可能存到兩個line裡的某一個了。

讀命中:

哪個way被讀命中,哪個way裡的line frame被讀取。

讀迷失:

如果2個way都迷失,那麼資料需要從記憶體中取進cache,到底存放在哪個way的line裡,由LRU位來确定。每個set有一個LRU,如果LRU = 0,那麼把取到内容放到way 0的line frame,如果LRU = 1,那麼放到way 1裡的line frame。每當對line frame進行存取時,LRU的狀态都會改變,也就是說當一個way被存取後,LRU總是切換到另外一個way,這樣了防止最近使用的line被覆寫。注意,LRU僅在迷失時才查詢,但是它的狀态在每次line frame被存取時都會被更新,不管是否被命中或迷失,也不管是讀還是寫。

寫迷失:

L1D是讀定位的cache,這意味着,隻有發生讀迷失的時候,才會導入易的一行,當寫迷失發送時,資料通過寫緩沖寫到較低級記憶體,這樣旁路了L1D cache。

寫命中:

當發生寫命中的時候,資料寫入到擦車,當并不立刻送到低一級記憶體,這種類型的cache我們腳write-back cache,因為cpu寫入的資料并不立刻回寫到記憶體。為了回寫被修改的資料,你必須知道cpu寫的是哪個行,由于這個原因,每個cache line有個D标志,初始化時D = 0,當cpu修改了相關行的内容時,這個cache line的D置為1,當由于讀迷失需要重新加載這個cache line時,如果D = 1,則會把這個髒line回寫到記憶體中,如果内容沒有被修改(幹淨的line),則直接廢棄。

CACHE簡述CACHE簡述

4.3 L2級Cache

L2 cache的操作與L1 cache是一樣的。

5. 存取流程圖

CACHE簡述CACHE簡述

6. Cache帶來的記憶體一緻性問題