複製鏈接
請複製以下鏈接發送給好友

指令緩存

鎖定
CPU緩存(Cache Memory)位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即 將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。
中文名
指令緩存
外文名
Cache Memory
技術應用
關鍵路徑延遲
運作原理
儲存裝置中所讀取數據且進行拷貝
位    置
CPU與內存之間的臨時存儲器

指令緩存技術簡介

指令緩存 指令緩存
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的核心主要有ManchesterToledo兩種,他們的二級緩存都是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設計人員的問題。
從Pentium 4開始,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。
cpuL1緩存首先是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 的訪問速度低於微處理器的速度時,常使用高速緩衝存儲器。

指令緩存技術應用

為了提高高速DSP或通用處理器的程序執行速度,描述了一種指令緩存單元的有效架構,特別是實現細節和性能分析.因所提出的指令緩存單元是為一種高性能VLIW結構的DSP核而設計,使用了並行的標籤比較邏輯和寄存器堆的結構,芯片面積、關鍵路徑延遲、功耗都大大減小.該指令緩存單元使用高層次的RTL(使用Verilog)編碼,並由Synopsys的Design Compiler綜合,使用不同的StarCoreTM基準程序測試比較,並進行性能分析.比較結果表明,所提出的結構是有效的,適合用於任何高速的處理器。

指令緩存一級指令緩存

緩存基本上都是採用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處理器在使用超線程技術時會導致性能下降的重要原因 [1] 

指令緩存三級指令緩存

三級緩存機構圖 三級緩存機構圖
三級指令緩存是為讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率。

指令緩存運作原理

其運作原理在於使用較快速的儲存裝置保留一份從慢速儲存裝置中所讀取數據且進行拷貝,當有需要再從較慢的儲存體中讀寫數據時,CACHE能夠使得讀寫的動作先在快速的裝置上完成,如此會使系統的響應較為快速。

指令緩存三級緩存分類

Cache(三級緩存),分為兩種,早期的是外置,以後的升級產品都是內置的。而它的實際作用即是,L3緩存的應用可以進一步降低內存延遲,同時提升大數據量計算時處理器的性能。降低內存延遲和提升大數據量計算能力對遊戲都很有幫助。而在服務器領域增加L3緩存在性能方面仍然有顯著的提升。比方具有較大L3緩存的配置利用物理內存會更有效,故它比較慢的磁盤I/O子系統可以處理更多的數據請求。具有較大L3緩存的處理器提供更有效的文件系統緩存行為及較短消息和處理器隊列長度。
其實最早的L3緩存被應用在AMD發佈的K6-III處理器上,當時的L3緩存受限於製造工藝,並沒有被集成進芯片內部,而是集成在主板上。在只能夠和系統總線頻率同步的L3緩存同主內存其實差不了多少。後來使用L3緩存的是英特爾為服務器市場所推出的Itanium處理器。接着就是P4EE和至強MP。Intel還打算推出一款9MB L3緩存的Itanium2處理器,和以後24MB L3緩存的雙核心Itanium2處理器。
但基本上L3緩存對處理器的性能提高顯得不是很重要,比方配備1MB L3緩存的Xeon MP處理器卻仍然不是Opteron的對手,由此可見前端總線的增加,要比緩存增加帶來更有效的性能提升
參考資料