快取記憶體儲存器 cache

2021-10-13 03:12:35 字數 3308 閱讀 4858

早期計算機層次結構:cpu暫存器、dram主儲存器和磁碟儲存。由於cpu和主存之間差距逐漸增大,便出現了小的sram快取記憶體儲存器於cpu暫存器檔案和主存之間,稱為l1快取記憶體(一級快取),cpu和主存之間效能差距繼續增大,便在l1快取記憶體和主存間出現了更大的快取記憶體,稱為l2快取記憶體。如圖0-1為儲存器層次結構。

圖0-1:儲存器層次結構

圖中每一層都是下一層的快取,也就是說,層次結構的每一層都快取來自較低一層的資料。

快取命中:

第k+1層需要的資料就是第k層快取好的,可以直接讀取

快取不命中:

第k+1層需要的資料在第k層中沒有。

如果快取不命中,那麼它需要從儲存器層次結構中的下一層取出被請求的塊,然後將新的塊儲存在組索引位指示的組中的乙個快取記憶體行中。對於直接對映快取記憶體來說,每個組只包含有一行,替換策略非常簡單:用新取出的行替換當前的行。

快取不命中種類:

1、強制不命中:即如果第k層的快取是空的,那麼一定就會不命中了。

2、衝突不命中:假如發生了不命中之後,資料是會被快取在第k層的。如果使用隨機放置的方法,下次找起來不太方便,所以硬體通常將第k+1層中某個塊限制在第k層中的某個子集中(採用對映),比如進行取餘運算選擇快取位置,那麼塊號取餘之後數字相同的塊就會快取到同乙個地方,就發生了衝突,舉個例子,假如進行mod3運算,第k+1層的塊號為4、7的資料塊需要快取,這樣都會快取到第k層的塊號為1的位置上。還有乙個很糟糕的現象,即按照4、7、4、7這樣的順序來讀資料,每次都會發生衝突不命中,就算第k層的空間還夠,這種現象稱為抖動。

3、容量不命中:當第k層的容量不足以快取下需要快取的資料時,就稱為容量不命中。

圖1-1:快取記憶體(s,e,b,m)的通用組織。a)快取記憶體是乙個快取記憶體組的陣列。每個組包含乙個或多個行,每個行包含乙個有效位,一些標記位,以及乙個資料塊;b)快取記憶體的結構將m個位址位分成了t個標記為、s個組索引位和b個塊偏移位。

考慮到乙個計算機系統,其中每個儲存器位址有m位,形成m=2^m個不同的位址。如圖1-1a所示,這樣乙個機器的快取記憶體被組織成乙個有s=2^s個快取記憶體組(cache set)的陣列。每個組包含e個快取記憶體行(cache line)。每個行是由乙個b=2^b位元組的資料塊(block)組成的,乙個有效位(valid bit)指明這個行是否包含有意義的資訊,還有t=m-(b+s)個標記位(tag bit)(是當前塊的儲存器位址的位的乙個子集),它們唯一地標識儲存在這個快取記憶體行中的塊。
直接對映是一種最簡單,也是最直接的對映方式。主存中的每個位址都對應cache儲存器中惟一的一行。由於主存的容量遠遠大於cache儲存器,所以在主存中很多位址被對映到同乙個cache行。

圖2-1:主存與cache的直接對映關係。

直接對映cache是一種簡單的解決方法,但這種設計使得每個主存塊在cache中只有乙個特定的行可以存放。如果程式同時用到對應於cache同一行的兩個主存塊,那麼就會發生衝突,衝突的結果是導致cache行的頻繁變換。這種由直接對映導致的cache儲存器中的軟體衝突稱為抖動(thrashing)問題。

組相聯對映:

為了減少抖動問題,有些cache使用了組相聯的對映策略。在組相聯的位址對映和變換中,把主存和cache按同樣大小劃分成組(set),每個組都由相同的行數組成。

