向記憶體中快取 cpu快取記憶體知識點

2021-10-14 21:12:30 字數 1050 閱讀 9454

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

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

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

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的快取記憶體的關係

我們個人pc都有乙個叫做記憶體的硬體,有4g 8g 16g不等的容量。但我們的cpu執行時執行的指令並不是直接從記憶體中獲取,而是從cpu自身的快取記憶體中獲得指令並執行,指令執行完畢再寫回快取,然後待到特定的時機才把資料在寫回主記憶體。那cpu是如何將比自己容量大的多的記憶體放進自己的快取記憶體中...

CPU快取記憶體行

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

總結 CPU快取記憶體

我們都知道,程式是由一條條指令和資料組成的,cpu在執行時的工作也是周而復始的執行一條條用途各異的指令。在一開始,程式載入到主存,在程式執行的過程中,將指令一條條的從主存中取出並執行,巨集觀上來說我們把主存看做是乙個很大的一維位元組陣列,位址即可看作為陣列的下標。這樣的結構可以確保程式可以順利執行。...