CPU緩存的工作原理

CPU緩存的工作原理

  當CPU要讀取一個數據時,首先會從緩存(Cache)中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。

  通過優化的的讀取機制,可以使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。

  早期的CPU緩存容量很小,並且功能單一,Intel從Pentium時代後把緩存進行了分類,當時集成在CPU內核中的緩存已不足以滿足CPU的需求,而製造工藝上的限制又不能大幅度提高緩存的容量。因此出現了集成在與CPU同一塊電路板上和主板上的緩存等不同類型,於是當時便把CPU內核集成的緩存稱爲一級緩存(L1 cache),而外部的稱爲二級緩存(L2 Cache);後來隨着生產技術的不斷提高,最終二級緩存也被挪進了CPU當中。通常一級緩存中還分數據緩存(Data Cache,D-Cache)和指令緩存(Instruction Cache,I-Cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了CPU效能。此外,Intel在Pentium 4 CPU中還增加了一種一級追蹤緩存,容量爲12KB。

 

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性能助推器的高速緩存,仍會在成本和功耗控制方面發揮巨大的優勢,而性能方面也會取得長足的發展。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章