一級快取

一級快取

一級快取都內置在CPU內部並與CPU同速運行,可以有效的提高CPU的運行效率。一級快取越大,CPU的運行效率越高,但受到CPU內部結構的限制,一級快取的容量都很小。

基本信息

簡介

一級快取一級快取
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對比中,分別對比各種功能快取大小才有一定的意義。

作用

但是一級快取和二級快取的大,它究竟有多少好處呢?你得告訴我們經銷商,實際上你得用最普通的話跟他講。所以我們給他們打個比方,說這個就好比你開汽車的時候,後備箱是整個的二級快取,假如說扶手裡面有一個小箱子,那是你的一級快取。一級快取大好在哪裡呢?就是你隨時開車的時候,隨時在裡面都可以取東西了。假如你一級快取小的話,你還得把車停下來,到後備箱裡取東西。

首先我們來簡單了解一下一級快取。目前所有主流處理器大都具有一級快取和二級快取,少數高端處理器還集成了三級快取。其中,一級快取可分為一級指令快取和一級數據快取。一級指令快取用於暫時存儲並向CPU遞送各類運算指令;一級數據快取用於暫時存儲並向CPU遞送運算所需數據,這就是一級快取的作用。
那么,二級快取的作用又是什麼呢?簡單地說,二級快取就是一級快取的緩衝器:一級快取製造成本很高因此它的容量有限,二級快取的作用就是存儲那些CPU處理時需要用到、一級快取又無法存儲的數據。同樣道理,三級快取和記憶體可以看作是二級快取的緩衝器,它們的容量遞增,但單位製造成本卻遞減。需要注意的是,無論是二級快取、三級快取還是記憶體都不能存儲處理器操作的原始指令,這些指令只能存儲在CPU的一級指令快取中,而餘下的二級快取、三級快取和記憶體僅用於存儲CPU所需數據。

數據快取設計

根據工作原理的不同,目前主流處理器所採用的一級數據快取又可以分為實數據讀寫快取和數據代碼指令追蹤快取2種,它們分別被AMD和Intel所採用。不同的一級數據快取設計對於二級快取容量的需求也各不相同,下面讓我們簡單了解一下這兩種一級數據快取設計的不同之處。

AMD設計

AMD採用的一級快取設計屬於傳統的“實數據讀寫快取”設計。基於該架構的一級數據快取主要用於存儲CPU最先讀取的數據;而更多的讀取數據則分別存儲在二級快取系統記憶體當中。做個簡單的假設,假如處理器需要讀取“AMD ATHLON 64 3000+ IS GOOD”這一串數據(不記空格),那么首先要被讀取的“AMDATHL”將被存儲在一級數據快取中,而餘下的“ON643000+ISGOOD”則被分別存儲在二級快取和系統記憶體當中(如下圖所示)。

需要注意的是,以上假設只是對AMD處理器一級數據快取的一個抽象描述,一級數據快取和二級快取所能存儲的數據長度完全由快取容量的大小決定,而絕非以上假設中的幾個位元組。“實數據讀寫快取”的優點是數據讀取直接快速,但這也需要一級數據快取具有一定的容量,增加了處理器的製造難度(一級數據快取的單位製造成本較二級快取高)。

Intel設計

自P4時代開始,Intel開始採用全新的“數據代碼指令追蹤快取”設計。基於這種架構的一級數據快取不再存儲實際的數據,而是存儲這些數據在二級快取中的指令代碼(即數據在二級快取中存儲的起始地址)。假設處理器需要讀取“INTEL P4 IS GOOD”這一串數據(不記空格),那么所有數據將被存儲在二級快取中,而一級數據代碼指令追蹤快取需要存儲的僅僅是上述數據的起始地址(如下圖所示)。

由於一級數據快取不再存儲實際數據,因此“數據代碼指令追蹤快取”設計能夠極大地降低CPU對一級數據快取容量的要求,降低處理器的生產難度。但這種設計的弊端在於數據讀取效率較“實數據讀寫快取設計”低,而且對二級快取容量的依賴性非常大。

相關詞條

相關搜尋

熱門詞條

聯絡我們