由於主存的容量比cache容量大得多,因此,主存的組數要比cache的組數多。從主存的組到cache的組之間採用直接對映方式。主存中的一組與cache中的一組之間建立了之間對映方式後,在兩個對應的組內部採用全相聯對映方式。

在arm中採用的是組相聯的位址對映和變換方式。如果cache的行大小為2l,則同一行中各位址的bit[31∶l]是相同的。如果cache中組的大小(每組中包含的行數)為2s,則虛位址位bit[l+s∶l]用於選擇cache中的某個組。

圖2-2 cache與主儲存器組相聯對映

擁有相同組索引的cache行稱為組相聯的(set associative)。主存中的程式或**段可以在不影響程式執行的情況下被分配到cache中的某一組中。也就是說,將資料或**存入cache行中的操作不會影響程式的執行。

全相聯對映:

隨著cache控制器的相聯度的提高,衝突的可能性減少了。理想的目標是,盡量提高組相聯程度,使主存位址能夠對映到任意cache行。這樣的cache被稱為全相聯cache。然而,隨著相聯度的提高,與之相匹配的硬體的複雜度也在提高。硬體設計者提高cache相聯度的一種方法就是使用內容定址暫存器cam(content addressable memory)。

cam使用一組比較器,以比較輸入的標籤位址和儲存在每乙個有效cache行中的標籤位。cam採取了與ram相反的工作方式;ram在得到乙個位址後再給出資料;而cam則是在檢測到給定的資料值在儲存器中後,再給出該資料的位址。使用cam允許同時比較更多的位址中的標籤位,從而增加了可以包含在乙個組中的cache行數。

在arm920t和arm940t儲存器核中,arm使用了cam來定位位址中的標籤域。arm920t和arm940t中的cache是64組組相聯的。圖6 所示為arm940t的cache結構圖。cache控制器把位址標籤域作為cam的輸入,它的輸出選擇了包含有效cache行的組。

圖2-3 arm940t64路組相聯cache

訪問位址的標籤部分被作為4個cam的輸入,輸入標籤的同時與儲存在64組中的所有cache標籤比較。如果有乙個匹配,那麼資料就由cache暫存器提供;如果沒有匹配,儲存器就會產生乙個失效(misss)訊號。

控制器使用組索引位(set index)在4個cam中選擇乙個。被選中的cam會在cache儲存器中選擇乙個cache行,該位址的資料索引部分(data index)在該cache行中選擇出所需的字、半字或者位元組。

當使用全相聯和組 相聯的時候,如果 要獲取的資料不在cache中,從主存中讀取後,需要將資料寫入快取cache,如果cache中已經有資料需要將cache中的資料替換出去,那替換策略該如何呢。

先進先出演算法(fifo):

讓最先進入到記憶體塊的資料先退出。這種方式並不能很好的體現程式的區域性性原理。

近期最少使用演算法(lru):

在最近的一段時間內,我們使用的最少的塊。

快取記憶體Cache的作用

快取記憶體cache的作用 現在使用的絕大多數cpu都帶有快取記憶體 cache,有的甚至整合了多極快取 而我們選擇主機板時,板上的cache數量也是乙個重要的考慮因素。早期的486整合了4 8k的一級片內cache,而現在的pentium ii至強處理器不僅整合了32k一級片內cache,還將51...

快取記憶體Cache原理之 1 儲存器層次結構

儲存器層次結構 cache和主存的關係 實現cache需要解決的問題 cache的對映方式 cache命中率和缺失率 cache的關聯度 下面開始第一節內容,儲存器的層次結構,及cache在層次化結構中的位置。目前,我們所知道的儲存器有暫存器 sram dram 硬碟等,列出它們的相關指標 暫存器 ...

快取記憶體Cache的對映方式

一 直接對映 簡單來說,就是整個cache,對映到主存中,是乙個主存塊組 n個連續主存塊為一組 ps 這裡說的位址已經是實體地址,不是程式中的邏輯位址,可參考cpu訪問位址的過程 主存組號 主存塊號從0開始,順序,每n塊為一組,從第0組開始 cache行數 表示在cache塊的第幾行資料,也表示在主...