CPU一級快取

CPU一級快取

一級快取是相對於二級快取來命名的,它是直接與CPU數據匯流排相連,傳輸速度接近於CPU處理速度。而二級快取主要是進一步過度一級快取和記憶體直接的傳輸速度差。CPU快取(Cache Memory)是位於CPU與記憶體之間的臨時存儲器,它的容量比記憶體小的多但是交換速度卻比記憶體要快得多。快取的出現主要是為了解決CPU運算速度與記憶體讀寫速度不匹配的矛盾。

基本介紹

  • 中文名:CPU一級快取
  • 外文名:無
  • 等級:一級
  • 類別:快取
快取簡介,快取,快取作用,工作原理,性能優缺點,一級快取,一級快取的重要性,位置,組成部分,架構,核心,能不能取代記憶體,讀寫算法,

快取簡介

快取大小也是CPU的重要指標之一,而且快取的結構和大小對CPU速度的影響非常大,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對比中,分別對比各種功能快取大小才有一定的意義。一級快取的起源針對記憶體的速度瓶頸,英特爾為80386設計了高速快取(Cache),採取預讀記憶體的方法來緩解這個速度瓶頸。本來最初的設計,80386將內置L1 Cache,但由於工藝、成本、工期等等方面的限制,80386最後並沒有內置L1 Cache,而是將專門開發的L1 Cache晶片放置在CPU之外的主機板上,但從此以後,Cache就和CPU成為了如影隨形的東西。 一級快取二級快取比較 L1 cache vs L2 Cache用於存儲數據的快取部分通常被稱為RAM,掉電以後其中的信息就會消失。RAM又分兩種,其中一種是靜態RAM(SRAM);另外一種是動態RAM(DRAM)。前者的存儲速度要比後者快得多,我們現在使用的記憶體一般都是動態RAM。CPU的L1級快取通常都是靜態RAM,速度非常的快,但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍),而且價格也相對較為昂貴(同容量的靜態RAM是動態RAM的四倍)。擴大靜態RAM作為快取是一個不太合算的做法,但是為了提高系統的性能和速度又必須要擴大快取,這就有了一個折中的方法:在不擴大原來的靜態RAM快取容量的情況下,僅僅增加一些高速動態RAM做為L2級快取。高速動態RAM速度要比常規動態RAM快,但比原來的靜態RAM快取慢,而且成本也較為適中。一級快取二級快取中的內容都是記憶體中訪問頻率高的數據的複製品(映射),它們的存在都是為了減少高速CPU對慢速記憶體的訪問。二級快取是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級快取容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級快取上存在差異,由此可見二級快取對CPU的重要性。CPU在快取中找到有用的數據被稱為命中,當快取中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問記憶體。從理論上講,在一顆擁有二級快取的CPU中,讀取一級快取的命中率為80%。也就是說CPU一級快取中找到的有用數據占數據總量的80%,剩下的20%從二級快取中讀取。由於不能準確預測將要執行的數據,讀取二級快取的命中率也在80%左右(從二級快取讀到有用的數據占總數據的16%)。那么還有的數據就不得不從記憶體調用,但這已經是一個相當小的比例了。目前的較高端CPU中,還會帶有三級快取,它是為讀取二級快取後未命中的數據設計的—種快取,在擁有三級快取的CPU中,只有約5%的數據需要從記憶體中調用,這進一步提高了CPU的效率,從某種意義上說,預取效率的提高,大大降低了生產成本卻提供了非常接近理想狀態的性能。除非某天生產技術變得非常強,否則記憶體仍會存在,快取的性能遞增特性也仍會保留。 CPU快取與記憶體的關係既然CPU快取能夠在很大程度上提高CPU的性能,那么,有些朋友可能會問,是不是將來有可能,目前的系統記憶體將會被CPU取代呢?

能不能取代記憶體

答案應該是否定的,首先,儘管CPU快取的傳輸速率確實很高,但要完全取代記憶體的地位仍不可行,這主要是因為快取只是記憶體中少部分數據的複製品,所以CPU到快取中尋找數據時,也會出現找不到的情況(因為這些數據沒有從記憶體複製到快取中去),這時CPU還是會到記憶體中去找數據,與此同時系統的速度就慢了下來,不過CPU會把這些數據複製到快取中去,以便下一次不用再到記憶體中去取。也即是說,隨著快取增大到一定程度,其對CPU性能的影響將越來越小,在性能比上來說,越來越不合算。就目前快取容量、成本以及功耗表現來看,還遠遠無法與記憶體抗衡,另外從某種意義上來說,記憶體也是CPU快取的一種表現形式,只不過在速率上慢很多,然而卻在容量、功耗以及成本方面擁有巨大優勢。如果記憶體在將來可以做到足夠強的話,反而很有取代CPU快取的可能。

讀寫算法

快取的讀寫算法同樣重要即便CPU內部集成的快取數據交換能力非常強,也仍需要對調取數據做一定的篩選。這是因為隨著時間的變化,被訪問得最頻繁的數據不是一成不變的,也就是說,剛才還不頻繁的數據,此時已經需要被頻繁的訪問,剛才還是最頻繁的數據,現在又不頻繁了,所以說快取中的數據要經常按照一定的算法來更換,這樣才能保證快取中的數據經常是被訪問最頻繁的。命中率算法中較常用的“最近最少使用算法”(LRU算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設定一個計數器,LRU算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出快取,提高快取的利用率。 高速快取做為CPU不可分割的一部分,已經融入到性能提升的考慮因素當中,伴隨生產技術的進一步發展,快取的級數還將增加,容量也會進一步提高。作為CPU性能助推器的高速快取,仍會在成本和功耗控制方面發揮巨大的優勢,而性能方面也會取得長足的發展。

相關詞條

熱門詞條

聯絡我們