版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第CPU實用緩存知識CPU緩存有什么用?科普一下關(guān)于CPU緩存的作用
CPU緩存是什么?
CPU緩存是CPU和內(nèi)存之間的臨時存儲器,雖然緩存的容量不能與內(nèi)存和硬盤相比,但是交換速度卻比它們快得多了,CPU緩存就是為了更快的連接CPU與內(nèi)存而存儲在中間媒介。簡單來說,因為CPU的速度快,而內(nèi)存的速度較慢,這時CPU緩存來解決這個問題,減少了CPU的等待時間,變相的提高了CPU的性能。
舉個例子,比方CPU需要做一個加法運算,需要-2個時鐘周期,如果從內(nèi)存中讀取數(shù)據(jù)需要100-300個周期,而CPU是不可能等待那么長的時間,即使是高端CPU也變成龜速,因此通過高速緩存來減少了CPU等待時間。
在主流的CPU中,一般緩存分為一級緩存、二級緩存、三級緩存,而它們之間的速度呈遞減,容量呈遞增,讀取一級緩存中的信息需要3個周期,與CPU處理運算的速度無限接近了,讀取二級緩存的周期大約10-15個周期,而三級緩存所需時間為50個周期左右。
之所以CPU需要采用這種層級結(jié)構(gòu),主要就是是從本錢、性能、容量還有面積上來平衡的,對于CPU緩存來說,下面幾點是它們提升的目前,也就所謂的CPU緩存的作用。
1、縮短延遲
訪問緩存的時間應(yīng)該盡可能縮短,可以通過多種的方式縮短這個時間,比方能夠通過減小緩存的大小或關(guān)聯(lián)性來降低緩存的延遲,還有方式預(yù)測、增加帶寬等方法。
2、提升命中率
所謂的命中率是在高速緩存中找到內(nèi)存引用的速率,我們希望能夠首先通過緩存中獲得信息,以得到速度優(yōu)勢,所以緩存需要最大限度地實現(xiàn)這一目標(biāo)。對于單個高速緩存,大小、關(guān)聯(lián)性和塊大小決定命中率。
3、降低更低級別內(nèi)存下的開銷
高速緩存是內(nèi)存層次結(jié)構(gòu)的一局部,其性能會影響其它性能,處理其它內(nèi)存花費的時間越長,意味著系統(tǒng)性能越低,也就是說盡可能讓處理在緩存中完成。
4、減少錯失懲罰
緩存中不能命中是無法防止的事情,但是我們可以減少處理未命中所需的時間以獲得更好的處理器性能,通過提升命中率并通過應(yīng)用不同的優(yōu)化,能夠降低錯失懲罰。
高速緩存是CPU中十分重要的局部,占據(jù)了大量的資源開銷和本錢,如果您看過CPU架構(gòu)圖的話,您就會發(fā)現(xiàn)緩存占據(jù)了至少50%的面積,絕對至關(guān)重要。
總結(jié):
CPU緩存的作用說白了就是提高命中率、降低延遲、降低內(nèi)存開銷、減少錯失懲罰等,對于一般用戶你只需了解CPU緩存能夠提升CPU的工作效率即可,緩存在cpu參數(shù)中的作用舉足輕重。
CPU緩存一致性協(xié)議
CPU在摩爾定律的指導(dǎo)下以每18個月翻一番的速度在開展,然而內(nèi)存和硬盤的開展速度遠遠不及CPU。這就造成了高性能能的內(nèi)存和硬盤價格及其昂貴。然而CPU的高度運算需要高速的數(shù)據(jù)。為了解決這個問題,CPU廠商在CPU中內(nèi)置了少量的高速緩存以解決IO速度和CPU運算速度之間的不匹配問題。
在CPU訪問存儲設(shè)備時,無論是存取數(shù)據(jù)抑或存取指令,都趨于聚集在一片連續(xù)的區(qū)域中,這就被稱為局部性原理。
比方循環(huán)、遞歸、方法的反復(fù)調(diào)用等。
比方順序執(zhí)行的代碼、連續(xù)創(chuàng)立的兩個對象、數(shù)組等。
帶有高速緩存的CPU執(zhí)行計算的流程
程序以及數(shù)據(jù)被加載到主內(nèi)存
指令和數(shù)據(jù)被加載到CPU的高速緩存
CPU執(zhí)行指令,把結(jié)果寫到高速緩存
高速緩存中的數(shù)據(jù)寫回主內(nèi)存
目前流行的多級緩存結(jié)構(gòu)
由于CPU的運算速度超越了1級緩存的數(shù)據(jù)IO能力,CPU廠商又引入了多級的緩存結(jié)構(gòu)。
多級緩存結(jié)構(gòu)
多核CPU多級緩存一致性協(xié)議MESI
多核CPU的情況下有多個一級緩存,如何保證緩存內(nèi)部數(shù)據(jù)的一致,不讓系統(tǒng)數(shù)據(jù)混亂。這里就引出了一個一致性的協(xié)議MESI。
MESI(ModifiedE__clusiveSharedOrInvalid)(也稱為伊利諾斯協(xié)議,是因為該協(xié)議由伊利諾斯州立大學(xué)提出)是一種廣泛使用的支持寫回策略的緩存一致性協(xié)議。
MESI協(xié)議中的狀態(tài)
CPU中每個緩存行(cacehline)使用4種狀態(tài)進行標(biāo)記(使用額外的兩位(bit)表示):
M:被修改(Modified)
該緩存行只被緩存在該CPU的緩存中,并且是被修改正的(dirty),即與主存中的數(shù)據(jù)不一致,該緩存行中的內(nèi)存需要在未來的某個時間點(允許其它CPU讀取請主存中相應(yīng)內(nèi)存之前)寫回(writeback)主存。
當(dāng)被寫回主存之后,該緩存行的狀態(tài)會變成獨享(e__clusive)狀態(tài)。
E:獨享的(E__clusive)
該緩存行只被緩存在該CPU的緩存中,它是未被修改正的(clean),與主存中數(shù)據(jù)一致。該狀態(tài)可以在任何時刻當(dāng)有其它CPU讀取該內(nèi)存時變成共享狀態(tài)(shared)。
同樣地,當(dāng)CPU修改該緩存行中內(nèi)容時,該狀態(tài)可以變成Modified狀態(tài)。
S:共享的(Shared)
該狀態(tài)意味著該緩存行可能被多個CPU緩存,并且各個緩存中的數(shù)據(jù)與主存數(shù)據(jù)一致(clean),當(dāng)有一個CPU修改該緩存行中,其它CPU中該緩存行可以被作廢(變成無效狀態(tài)(Invalid))。
I:無效的(Invalid)
該緩存是無效的(可能有其它CPU修改了該緩存行)。
MESI狀態(tài)轉(zhuǎn)換圖
狀態(tài)之間的相互轉(zhuǎn)換關(guān)系也可以使用下表進行表示。
操作
在一個典型系統(tǒng)中,可能會有幾個緩存(在多核系統(tǒng)中,每個核心都會有自己的緩存)共享主存總線,每個相應(yīng)的CPU會發(fā)出讀寫請求,而緩存的目的是為了減少CPU讀寫共享主存的次數(shù)。
一個緩存除在Invalid狀態(tài)外都可以滿足cpu的讀請求,一個Invalid的緩存行必須從主存中讀取(變成S或者E狀態(tài))來滿足該CPU的讀請求。
一個寫請求只有在該緩存行是M或者E狀態(tài)時才能被執(zhí)行,如果緩存行處于S狀態(tài),必須先將其它緩存中該緩存行變成Invalid狀態(tài)(也既是不允許不同CPU同時修改同一緩存行,即使修改該緩存行中不同位置的數(shù)據(jù)也不允許)。該操作經(jīng)常作用播送的方式來完成,例如:RequestForOwnership(RFO)。
緩存可以隨時將一個非M狀態(tài)的緩存行作廢,或者變成Invalid狀態(tài),而一個M狀態(tài)的緩存行必須先被寫回主存。
一個處于M狀態(tài)的緩存行必須時刻監(jiān)聽所有試圖讀該緩存行相對就主存的操作,這種操作必須在緩存將該緩存行寫回主存并將狀態(tài)變成S狀態(tài)之前被延遲執(zhí)行。
一個處于S狀態(tài)的緩存行也必須監(jiān)聽其它緩存使該緩存行無效或者獨享該緩存行的請求,并將該緩存行變成無效(Invalid)。
一個處于E狀態(tài)的緩存行也必須監(jiān)聽其它緩存讀主存中該緩存行的操作,一旦有這種操作,該緩存行需要變成S狀態(tài)。
對于M和E狀態(tài)而言總是精確的,他們在和該緩存行的真正狀態(tài)是一致的。而S狀態(tài)可能是非一致的,如果一個緩存將處于S狀態(tài)的緩存行作廢了,而另一個緩存實際上可能已經(jīng)
獨享了該緩存行,但是該緩存卻不會將該緩存行升遷為E狀態(tài),這是因為其它緩存不會播送他們作廢掉該緩存行的通知,同樣由于緩存并沒有保存該緩存行的copy的數(shù)量,因此(即使有這種通知)也沒有方法確定自己是否已經(jīng)獨享了該緩存行。
從上面的意義看來E狀態(tài)是一種投機性的優(yōu)化:如果一個CPU想修改一個處于S狀態(tài)的緩存行,總線事務(wù)需要將所有該緩存行的copy變成Invalid狀態(tài),而修改E狀態(tài)的緩存不需要使用總線事務(wù)。
從CPU緩存看緩存的套路
一、前言
不同存儲技術(shù)的訪問時間差異很大,從計算機層次結(jié)構(gòu)可知,通常情況下,從高層往底層走,存儲設(shè)備變得更慢、更廉價同時體積也會更大,CPU和內(nèi)存之間的速度存在著巨大的差異,此時就會想到計算機科學(xué)界中一句著名的話:計算機科學(xué)的任何一個問題,都可以通過增加一個中間層來解決。
二、引入中間層——緩存層
為了解決速度不匹配問題,可以通過引入一個緩存中間層來解決問題,但是也會引入一些新的問題?,F(xiàn)代計算機系統(tǒng)中,從硬件到操作系統(tǒng)、再到一些應(yīng)用程序,絕大局部的設(shè)計都用到了著名的局部性原理,局部性通常有如下兩種不同的形式:
時間局部性:在一個具有良好的時間局部性的程序當(dāng)中,被引用過一次的內(nèi)存位置,在將來一個不久的時間內(nèi)很可能會被再次引用到。
空間局部性:在一個具有良好的空間局部性的程序當(dāng)中,一個內(nèi)存位置被引用了一次,那么在不久的時間內(nèi)很可能會引用附近的位置。
有上面這個局部性原理為理論指導(dǎo),為了解決二者速度不匹配問題就可以在CPU和內(nèi)存之間加一個緩存層,于是就有了如下的結(jié)構(gòu):
三、緩存更新問題
在CPU中引入緩存中間層后,雖然可以解決和內(nèi)存速度不一致的問題,但是同時也面臨著一個問題:當(dāng)CPU更新了其緩存中的數(shù)據(jù)之后,要什么時候去寫入到內(nèi)存中呢?,比較容易想到的一個解決方案就是,CPU更新了緩存的數(shù)據(jù)之后就立即更新到內(nèi)存中,也就是說當(dāng)CPU更新了緩存的數(shù)據(jù)之后就會從上到下更新,直到內(nèi)存為止,英文稱之為writethrough,這種方式的優(yōu)點是比較簡單,但是缺點也很明顯,由于每次都需要訪問內(nèi)存,所以速度會比較慢。還有一種方法就是,當(dāng)CPU更新了緩存之后并不馬上更新到內(nèi)存中去,在適當(dāng)?shù)臅r候再執(zhí)行寫入內(nèi)存的操作,因為有很多的緩存只是存儲一些中間結(jié)果,沒必要每次都更新到內(nèi)存中去,英文稱之為writeback,這種方式的優(yōu)點是CPU執(zhí)行更新的效率比較高,缺點就是實現(xiàn)起來會比較復(fù)雜。
上面說的在適當(dāng)?shù)臅r候?qū)懭雰?nèi)存,如果是單核CPU的話,可以在緩存要被新進入的數(shù)據(jù)取代時,才更新內(nèi)存,但是在多核CPU的情況下就比較復(fù)雜了,由于CPU的運算速度超越了1級緩存的數(shù)據(jù)I\O能力,CPU廠商又引入了多級的緩存結(jié)構(gòu),比方常見的L1、L2、L3三級緩存結(jié)構(gòu),L1和L2為CPU核心獨有,L3為CPU共享緩存。
如果現(xiàn)在分別有兩個線程運行在兩個不同的核Core1和Core2上,內(nèi)存中i的值為1,這兩個分別運行在兩個不同核上的線程要對i進行加1操作,如果不加一些限制,兩個核心同時從內(nèi)存中讀取i的值,然后進行加1操作后再分別寫入內(nèi)存中,可能會出現(xiàn)相互覆蓋的情況,解決的方法相信大家都能想得到,第一種是只要有一個核心修改了緩存的數(shù)據(jù)之后,就立即把內(nèi)存和其它核心更新。第二種是當(dāng)一個核心修改了緩存的數(shù)據(jù)之后,就把其它同樣復(fù)制了該數(shù)據(jù)的CPU核心失效掉這些數(shù)據(jù),等到適宜的時機再更新,通常是下一次讀取該緩存的時候發(fā)現(xiàn)已經(jīng)無效,才從內(nèi)存中加載最新的值。
四、緩存一致性協(xié)議
不難看出第一種需要頻繁訪問內(nèi)存更新數(shù)據(jù),執(zhí)行效率比較低,而第二種會把更新數(shù)據(jù)推遲到最后一刻才會更新,讀取內(nèi)存,效率高(類似于懶加載)。緩存一致性協(xié)議(MESI)就是使用第二種方案,該協(xié)議主要是保證緩存內(nèi)部數(shù)據(jù)的一致,不讓系統(tǒng)數(shù)據(jù)混亂。MESI是指4種狀態(tài)的首字母。每個緩存存儲數(shù)據(jù)單元(Cacheline)有4種不同的狀態(tài),用2個bit表示,狀態(tài)和對應(yīng)的描述如下:
單核讀取步驟:Core0發(fā)出一條從內(nèi)存中讀取a的指令,從內(nèi)存通過BUS讀取a到Core0的緩存中,因為此時數(shù)據(jù)只在Core0的緩存中,所以將Cacheline修改為E狀態(tài)(獨享),該過程用示意圖表示如下:
雙核讀取步驟:首先Core0發(fā)出一條從內(nèi)存中讀取a的指令,從內(nèi)存通過BUS讀取a到Core0的緩存中,然后將Cacheline置為E狀態(tài),此時Core1發(fā)出一條指令,也是要從內(nèi)存中讀取a,當(dāng)Core1試圖從內(nèi)存讀取a的時候,Core0檢測到了發(fā)生地址沖突(其它緩存讀主存中該緩存行的操作),然后Core0對相關(guān)數(shù)據(jù)做出響應(yīng),a存儲于這兩個核心Core0和Core1的緩存行中,然后設(shè)置其狀態(tài)為S狀態(tài)(共享),該過程示意圖如下:
假設(shè)此時Core0核心需要對a進行修改了,首先Core0會將其緩存的a設(shè)置為M(修改)狀態(tài),然后通知其它緩存了a的其它核CPU(比方這里的Core1)將內(nèi)部緩存的a的狀態(tài)置為I(無效)狀態(tài),最后才對a進行賦值操作。該過程如下所示:
細心的朋友們可能已經(jīng)注意到了,上圖中內(nèi)存中a的值(值為1)并不等于Core0核心中緩存的最新值(值為2),那么要什么時候才會把該值更新到內(nèi)存中去呢?就是當(dāng)Core1需要讀取a的值的時候,此時會通知Core0將a的修改后的最新值同步到內(nèi)存(Memory)中去,在這個同步的過程中Core0中緩存的a的狀態(tài)會置為E(獨享)狀態(tài),同步完成后將Core0和Core1中緩存的a置為S(共享)狀態(tài),示意圖描述該過程如下所示:
至此,變量a在CPU的兩個核Core0和Core1中回到了S(共享)狀態(tài)了,以上只是簡單的描述了一下大概的過程,實際上這些都是在CPU的硬件層面上去保證的,而且操作比較復(fù)雜。
五、總結(jié)
現(xiàn)在很多一些
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國生物基FDCA(2,5-呋喃二甲酸)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 聘用臨時工合同范本
- 錨桿勞務(wù)分包合同
- 塔吊司機勞動合同
- 小企業(yè)勞動合同
- 勞務(wù)合同報酬
- 小產(chǎn)權(quán)房房屋租賃合同
- 大貨車貨物運輸合同
- 知識產(chǎn)權(quán)合同條款分析
- 城區(qū)中心亮化維修工程采購合同
- 改革開放教育援藏的創(chuàng)新及其成效
- 第3課+中古時期的西歐(教學(xué)設(shè)計)-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 山東省濟寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 班組建設(shè)工作匯報
- 供應(yīng)鏈金融與供應(yīng)鏈融資模式
- 工程類工程公司介紹完整x
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 關(guān)鍵工序特殊過程培訓(xùn)課件精
- 輪機備件的管理(船舶管理課件)
- 統(tǒng)編《道德與法治》三年級下冊教材分析
- 國際尿失禁咨詢委員會尿失禁問卷表
評論
0/150
提交評論