CPU緩存(Cache Memory)是位於CPU與
內存之間的臨時
存儲器,
它的容量比內存小的多可是交換速度卻比內存要快得多。緩存的出現主要是爲了解決CPU運算速度與內存讀寫速度不匹配的矛盾,由於CPU運算速度要比內存讀
寫速度快不少,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。在緩存中的數據是內存中的一小部分,但這一小部分是短期內CPU即將訪問的,
當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。因而可知,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩
存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是由於CPU的數據交換順序和CPU與緩存間的帶
寬引發的。
緩存的工做原理是當CPU要讀取一個數據時,首先從緩存中查找,若是找到就當即讀取並送給CPU處理;若是沒有找到,就用相對慢的速度從內存中讀取並送給
CPU處理,同時把這個數據所在的數據塊調入緩存中,可使得之後對整塊數據的讀取都從緩存中進行,沒必要再調用內存。
正是這樣的讀取機制使CPU讀取緩存的命中率很是高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%
須要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來講,CPU讀取數據的順序是先緩存後內存。
目前緩存基本上都是採用SRAM存儲器,SRAM是英文St
atic
RAM的縮寫,它是一種具備靜志存取功能的存儲器,不須要刷新電路即能保存它內部存儲的數據。不像DRAM內存那樣須要刷新電路,每隔一段時間,固定要對
DRAM刷新充電一次,不然內部的數據即會消失,所以SRAM具備較高的性能,可是SRAM也有它的缺點,即它的集成度較低,相同容量的DRAM內存能夠
設計爲較小的體積,可是SRAM卻須要很大的體積,這也是目前不能將緩存容量作得太大的重要緣由。它的特色概括以下:優勢是節能、速度快、沒必要配合內存刷
新電路、可提升總體的工做效率,缺點是集成度低、相同的容量體積較大、並且價格較高,只能少許用於關鍵性系統以提升效率。
按照數據讀取順序和與CPU結合的緊密程度,CPU緩存能夠分爲一級緩存,二級緩存,部分高端CPU還具備三級緩存,每一級緩存中所儲存的所有數據都是下
一級緩存的一部分,這三種緩存的技術難度和制形成本是相對遞減的,因此其容量也是相對遞增的。當CPU要讀取一個數據時,首先從一級緩存中查找,若是沒有
找到再從二級緩存中查找,若是仍是沒有就從三級緩存或內存中查找。通常來講,每級緩存的命中率大概都在80%左右,也就是說所有數據量的80%均可以在一
級緩存中找到,只剩下20%的總數據量才須要從二級緩存、三級緩存或內存中讀取,因而可知一級緩存是整個CPU緩存架構中最爲重要的部分。
一級緩存(Level 1 Cache)簡稱L1
Cache,位於CPU內核的旁邊,是與CPU結合最爲緊密的CPU緩存,也是歷史上最先出現的CPU緩存。因爲一級緩存的技術難度和制形成本最高,提升
容量所帶來的技術難度增長和成本增長很是大,所帶來的性能提高卻不明顯,性價比很低,並且現有的一級緩存的命中率已經很高,因此一級緩存是全部緩存中容量
最小的,比二級緩存要小得多。
通常來講,一級緩存能夠分爲一級數據緩存(Data
Cache,D-Cache)和一級指令緩存(Instruction
Cache,I-Cache)。兩者分別用來存放數據以及對執行這些數據的指令進行即時解碼,並且二者能夠同時被CPU訪問,減小了爭用Cache所形成
的衝突,提升了處理器效能。目前大多數CPU的一級數據緩存和一級指令緩存具備相同的容量,例如AMD的Athlon
XP就具備64KB的一級數據緩存和64KB的一級指令緩存,其一級緩存就以64KB+64KB來表示,其他的CPU的一級緩存表示方法以此類推。
Intel的採用NetBurst架構的CPU(最典型的就是Pentium
4)的一級緩存有點特殊,使用了新增長的一種一級追蹤緩存(Execution Trace
Cache,T-Cache或ETC)來替代一級指令緩存,容量爲12KμOps,表示能存儲12K條即12000條解碼後的微指令。一級追蹤緩存
與一級指令緩存的運行機制是不相同的,一級指令緩存只是對指令做即時的解碼而並不會儲存這些指令,而一級追蹤緩存一樣會將一些指令做解碼,這些指令稱爲微
指令(micro-ops),而這些微指令能儲存在一級追蹤緩存以內,無需每一次都做出解碼的程序,所以一級追蹤緩存能有效地增長在高工做頻率下對指令的
解碼能力,而μOps就是micro-ops,也就是微型操做的意思。它以很高的速度將μops提供給處理器核心。Intel
NetBurst微型架構使用執行跟蹤緩存,將×××從執行循環中分離出來。這個跟蹤緩存以很高的帶寬將uops提供給核心,從本質上適於充分利用軟件中
的指令級並行機制。Intel並無公佈一級追蹤緩存的實際容量,只知道一級追蹤緩存能儲存12000條微指令(micro-ops)。因此,咱們不能簡
單地用微指令的數目來比較指令緩存的大小。實際上,單核心的NetBurst架構CPU使用8Kμops的緩存已經基本上夠用了,多出的
4kμops能夠大大提升緩存命中率。而若是要使用超線程技術的話,12KμOps就會有些不夠用,這就是爲何有時候Intel處理器在使
用超線程技術時會致使性能降低的重要緣由。
例如Northwood核心的一級緩存爲8KB+12KμOps,就表示其一級數據緩存爲8KB,一級追蹤緩存爲12KμOps;而 Prescott核心的一級緩存爲16KB+12KμOps,就表示其一級數據緩存爲16KB,一級追蹤緩存爲12KμOps。在這裏 12KμOps絕對不等於12KB,單位都不一樣,一個是μOps,一個是Byte(字節),並且兩者的運行機制徹底不一樣。因此那些把 Intel的CPU一級緩存簡單相加,例如把Northwood核心說成是20KB一級緩存,把Prescott核心說成是28KB一級緩存,而且據此認 爲Intel處理器的一級緩存容量遠遠低於AMD處理器128KB的一級緩存容量的見解是徹底錯誤的,兩者不具備可比性。在架構有必定區別的CPU對比 中,不少緩存已經難以找到對應的東西,即便相似名稱的緩存在設計思路和功能定義上也有區別了,此時不能用簡單的算術加法來進行對比;而在架構極爲近似的 CPU對比中,分別對比各類功能緩存大小纔有必定的意義。