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是英文Static
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對比中,分别對比各種功能緩存大小才有一定的意義。