指令緩存

CPU緩存(Cache Memory)位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。由此可見,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因爲CPU的數據交換順序和CPU與緩存間的帶寬引起的。
緩存的工作原理是當CPU要讀取一個數據時,首先從緩存中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。
最早先的CPU緩存是個整體的,而且容量很低,英特爾公司從Pentium時代開始把緩存進行了分類。當時集成在CPU內核中的緩存已不足以滿 足CPU的需求,而製造工藝上的限制又不能大幅度提高緩存的容量。因此出現了集成在與CPU同一塊電路板上或主板上的緩存,此時就把 CPU內核集成的緩存稱爲一級緩存,而外部的稱爲二級緩存。一級緩存中還分指令緩存(I-Cache)和數據緩存(D-Cache)。二者分別用來存放數據和執行這些數據的指令,提高了處理器效能。英特爾公司在推出Pentium 4處理器時,還新增了一種一級追蹤緩存,容量爲12KB.
隨着CPU製造工藝的發展,二級緩存也能輕易集成在CPU內核中,容量也在逐年提升。再用集成在CPU內部與否來定義一、二級緩存,已不確切。而且隨着二級緩存被集成入CPU內核中,以往二級緩存與CPU大差距分頻的情況也被改變,此時其以相同於主頻的速度工作,可以爲CPU提供更高的傳輸速度。

