cpu高速緩存知識點

現代的計算機的CPU的頻率比較高,相反硬盤的頻率和CPU相比就差的太遠了,CPU去硬盤上讀取數據耗費的週期比較多,CPU訪問核內的寄存器要比訪問硬盤快多了,為了解決這樣的矛盾,於是,就有了一箇中介設備,來緩解CPU和硬盤之間的速度差異,這個中介就是我們常說的內存,CPU去硬盤讀取數據時,這部分數據會存在內存中,下次cpu再去讀取相同的數據時,直接從內存中讀取,讀取內存的速度要比讀取硬盤的速度快,這樣就緩解了CPU和硬盤之間的速度差異性。

但是CPU的速度還是比內存快,於是,就提出了高速緩存的處理機制,會把經常使用的數據或者指令放在高速緩存中,這樣的話,當下次讀取相同的數據或者指令時,直接從高速緩存中讀取即可,cpu讀取高速緩存的速度要比讀取內存的速度快上幾個量級。

從上面我們知道,存儲器系統分為幾個層級,請看下圖:

cpu高速緩存知識點

圖1

L0 到 L6 代表著不同的層級,CPU訪問L0到L6,速度是越來越慢,原理就是上一層緩存下一層的數據,主要是緩存訪問頻率較高的數據,高速緩存主要緩存內存中的數據,內存緩存硬盤中的數據。例如:當向cpu發出讀取數據的指令時,cpu首先會檢查L0層中是否有該數據的緩存,如果L0中沒有,則L0會向L1層查詢,如果L1中沒有,則L1會向L2中進行查詢,依此類推。

緩存哪些數據,主要是依靠一下兩種的推斷:

1) 時間局部性

就是假設剛剛訪問的數據,有可能還會被訪問到,對於這類數據會將其加入緩存。

2) 空間局部性

就是假設剛剛訪問過的數據的相鄰地方的數據有可能也會被訪問,所以會將相鄰的數據加入到緩存。

基於這兩種特點,我們以後在編程中,儘量按照這兩種特點進行編程。

例如:對於二維數組,我們在掃描的時候,按照行掃描會優於按照列掃描的代碼。

數據在各個存儲器層次之間傳遞時,是以快為單位進行的,數據總是在第i層和i+1 層之間來回進行復制,當cpu需要訪問i+1層的數據m時,首先會先去第i層去查找是否有該m的緩存,如果在第i層查找到m時,則我們叫它緩存命中,如果沒有查找到m,我們稱為緩存沒命中,於是,cpu就會從第i+1層將數據m取到,然後加入到i層的緩存中。

有人會問,那麼數據在緩存中的格式是什麼樣的呢?下回進行分解,請關注我哦。

cpu高速緩存知識點

linux


分享到:


相關文章: