程序和數據都是儲存在內存上的,CPU要處理程序必須要頻繁訪問內存。但是內存傳回CPU的速度要比CPU處理的速度來得慢。根據木桶效應,整體性能被內存傳輸的過程拖累了。在沒有辦法能提高內存速度的情況下如何降低傳輸慢對系統性能帶來負面影響成為重要的研究課題。(感覺像寫起了綜述論文,咳咳)緩存這一技術應運而生。
我們知道程序運行具有一定規律——順序和反復性,即順序執行和循環執行。對于順序執行,可以采取預讀策略。即將后面的程序一并讀取至緩存中,減少內存讀取次數(注意CPU的讀指令并沒有減少,只是內存響應次數少了)。緩存行是緩存的基本單位,目前主流緩存行大小是64字節因為內存一次讀操作是64字節,而64位CPU對數據的讀取是8字節即64bit,因此若CPU要讀的八字節落入某一緩存行中,該緩存行的內容將會全部從內存中被讀取到緩存中,接下來的程序也被這次讀寫一并帶到了緩存中去。對于循環執行,則正是緩存的強項,之前訪問過的程序都存儲在緩存中,再次讀取時,直接可以從緩存而不是從內存中讀取,大大提高了運行效率。
為什么緩存讀取速度要比內存快呢?這就和緩存的底層電路原理有關系了。緩存采用的是SRAM存儲器內建在CPU上,而內存采用的是DRAM。前者可以達到很高的讀取速度但是面積占用比較大因此容量上不去,在幾M容量就止步了。后者讀取速度慢每次讀取后都要刷新(有空再講),但面積占用小,因此容量可以達到好幾個G甚至幾百幾千個G。至于容量動輒幾TB的硬盤那就要另當別論了。
緩存又有分為一級緩存、二級緩存等等。他們的速度也有所不同,從一級緩存以后讀取速度依次降低。為什么呢?雖然都是采用的SRAM存儲器,但是數據檢索需要時間,數據存儲量大的三級緩存找的時間就比數據存儲量小的一級緩存找的時間久。為什么要找呢?不是直接根據地址選出對應的數據就行了嗎?這個過程所需時間與其存儲的數據容量有什么關系呢?在內存中、在CPU的寄存器組中這個過程所需時間確實與數據容量沒有太大關系。那怎么規則到緩存這里就變了呢?
如果把內存比作圖書館的書架,那么緩存就像是CPU面前的一張桌子。給你地址讓你去找CPU想要的數據,如果你是在書架上找,你可以很清楚這個數據放在哪一行哪一列,如果恰好你運動速度是光速的話,那么你總能在一個確定的時間內拿到CPU想要的數據。可是緩存就不一樣了,書就在你面前,還亂糟糟的,你需要翻閱查看地址是否對應上了。因此桌子越大,你找得也就越慢。
就沒有別的辦法了嗎?當然有。桌子亂可以整理整理嘛。比如規定一下,第一書架的書只能放在桌子上的A區,第二書架放B區……以此類推。這樣一來,找的人便會方便很多,放的人也沒有什么困難。后者的辦法被稱為組關聯,組關聯還分為一路組關聯、雙路組關聯、四路組關聯等等。組關聯就沒有壞處嗎?也有。如果桌子太小了怎么辦?劃分出來的每個區連一本書都放不下怎么辦?
我程序一直在讀取某個書架上的書怎么辦?別的區域不能放該書架上的書,而該書架的書已經在該區域摞得老高了,這樣緩存利用效率就很低下。
審核編輯:劉清
-
DRAM
+關注
關注
40文章
2303瀏覽量
183318 -
cpu
+關注
關注
68文章
10826瀏覽量
211158 -
SRAM存儲器
+關注
關注
0文章
88瀏覽量
13277
發布評論請先 登錄
相關推薦
評論