初識cache


1、cache是什么

cache這個名字用來稱呼兩種物理世界中存在的概念,硬體cache和cache機制。下面來分別介紹。

 

硬體cache:硬體cache是一種用肉眼可以看得見用皮膚可以摸得着的物品,它是由SRAM(static random-access memory)構成(在計算機硬件系統中main memory由DRAM(dynamic random-access memory)構成。硬體cache在CPU中,直接與寄存器進行數據的傳輸。

 

 

cache機制:有兩塊存儲區域,區域A,區域B,區域B大於區域A,區域A存放區域B中最常用的數據。相比於區域B,由於區域A更小,所以在區域A中尋找一個數據的時間更短。在程式運行過程中,區域A始終維護着區域B中最常用的數據。這樣一種機制就稱為cache機制。有了cache機制,我們可以更加快速的訪問程式需要的數據。當然,這里值得說明的一點是,cache機制之所以有效,是因為程式的一個特性,locality。程式的這個特性可以簡單的認為每一個程式一般只訪問一些數據,並且經常訪問他們(如果想要了解更多關於locality,可以參考本文最后給出的參考材料)。cache機制示意圖如下。

在實際使用當中,我們需要根據上下文判斷出這里的cache是指硬體cache還是cache機制。 硬體cache從本質上講是一塊具有極高硬件訪問速度的存儲區域,並在這塊存儲區域上使用cache機制。所以本文所介紹的相關知識的核心是cache機制。硬件cache只不過加了更好的硬件材料而已。

2、硬件cache以及cache機制在計算機系統中的分布

計算機系統中的memory hierarchy如下圖所示,

對於硬體cache。L1cache,L2cache,L3cache是硬體cache,存在於CPU當中。

對於cache機制。L1與L2之間存在cache機制,即L1是L2的cache(如果CPU想訪問L2上的數據,那么CPU訪問更上層的L1。如果有想要的數據,L1直接返回給CPU;如果沒有,再從L2中搜索出想要的數據,並保存到L1當中,最后將此數據返回給CPU)。同理,L2是L3的cache,L3是L4的cache,等等。

3、cache的讀與寫(這里指cache機制)

在cache機制中,讀操作的運行機制是這樣的。假設CPU想訪問Level k+1 上的數據B,其地址為A。

第1步,根據地址A判斷數據B在不在Level k 上,如果在,返回給CPU數據B,我們稱cache hit 發生;如果不在,我們進行第2步,並稱cache miss 發生;

第2步,在Level k+1 上根據地址搜索出數據B,將數據B所在的block根據替換規則替換Level k上的相對應的block,並返回CPU所需的數據B。注意:這里是將數據B所在的block拷貝到更上層,不僅僅是數據B。一個block不僅包含數據B,還包含鄰近的幾個數據項。層與層之間的數據的傳輸都是以block進行傳輸以提高傳輸效率。另外層與層之間的block的大小也不一樣,一般來說,越靠近底層,block越大,block在32—64 bytes之間。

更加詳細的細節描述,比較繁瑣,這里不再贅述,只需要閱讀完下面的第一個參考資料的一章,並記住拷貝的是block而不僅僅是單個的數據項,即可以理解。

cache的寫基於cache的讀,讀理解了,寫自然就理解了。

4、cache的分類

根據cache中存儲的是指令還是數據可以分為 I-cache 和 D-cache。

根據每個set的個數,cache line的個數可以分為 directed-mapped caches(多個set,每個set中cache line 只有一個)、set associative caches(多個set,每個set中有多於1個的cache line)、fully associative caches(只有一個set),示意圖分別如下圖的左、中、右。

                                              

5、參考資料

<<computer systems a programmer's perspective>> second edition p559-p615 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM