本文主要是關(guān)于二級緩存的介紹,并探討了二級緩存的速度大小及其大小上限。
二級緩存速度如何
CPU二級緩存是更具CPU的型號來定位的,沒有固定值。
緩存大小也是CPU的重要指標(biāo)之一,且緩存的結(jié)構(gòu)和大小對CPU速度的影響大,CPU內(nèi)緩存的運(yùn)行頻率極高,一般是和處理器同頻運(yùn)作,工作效率大于系統(tǒng)內(nèi)存和硬盤。工作時,CPU往往需要重復(fù)讀取同樣的數(shù)據(jù)塊,而緩存容量的增大,可大幅度提升CPU內(nèi)部讀取數(shù)據(jù)的命中率,而不用到內(nèi)存或者硬盤上尋找,提高系統(tǒng)性能。CPU芯片面積和成本的因素來考慮,緩存很小。
L1 Cache(一級緩存)是CPU第一層高速緩存,分為數(shù)據(jù)緩存和指令緩存。內(nèi)置的L1高速緩存的容量和結(jié)構(gòu)對CPU的性能影響較大,高速緩沖存儲器均由靜態(tài)RAM組成,結(jié)構(gòu)較復(fù)雜,在CPU管芯面積不太大的情況下,L1級高速緩存的容量不能做得太大。
一般服務(wù)器CPU的L1緩存的容量通常在32—256KB。
L2 Cache(二級緩存)是CPU的第二層高速緩存,分內(nèi)部和外部兩種芯片。內(nèi)部的芯片二級緩存運(yùn)行速度與主頻相同,而外部的二級緩存則只有主頻的一半。L2高速緩存容量也會影響CPU的性能,原則是越大越好,現(xiàn)在家庭用CPU容量最大的是512KB,而服務(wù)器和工作站上用CPU的L2高速緩存更高達(dá)25。
我們都知道,CPU的運(yùn)算速度是非常快的,而且遠(yuǎn)比硬盤要快的多,這樣在實(shí)際運(yùn)算過程中就產(chǎn)生了一個問題,由于硬盤的讀寫速度遠(yuǎn)遠(yuǎn)跟不上CPU的運(yùn)算速度,這樣在這兩者之間就會出現(xiàn)斷檔,也就是CPU在處理完一部分?jǐn)?shù)據(jù)后就沒用工作可做,要等待硬盤把后續(xù)數(shù)據(jù)傳輸過來之后才能繼續(xù)工作,這樣顯然會影響CPU的工作效率,這才最初期的電腦當(dāng)中體現(xiàn)的還不是很明顯,隨著電腦的發(fā)展,這種斷檔越來越大,于是就產(chǎn)生了內(nèi)存,內(nèi)存的原理就是一個緩沖存儲,電腦在運(yùn)行程序時,先將要處理的數(shù)據(jù)由硬盤轉(zhuǎn)移到內(nèi)存中,然后再由內(nèi)存?zhèn)魉徒oCPU,由于內(nèi)存的速度要遠(yuǎn)大于硬盤(但是也還是趕不上CPU的運(yùn)算速度),所以之前我們提到的斷檔問題就在一定程度上得到了結(jié)局,不過由于存儲原理和制作工藝、還有成本的問題,內(nèi)存并不能夠像硬盤用作大容量數(shù)據(jù)存儲。
以上的內(nèi)存的原理,接下來的高速緩存就類似了,由于內(nèi)存的速度也比不上CPU的運(yùn)算速度,所以就誕生了Cache,與內(nèi)存和硬盤這類存儲設(shè)備不同,Cache是集成在CPU內(nèi)部的,而且制作工藝更加先進(jìn),所以速度非常之快,從LZ的軟件測試結(jié)果中也能看出來,它能夠更好的解決硬盤和CPU的斷檔問題,但是由于Cache的制作工藝更加困難,所以直到現(xiàn)在還處在MB級別上。
其實(shí)在一個程序的運(yùn)行當(dāng)中,有部分?jǐn)?shù)據(jù)是需要反復(fù)運(yùn)算的,也就是說有一部分?jǐn)?shù)據(jù)的使用頻率高,于是電腦會根據(jù)使用頻率的不同,把最常用到得一部分?jǐn)?shù)據(jù)放在Cache中,其次在內(nèi)存,最后才在硬盤上,這樣CPU在計算時,首先掃描Cache,如果沒有找到所需要的數(shù)據(jù),它才會一次掃描內(nèi)存和硬盤,這樣就可以大量減少數(shù)據(jù)檢索、傳輸?shù)乃俣?,也就是減少數(shù)據(jù)存儲與計算間的斷檔。
隨著技術(shù)的發(fā)展,Cache中也出現(xiàn)了一級Cache、二級Cache之分,在高端CPU中,還會有三級Cache,他們都是為了減少數(shù)據(jù)斷檔,提高CPU的速度而存在的,一級最快,二級次之,三級再次,但是只要是Cache,都肯定要比內(nèi)存的硬盤更快,LZ試想一下,按照我上段所說的計算原理,如果你只有一級Cache,這樣CPU如果在Cache中沒有找到要用的數(shù)據(jù),它就會到速度比Cache慢上很多的內(nèi)存中去尋找,這樣數(shù)據(jù)的檢索與傳輸速度立刻就降下了一大截,而如果你有二級甚至三級Cache的話,CPU會按照一級Cache——>二級Cache——>三級Cache——>內(nèi)存——>硬盤的順序?qū)ふ覕?shù)據(jù),這樣就可以最大程度的減少數(shù)據(jù)斷檔了。
二級緩存最大多少
在現(xiàn)階段的CPU產(chǎn)品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量分為128KB、256KB、512KB、1MB、2MB等。一級緩存容量各產(chǎn)品之間相差不大,而二級緩存容量則是提高CPU性能的關(guān)鍵。二級緩存容量的提升是由CPU制造工藝所決定的,容量增大必然導(dǎo)致CPU內(nèi)部晶體管數(shù)的增加,要在有限的CPU面積上集成更大的緩存,對制造工藝的要求也就越高歷年來Intel都是通過二級緩存的大小來劃分產(chǎn)品線,初期只有奔騰和賽揚(yáng)兩種規(guī)格,到了酷睿2時代Intel達(dá)到了登峰造極的境界:僅僅是雙核產(chǎn)品就擁有512K、1M、2M、3M、4M、6M多達(dá)六個版本,四核產(chǎn)品也有4M、6M、8M、12M四個版本,令人眼花繚亂!而三級緩存從2MB增加到6MB!
二級緩存多大合適
英特爾處理器在游戲方面歷來就是二級緩存非常的敏感,其實(shí)這與一級緩存的設(shè)計是分不開的。英特爾的處理器采用的是“數(shù)據(jù)代碼指令追蹤緩存”設(shè)計,基于這種架構(gòu)設(shè)計的的一級緩存不存儲實(shí)際的數(shù)據(jù),而僅僅存儲這些數(shù)據(jù)在二級緩存中的指令代碼,如此一來,所有數(shù)據(jù)都將被存儲到二級緩存中,而一級數(shù)據(jù)所需要存儲的僅僅是數(shù)據(jù)在二級緩存中的起始地址而已。由于一級數(shù)據(jù)緩存不再存儲實(shí)際數(shù)據(jù),因此該設(shè)計能夠在很大程度上降處理器對一級緩存容量的要求,進(jìn)而降低處理器的生產(chǎn)難度和成本,這也就可以解釋了為什么酷睿2處理器的一級緩存僅僅為32KB+32KB。此時我們也就可以知道這種設(shè)計的弊端,那就是處理器對于二級緩存的容量會有很大的依賴,也因此使得英特爾處理器對于二級緩存非常的敏感。
AMD處理器的一級緩存設(shè)計采用的是傳統(tǒng)的“實(shí)數(shù)據(jù)讀寫緩存”設(shè)計,基于該設(shè)計的一級緩存主要用于存儲CPU最先讀取的數(shù)據(jù),而其余的預(yù)讀取數(shù)據(jù)則分別存儲在二級緩存和系統(tǒng)內(nèi)存當(dāng)中。這種設(shè)計的有點(diǎn)在于更加直接快速的讀取數(shù)據(jù),缺點(diǎn)在于對一級緩存的容量有更高的要求,同時增加了處理器的制造難度和成本(因為一級緩存集成在處理器內(nèi)核的內(nèi)部,二級緩存則獨(dú)立存在于處理器內(nèi)核的外部,并且一級緩存的成本要高于二級緩存)。以AMD Athlon 64處理器為例,由于其已經(jīng)具備了64KB一級指令緩存和64KB一級數(shù)據(jù)緩存,只要處理器的二級緩存容量大于等于128KB就能夠存儲足夠的數(shù)據(jù)和指令,正是因為這個設(shè)計,讓AMD的處理器對于二級緩存并不如英特爾處理器那樣敏感。
通過前面的測試我們對于二級緩存對英特爾酷睿2處理器性能的影響有了一個清楚的認(rèn)識,在網(wǎng)絡(luò)辦公、音視頻編解碼處理等方面,當(dāng)二級緩存達(dá)到一定的容量時,提高二級緩存容量并不會給處理器帶來什么明顯的性能提升。而在3D游戲這種對處理器浮點(diǎn)運(yùn)算能力要求很高的應(yīng)用中,二級緩存的增加無疑會更好的提高性能。當(dāng)然在這里我們還有一點(diǎn)是不能否認(rèn)的,那就是更高的二級緩存對于多核心處理器來說還是具有無法替代的助力。
我們知道,CPU執(zhí)行指令時,會將執(zhí)行結(jié)果放在一個叫“寄存器”的元件中,由于“寄存器”集成在CPU內(nèi)部,與ALU等構(gòu)成CPU的重要元件,因此寄存器中的指令很快被CPU所訪問,但畢竟寄存器的容量太小,CPU所需的大量指令和數(shù)據(jù)還在內(nèi)存(RAM)當(dāng)中,所以CPU為了完成指令操作,需要頻繁地向內(nèi)存發(fā)送接收指令、數(shù)據(jù)。
由于內(nèi)存的處理速度遠(yuǎn)遠(yuǎn)低于CPU,所以傳統(tǒng)的系統(tǒng)瓶頸在這里就產(chǎn)生了,CPU在處理指令時往往花費(fèi)很多時間在等待內(nèi)存做準(zhǔn)備工作。
為了解決這個問題,人們在CPU內(nèi)集成了一個比內(nèi)存快許多的“Cache”,這就是最早的“高速緩存”。
L1高速緩存是與CPU完全同步運(yùn)行的存儲器,也就是我們常說的一級緩存,如果CPU需要的數(shù)據(jù)和指令已經(jīng)在高速緩存中了,那么CPU不必等待,直接就可以從一級緩存(L1)中取得數(shù)據(jù),如果數(shù)據(jù)不在L1中,CPU再從二級緩存(L2)中提取數(shù)據(jù),大大提高了系統(tǒng)的工作效率。
沒有CPU緩存前
我們可以形象地把CPU的運(yùn)算單元想象成是一間坐落在城市中心的工廠,把內(nèi)存看成是工廠設(shè)置在郊區(qū)的一間面積很大的倉庫A。
工廠生產(chǎn)所需要的原材料每次都要花時間去遠(yuǎn)處的倉庫A調(diào)運(yùn),而且到達(dá)倉庫后,還要等待倉庫準(zhǔn)備好材料,中間浪費(fèi)了不少時間。這就是CPU頻率未變的情況下,CPU與內(nèi)存的數(shù)據(jù)交換不同步的現(xiàn)象。
而突然有一天,由于資金短缺,倉庫A從近郊區(qū)“搬到”了遠(yuǎn)郊區(qū),這樣原料和成品在工廠與倉庫A之間的運(yùn)輸所花費(fèi)的時間就更長了,工廠生產(chǎn)所需的原料供應(yīng)不足,經(jīng)常處于空運(yùn)轉(zhuǎn)的狀態(tài)下。這就是說當(dāng)CPU頻率增加后,CPU與內(nèi)存交換數(shù)據(jù)等待需時間會變得更長
增加L1 Cache
要解決CPU與內(nèi)存交換數(shù)據(jù)不同步這個系統(tǒng)瓶頸問題,其中一個辦法是在靠近工廠的市區(qū)設(shè)置一個小型的倉庫B(L1 Cache)。
平時把生產(chǎn)最迫切需要、用得最多的原材料(指令和數(shù)據(jù))從倉庫A(內(nèi)存)調(diào)配到倉庫B(L1 Cache),這樣工廠生產(chǎn)所需要的原材料就可以很快地調(diào)配過來,減少空運(yùn)轉(zhuǎn)的時間。當(dāng)所需的原材料在倉庫B中找不到(緩存未命中)時,仍然要到倉庫A(內(nèi)存)里調(diào)配,雖然無可避免地使工廠又進(jìn)入空運(yùn)轉(zhuǎn),或部分空運(yùn)轉(zhuǎn)(CPU等待若干個時鐘周期),但這樣畢竟使等待時間大大降低了。
小知識:緩存有一個“預(yù)讀”功能,也就是可以通過一定的算法,猜測接下來所要的數(shù)據(jù),并預(yù)先取入緩存。
再添L2 Cache
隨著CPU的頻率提高,與內(nèi)存之間交換數(shù)據(jù)不同步的現(xiàn)象更明顯了,可以理解為倉庫A(內(nèi)存)搬離郊區(qū),遷到更遠(yuǎn)的地方了。解決這一問題的一個更好的辦法就是在城市的邊緣再設(shè)立一個比倉庫B大的倉庫C,也就是我們說的二級緩存。
它的作用是把郊區(qū)之外的倉庫A(內(nèi)存)中最迫切用的材料(指令)運(yùn)到倉庫C,而工廠如果在倉庫B中找不到所需的材料,就可以到倉庫C中找,而不必老遠(yuǎn)跑到倉庫A那里找,節(jié)省了不少時間。
通常情況下,L2包括L1所有的數(shù)據(jù),另外還有一些附加的數(shù)據(jù)。換言之,L1與L2、L2與內(nèi)存之間是子母關(guān)系,所以CPU緩存的出現(xiàn)更有效地解決了CPU空等待所造成的資源浪費(fèi)問題。
結(jié)語
關(guān)于二級緩存的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評論
查看更多