為什麼在 CPU 中要用 Cache 從記憶體中快速提取資料?

時間 2021-05-11 13:51:17

1樓:sand

cpu 計算速度太快,二內記憶體的讀取速度很慢,所以需要 cpu 那邊的快取來提高讀取速度。快取的材料是 SRAM 成本比記憶體高,但是快取的讀取速度快。如果沒有快取,隨著cpu越來越快,cpu 會消耗更多的時鐘週期來等待記憶體的載入,從而 cpu 的利用率越來越低。

2樓:lalala

首先在計算機系統中,cpu的速度,大於cache速度,大於記憶體的速度。cpu要從儲存裝置(cache或者記憶體)上讀取(寫入)指令或者資料,這就遇到乙個問題,cpu處理速度和儲存的讀取資料不匹配,比如,乙個單位的資料,cpu用乙個時間單位處理完畢,但從儲存裝置讀進cpu需要100個時間單位。為了解決這個問題怎麼辦?

計算機科學家前輩們發現,cpu要處理的資料一般都會集中在記憶體的某一段位址範圍內,這樣就產生了一種做法,將記憶體中的資料放入cache中,cpu讀資料,可以先從cache中尋找,假設cpu從cache中讀取資料需要10個時間單位,而從記憶體中讀取需要100個時間單位,這就節省了90個時間單位,當然,前提是在cache中可以找到資料。如果在cache中找不到,大不了再跑記憶體中取找。

3樓:

1,記憶體太慢了。

2,如果想讓CPU具有預讀取功能,那讀出來的東西放哪?Cache裡。

3,乾脆把預讀的活也讓Cache幹了吧。4,於是有了Cache,進一步分化為3級。

4樓:

相當於在倉庫和超市中間建立多個小倉庫,這樣子貨物可以一批批的運到超市,

就是超市賣完貨物後可以直接從附近的小倉庫調貨,而不是從遙遠的大倉庫調貨

如果沒有小倉庫的存在的話,超市的容量有限,只能買完之後再從大倉庫調貨。

說白了就是縮短了CPU 的等待時間,使效率更高。

我覺得我解釋的不生動╮(╯▽╰)╭

這樣,再來個例子,CPU 今天需要解決五件事,簡稱

一,二,三,四,五

如果沒有快取記憶體儲存器(cache )的話那就是,先解決一,一完事了,二再過去,二完事了,三再過去…………

如果有的話,現在假設CPU 和記憶體中加了乙個cache, 那麼先解決一,解決一的過程中二到了cache, 等一解決了,二就能直接從cache 到CPU ,這樣二到CPU 的時間就被縮短,因為邏輯上距離被縮短…………現在好像cache 還可以設定多級,就是乙個又乙個中途休息的倉房……

這樣是不是好了一點?

5樓:Ricky Li

題主把CPU與Cache分的太開了, Cache已經是現代CPU的一部分. 從記憶體的角度來看, Cache發來的讀資料請求就是CPU發來的讀資料請求. 實際上CPU所有關於Load和Store的請求, 都會由MOB(Memory Order Buffer) - L1D - L2 - L3 -DRAM這條路徑來完成, Cache只是這條路上的幾個驛站而已.

關於副標題內的疑問, 只用把問題邏輯順一下就解決了。

既然CPU速率高, 記憶體速率慢,那麼中間加乙個Cache的目的就是為了讓儲存體系可以跟上CPU的速度.

普通的CPU+DRAM記憶體的結構, 如果沒有設計Cache, 每一次CPU都要找記憶體要資料, 這個延遲估計在80個時鐘週期左右. 這是因為CPU要從內部運算核心將請求發到CPU邊緣的匯流排上, 從匯流排上電路板, 到達北橋, 再上電路板到達DRAM. DRAM搜尋到資料後如此再送回去.

CPU動作那麼快, 等的黃花菜都涼了.

如果加了Cache會怎樣? L1 Cache, 訪問延遲在4個週期左右, L2 Cache, 延遲在15個週期左右, L3Cache, 延遲在50個週期左右. 但是由於新增了很多Cache, CPU訪問記憶體的速度被降低了, 需要120個週期左右.

如果CPU需要的內容, 90%在L1 Cache裡有, 6%在L2 Cache裡有, 3%在L3 Cache裡有, 1%要去找DRAM拿. 那麼整個儲存體系的等效延遲就是: 7.

2個時鐘週期.

這不是爽歪了麼??

預先讀取,為什麼cpu不能做呢?

預取(prefetch)這件事cpu的確不做, 是Cache在做, 每一集的Cache都會有自己的prefetcher. 而實際上L1 Cache已經被融合進CPU內部裡了, L1I和L1D和CPU流水線簡直就是緊挨在一起, L2 Cache又緊挨著CPU的L1D. 所以L1I, L1D, L2它們做預取, 和CPU自己做是一回事!

而且CPU跑多快, 預取的速度就有多快!

上面憑什麼說"CPU需要的內容, 90%在L1 Cache裡有, 6%在L2 Cache裡有"? 就是因為Cache中資料大多是復用的, 而且Cache基於歷史資料還一直在預取! 而CPU和prefetcher像極了老總和小秘的關係, 比如:

每次CPU缺什麼資料, 找記憶體拿了一次, 但是這被prefetcher記住了, 等一有空prefetcher就把頁(Page)中其他相關資料都從記憶體裡拿出來. 這就等於把他七大姑八大姨街坊鄰居全叫了出來, CPU提取資料一般是有範圍的, 橫豎不超過這麼多, 所以CPU第二次再缺資料, 就不用去找記憶體了, 都在Cache裡! 實際上Cache可以同時監控很多個頁, 這個過程反覆幾次, CPU就基本不再找記憶體要東西了.

在基因測序中為什麼要用到perl?

tmjdone 1.perl很多有軟體和庫,呼叫方便 2.你可以用其他的,python,c 等 3.我在用了python和c 後覺得他們寫多重hash perl,c裡是map 時,perl寫起來比較方便。 Tang Boyun 歷史遺留問題,早期生物界,每建乙個資料庫,就折騰出乙個新格式 格式設計者...

黃霄雲為什麼在《歌手2020》中要用翻唱的作品參賽,為什麼不用自己的作品?最新一期已經唱了?

怎麼的知乎就一堆聖母開始給她洗白了?她往知乎花了多少錢啊告訴我有錢一起賺。你自己聽聽她自己的那幾首歌都是些無病呻吟的什麼東西,能拿的出手的嗎?可別用什麼她不是創作型歌手跟我講,不是創作型歌手你還不能有個代表作了?她有嗎?可千萬別告訴我他的代表作是左手指月,我覺得薩頂頂會覺得被冒犯了。不愛看你就滑下去...

為什麼Unity在CPU 記憶體 磁碟 網路這些占用都不高的情況下play還會卡住?

金曉宇 我工作中碰到的主要是由於解除安裝domain造成的。unity使用了兩個domain,乙個root domain,乙個child domain。通常執行都是在child domain上。乙個domain載入的assembly是不允許單獨解除安裝的,所以要解除安裝assembly只能解除安裝d...