CPU的快取記憶體儲存器的理解

2021-07-03 10:09:31 字數 2080 閱讀 4072

參考:cpu的快取記憶體儲存器知識整理

基於快取的儲存器層次結構行之有效,是因為較慢的儲存裝置比較快的儲存裝置更便宜,還因為程式往往展示區域性性:

1. 通用快取記憶體儲存器結構介紹

乙個通用的快取記憶體儲存器會有s = 2 ^ s個set(組)

每個set含有e個line(既通常所說的cache line)

每個line又包含1位vaild bit、 t位tag、b = 2 ^ b bytes cache block(真正儲存資料的地方)。

通常我們說的cache line 64位 32位,實際上是說的cache line中cache block是64位32位。

假設我們的儲存器位址有m位,共m = 2^m個不同的位址。我們看一下各個變數之間的關係。

cache快取資料的大小c = (sizeof set * number of set) = (size of block * lines a set) * number of set = b * e * s

記憶體大小2^m; cache line大小2^b; 記憶體的cache line個數2^(m-b)

2^(m-b)個cache line分到2^s個set裡, 每個set會有2^(m - b –s)個cache line,這個數字不是e,是指會有2^(m – b –s)個cache line落到這個set 裡面,那麼就需要有m-b-s位tag,標記出當前是哪個cache line落到這個set裡面了。也就是說t = m - b –s。

如上圖所示,m位位址的記憶體,需要s位做索引,選set,t位做tag,選cache line,然後b 位做偏移取具體位址的記憶體。

2. 快取記憶體的對映

快取記憶體確定乙個請求是否命中,然後抽取出被請求的字的過程,分為三步1)組選擇2)行匹配3)字抽取。

直接對映

直接對映每個組只有一行e=1

選組位址中取s bits選組

選行位址中取t bits與cache line中t bits tag匹配,匹配則命中,不匹配則cache miss

字抽取位址中的b bits就是cache line中偏移,在命中的cache line中的取字。

直接對映不命中時,不需要什麼策略,直接把索引的組中的cache line替換掉即可。

組相連對映

組相連對映中,乙個組包括多個cache line,目前常見的有四路組相連對映,16路組相連對映,即乙個set中有4個或16個cache line。對比直接對映,set 個數要比直接對映的少。因此s會小,相應的落到每個set中的cache line會多,因此t會大。

選組組相連對映的組選擇與直接對映一致。

選行cache line的選擇時,因為乙個set中有多個cache line,因此需要搜尋set中的每個cache line的tag,對比檢查是否命中。

字抽取與直接對映一致

組相連對映對於乙個index就會有多個行與之相對應,比較每行的tag是否與想要的位址相符合,這樣就會大大增加命中的機率,避免了一小段程式中頻繁cache失效的問題。

組相連對映不命中時,由於索引到的組中會有多個cache line,因此會有多種演算法選擇到底替換哪個cache line。

全相連對映

全相連對映就是組相連對映只有乙個組的情況。

選組全相連對映組選擇很簡單,只有乙個組,不需要組索引,s = 0,位址只被劃分為乙個標記tag,和乙個偏移。

選行全相連對映cache line選擇時,需要多快取中的所有cache line進行搜尋對比。

字抽取與之前一致

全相連對映需要大量的搜尋cache line進行對比,導致構造乙個又大又快的全相連快取記憶體很困難,而且很昂貴。因此全相連快取只適合做小的快取記憶體,比如tlb。

通常折衷的情況下會選擇組組相連的對映方式。

儲存器 cpu快取記憶體1

現代儲存器一共包括以下幾種 暫存器直接和cpu進行互動資料的儲存器 速度最快 與cpu1級快取記憶體互動 cpu 1級快取記憶體 直接嵌在cpu內部,每個cpu獨有的 cpu 2級快取記憶體 在cpu外部,也是每個cpu獨有 cpu 3快取記憶體 所有cpu共享的快取 記憶體與快取記憶體互動 通過c...

CPU的快取記憶體儲存器知識整理

基於快取的儲存器層次結構行之有效,是因為較慢的儲存裝置比較快的儲存裝置更便宜,還因為程式往往展示區域性性 時間區域性性 被引用過一次的儲存器的位置很可能在不遠的將來被再次引用。空間區域性性 如果乙個儲存器位置被引用了一次,那麼程式很可能在不遠的將來引用附近的乙個儲存器位置。乙個通用的快取記憶體儲存器...

CPU快取記憶體行

cpu 為了更快的執行 於是當從記憶體中讀取資料時,並不是唯讀自己想要的部分。而是讀取足夠的位元組來填入快取記憶體行。根據不同的 cpu,快取記憶體行大小不同。如 x86是 32bytes 而alpha 是64bytes 並且始終在第 32個位元組或第 64個位元組處對齊。這樣,當 cpu訪問相鄰的...