二級緩存是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級緩存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級緩存上有差異,由此可見二級緩存對於CPU的重要性。CPU在緩存中找到有用的數據被稱爲命中,當緩存中沒有CPU所需的數據時(這時稱爲未命中),CPU才訪問內存。從理論上講,在一顆擁有二級緩存的CPU中,讀取一級緩存的命中率爲80%。也就是說CPU一級緩存中找到的有用數據佔數據總量的80%,剩下的20%從二級緩存中讀取。由於不能準確預測將要執行的數據,讀取二級緩存的命中率也在80%左右(從二級緩存讀到有用的數據佔總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。
較高端的CPU中,還會帶有三級緩存,它是爲讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存的CPU中,只有約 5%的數據需要從內存中調用,這進一步提高了CPU的效率。

Intel二級緩存
Intel的雙核心CPU主要有Pentium D、Pentium EE、Core Duo三種,其中Pentium D、Pentium EE的二級緩存方式完全相同。Pentium D和Pentium EE的二級緩存都是CPU內部兩個內核具有互相獨立的二級緩存,其中,8xx系列的Smithfield核心CPU爲每核心1MB,而9xx系列的 Presler核心CPU爲每核心2MB。這種CPU內部的兩個內核之間的緩存數據同步是依靠位於主板北橋芯片上的仲裁單元通過前端總線在兩個核心之間傳輸來實現的,所以其數據延遲問題比較嚴重,性能並不盡如人意。
Core Duo使用的核心爲Yonah,它的二級緩存則是兩個核心共享2MB的二級緩存,共享式的二級緩存配合Intel的“Smartcache”共享緩存技術,實現了真正意義上的緩存數據同步,大幅度降低了數據延遲,減少了對前端總線的佔用,性能表現不錯,是雙核心處理器上最先進的二級緩存架構。今後Intel的雙核心處理器的二級緩存都會採用這種兩個內核共享二級緩存的“Smart cache”共享緩存技術。

AMD雙二級緩存
Athlon 64 X2 CPU的核心主要有Manchester和Toledo兩種,他們的二級緩存都是CPU內部兩個內核具有互相獨立的二級緩存,其中,Manchester 核心爲每核心512KB,而Toledo核心爲每核心1MB。處理器內部的兩個內核之間的緩存數據同步是依靠CPU內置的System Request Interface(系統請求接口,SRI)控制,傳輸在CPU內部即可實現。這樣一來,不但CPU資源佔用很小,而且不必佔用內存總線資源,數據延遲也 比Intel的Smithfield核心和Presler核心大爲減少,協作效率明顯勝過這兩種核心。不過,由於這種方式仍然是兩個內核的緩存相互獨立, 從架構上來看也明顯不如以Yonah核心爲代表的Intel的共享緩存技術Smart Cache。

二級緩存事項
緩存是數據由內存通往CPU的橋樑。它的速度比內存快得多,但是容量也比內存小的多。同時緩存依據讀取速度和容量進一步分爲一級和二級。在CPU需要數據的時候,遵循一級緩存—〉二級緩存—〉內存的順序,從而儘量提高讀取速度。這樣“緩存+內存”的系統就同時兼具了速度和容量的優點。二級緩存容量對性能的影響是漸漸減弱的,當二級緩存從沒有增長到128KB時,帶來的性能提升可能是直線上升的。但是當它從2MB增長到4MB的時候,可能使用者甚至感覺不到性能的提升。這是因爲在當前CPU所處理數據的過程中,幾乎無時不刻需要用到128KB以下的緩存,但是需要用到1MB以上緩存的時候很少(2%左右)。因此雖然二級緩存越漲越大,實際上對CPU性能的影響卻是越來越小的。因此,完全不必要盲目追求二級緩存的高容量,夠用就好。

指令緩存和指令追蹤緩存
緩存存儲的內容不止是數據,也包括指令,但是由於指令具備以下性質,導致指令緩存的機制遠沒有數據緩存那麼複雜:
需要執行的代碼量通常都比較固定,和問題的複雜度有關程序指令通常由編譯器產生,產生過程中就能得到一定的優化。相比數據存取機制,程序流程的可預測度要強得多,更有利於prefeching 代碼一般都具有很好的空間和時間局部性。
隨着技術的發展,CPU的執行過程都流水化了,指令的執行都是分成階段的,一開始指令安心等在指令緩存中,等待被處理單元執行時才取出,然後解碼,準備相關參數,最後執行。這種過程有兩個缺點,首先某些 x86指令非常複雜,經由解碼器時需耗費太多的時間來解碼,尤其是以X86爲代表的CISA家族,最糟的情況下所有解碼單元忙於解碼複雜指令,以至於阻礙處理器的執行管道。另一個問題則是如果在小循環的代碼中,每當這些代碼進入執行路徑幾次,編碼就得進行幾次,造成時間的浪費。而且流水管線越做越長,這也就意味着一旦流水線遭遇不測發生中斷,或者出現分枝預測的錯誤,造成的延時就會很大。可以說,這算是一個一直困擾CPU設計人員的問題。
從Pentium4開始,Intel採用了一種新的緩存類型,叫tracecache,俗稱指令追蹤緩存。它不是用來和一般的指令緩存一樣存儲指令的原始字節序列,而是被用來存儲解碼單元送出來的微操作。
指令追蹤緩存位於指令解碼器和內核第一層計算管線之間,指令在解碼單元內獲取和解碼之後,微操作必須先經過追蹤緩存的存儲和和輸出,才能到達內核第一層計算管線被執行。這樣可以有效彌補上述兩個缺點,因爲此時所取的都是解碼後的指令,還避免了指令的重複調用。更重要的是,追蹤緩存確保處理器管道持續處於指令滿載的狀態,避免執行路徑由於解碼單元延遲的情況。應該說,指令追蹤緩存確實是一個值得稱道的技術。
當然,這些分析都是基於L1I緩存分析的,至於L2的緩存,因爲是數據和指令統一存儲,自然就不可能作出和追蹤緩存類似的架構了。

CPU的L1指令緩存和L1高速緩存的關係
L1高速緩存,也就是一級高速緩存。CPU內置了高速緩存,可以提高CPU的運行效率。內置的L1高速緩存的容量和結構對CPU的性能影響較大,不過高速緩衝存儲器均由靜態RAM組成,結構較複雜,在CPU管芯面積不能太大的情況下,L1級高速緩存的容量不可能做得太大。採用回寫(Write Back)結構的高速緩存。它對讀和寫操作均有可提供緩存。而採用寫通(Write-through)結構的高速緩存,僅對讀操作有效。在486以上的計算機中基本採用了回寫式高速緩存。在流行的處理器中,奔騰Ⅲ和Celeron處理器擁有32KB的L1高速緩存,奔騰4爲8KB,而AMD的Duron和Athlon處理器的L1高速緩存高達128KB。
L2高速緩存,指CPU第二層的高速緩存,第一個採用L2高速緩存的是奔騰 Pro處理器,它的L2高速緩存和CPU運行在相同頻率下的,但成本昂貴,市場生命很短,所以其後奔騰 II的L2高速緩存運行在相當於CPU頻率一半下的。接下來的Celeron處理器又使用了和CPU同速運行的L2高速緩存,現在流行的CPU,無論是AthlonXP和奔騰4,其L2高速緩存都是和CPU同速運行的。除了速度以外,L2高速緩存容量也會影響CPU的性能,原則是越大越好,現在家庭用CPU容量最大的是512KB,而服務器和工作站上用CPU的L2高速緩存更高達1MB-3MB
CPU L1緩存首先是CPU的內部結構決定,CPU是由硅晶原片切割而成的,一塊晶原片切割的CPU塊有限,所以一個CPU的結構要非常合理地搭配L1,L2緩存大小,P4640比P4630高頻,所以內部結構有所不同。而L1緩存的作用是數據交換的“超高速”通道,所以其大小不是重點,內部參數纔是關鍵,只要參數(CL值,延遲等)夠快,完全可以彌補大小的差距,像P-M 1.7G的CPU由於L1緩存的參數夠高,雖然容量有不足,但在性能測試上L1緩存的速度比P4 630快的多。所以不必刻意要求L1緩存大小。(另外,CPU的緩存速度比一般內存快的多,大概快幾十倍)
高速緩存英文是cache,是一種特殊的存儲器子系統,其中複製了頻繁使用的數據,以利於CPU快速訪問。存儲器的高速緩衝存儲器存儲了頻繁訪問的 RAM 位置的內容及這些數據項的存儲地址。當處理器引用存儲器中的某地址時,高速緩衝存儲器便檢查是否存有該地址。如果存有該地址,則將數據返回處理器;如果沒有保存該地址,則進行常規的存儲器訪問。因爲高速緩衝存儲器總是比主RAM存儲器速度快,所以當 RAM 的訪問速度低於微處理器的速度時,常使用高速緩衝存儲器。
------

註釋:

CL(CAS Latency)
CAS的延遲時間,這是縱向地址脈衝的反應時間,也是在一定頻率下衡量支持不同規範的內存的重要標誌之一。內存負責向CPU提供運算所需的原始數據,而目前CPU運行速度超過內存數據傳輸速度很多,因此很多情況下CPU都需要等待內存提供數據,這就是常說的“CPU等待時間”。內存傳輸速度越慢,CPU等待時間就會越長,系統整體性能受到的影響就越大。因此,快速的內存是有效提升CPU效率和整機性能的關鍵之一。
 

 

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