六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦硬件知識>CPU知識>

CPU實用緩存知識

時間: 懷健0 分享

由于CPU是核心硬件,相信我們在選擇CPU的時候都會去關(guān)心CPU參數(shù)方面,而在CPU核心參數(shù)中,我們經(jīng)常會看到緩存(Cache)這個參數(shù),那么CPU緩存有什么用?下面就讓小編帶你去看看CPU實用緩存知識,希望能幫助到大家!

CPU緩存有什么用?科普一下關(guān)于CPU緩存的作用

CPU緩存是什么?

CPU緩存是CPU和內(nèi)存之間的臨時存儲器,雖然緩存的容量不能與內(nèi)存和硬盤相比,但是交換速度卻比它們快得多了,CPU緩存就是為了更快的連接CPU與內(nèi)存而存儲在中間媒介。簡單來說,因為CPU的速度快,而內(nèi)存的速度較慢,這時CPU緩存來解決這個問題,減少了CPU的等待時間,變相的提高了CPU的性能。

舉個例子,比如CPU需要做一個加法運(yùn)算,需要-2個時鐘周期,如果從內(nèi)存中讀取數(shù)據(jù)需要100-300個周期,而CPU是不可能等待那么長的時間,即使是高端CPU也變成龜速,因此通過高速緩存來減少了CPU等待時間。

在主流的CPU中,一般緩存分為一級緩存、二級緩存、三級緩存,而它們之間的速度呈遞減,容量呈遞增,讀取一級緩存中的信息需要3個周期,與CPU處理運(yùn)算的速度無限接近了,讀取二級緩存的周期大約10-15個周期,而三級緩存所需時間為50個周期左右。

之所以CPU需要采用這種層級結(jié)構(gòu),主要就是是從成本、性能、容量還有面積上來平衡的,對于CPU緩存來說,下面幾點(diǎn)是它們提升的目前,也就所謂的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)存花費(fè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個月翻一番的速度在發(fā)展,然而內(nèi)存和硬盤的發(fā)展速度遠(yuǎn)遠(yuǎn)不及CPU。這就造成了高性能能的內(nèi)存和硬盤價格及其昂貴。然而CPU的高度運(yùn)算需要高速的數(shù)據(jù)。為了解決這個問題,CPU廠商在CPU中內(nèi)置了少量的高速緩存以解決IO速度和CPU運(yùn)算速度之間的不匹配問題。

在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的運(yùn)算速度超越了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(Modified E__clusive Shared Or Invalid)(也稱為伊利諾斯協(xié)議,是因為該協(xié)議由伊利諾斯州立大學(xué)提出)是一種廣泛使用的支持寫回策略的緩存一致性協(xié)議。

MESI協(xié)議中的狀態(tài)

CPU中每個緩存行(caceh line)使用4種狀態(tài)進(jìn)行標(biāo)記(使用額外的兩位(bit)表示):

M: 被修改(Modified)

該緩存行只被緩存在該CPU的緩存中,并且是被修改過的(dirty),即與主存中的數(shù)據(jù)不一致,該緩存行中的內(nèi)存需要在未來的某個時間點(diǎn)(允許其它CPU讀取請主存中相應(yīng)內(nèi)存之前)寫回(write back)主存。

當(dāng)被寫回主存之后,該緩存行的狀態(tài)會變成獨(dú)享(e__clusive)狀態(tài)。

E: 獨(dú)享的(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)系也可以使用下表進(jì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)常作用廣播的方式來完成,例如:RequestFor Ownership (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)聽其它緩存使該緩存行無效或者獨(dú)享該緩存行的請求,并將該緩存行變成無效(Invalid)。

一個處于E狀態(tài)的緩存行也必須監(jiān)聽其它緩存讀主存中該緩存行的操作,一旦有這種操作,該緩存行需要變成S狀態(tài)。

對于M和E狀態(tài)而言總是精確的,他們在和該緩存行的真正狀態(tài)是一致的。而S狀態(tài)可能是非一致的,如果一個緩存將處于S狀態(tài)的緩存行作廢了,而另一個緩存實際上可能已經(jīng)

獨(dú)享了該緩存行,但是該緩存卻不會將該緩存行升遷為E狀態(tài),這是因為其它緩存不會廣播他們作廢掉該緩存行的通知,同樣由于緩存并沒有保存該緩存行的copy的數(shù)量,因此(即使有這種通知)也沒有辦法確定自己是否已經(jīng)獨(dú)享了該緩存行。

從上面的意義看來E狀態(tài)是一種投機(jī)性的優(yōu)化:如果一個CPU想修改一個處于S狀態(tài)的緩存行,總線事務(wù)需要將所有該緩存行的copy變成Invalid狀態(tài),而修改E狀態(tài)的緩存不需要使用總線事務(wù)。

從 CPU 緩存看緩存的套路

一、前言

不同存儲技術(shù)的訪問時間差異很大,從 計算機(jī)層次結(jié)構(gòu) 可知,通常情況下,從高層往底層走,存儲設(shè)備變得更慢、更便宜同時體積也會更大,CPU 和內(nèi)存之間的速度存在著巨大的差異,此時就會想到計算機(jī)科學(xué)界中一句著名的話:計算機(jī)科學(xué)的任何一個問題,都可以通過增加一個中間層來解決。

二、引入中間層——緩存層

為了解決速度不匹配問題,可以通過引入一個緩存中間層來解決問題,但是也會引入一些新的問題?,F(xiàn)代計算機(jī)系統(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)存為止,英文稱之為write through,這種方式的優(yōu)點(diǎn)是比較簡單,但是缺點(diǎn)也很明顯,由于每次都需要訪問內(nèi)存,所以速度會比較慢。還有一種方法就是,當(dāng) CPU 更新了緩存之后并不馬上更新到內(nèi)存中去,在適當(dāng)?shù)臅r候再執(zhí)行寫入內(nèi)存的操作,因為有很多的緩存只是存儲一些中間結(jié)果,沒必要每次都更新到內(nèi)存中去,英文稱之為write back,這種方式的優(yōu)點(diǎn)是 CPU 執(zhí)行更新的效率比較高,缺點(diǎn)就是實現(xiàn)起來會比較復(fù)雜。

上面說的在適當(dāng)?shù)臅r候?qū)懭雰?nèi)存,如果是單核 CPU 的話,可以在緩存要被新進(jìn)入的數(shù)據(jù)取代時,才更新內(nèi)存,但是在多核 CPU 的情況下就比較復(fù)雜了,由于 CPU 的運(yùn)算速度超越了 1 級緩存的數(shù)據(jù) I\O 能力,CPU 廠商又引入了多級的緩存結(jié)構(gòu),比如常見的 L1、L2、L3 三級緩存結(jié)構(gòu),L1 和 L2 為 CPU 核心獨(dú)有,L3 為 CPU 共享緩存。

如果現(xiàn)在分別有兩個線程運(yùn)行在兩個不同的核 Core 1 和 Core 2 上,內(nèi)存中 i 的值為 1,這兩個分別運(yùn)行在兩個不同核上的線程要對 i進(jìn)行加 1 操作,如果不加一些限制,兩個核心同時從內(nèi)存中讀取 i 的值,然后進(jìn)行加 1 操作后再分別寫入內(nèi)存中,可能會出現(xiàn)相互覆蓋的情況,解決的方法相信大家都能想得到,第一種是只要有一個核心修改了緩存的數(shù)據(jù)之后,就立即把內(nèi)存和其它核心更新。第二種是當(dāng)一個核心修改了緩存的數(shù)據(jù)之后,就把其它同樣復(fù)制了該數(shù)據(jù)的 CPU 核心失效掉這些數(shù)據(jù),等到合適的時機(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ù)單元(Cache line)有 4 種不同的狀態(tài),用 2 個 bit 表示,狀態(tài)和對應(yīng)的描述如下:

單核讀取步驟:Core 0 發(fā)出一條從內(nèi)存中讀取 a 的指令,從內(nèi)存通過 BUS 讀取 a 到 Core 0 的緩存中,因為此時數(shù)據(jù)只在 Core 0 的緩存中,所以將 Cache line 修改為 E 狀態(tài)(獨(dú)享),該過程用示意圖表示如下:

雙核讀取步驟:首先 Core 0 發(fā)出一條從內(nèi)存中讀取 a 的指令,從內(nèi)存通過 BUS 讀取 a 到 Core 0 的緩存中,然后將 Cache line 置為 E狀態(tài),此時 Core 1 發(fā)出一條指令,也是要從內(nèi)存中讀取 a,當(dāng) Core 1 試圖從內(nèi)存讀取 a 的時候, Core 0 檢測到了發(fā)生地址沖突(其它緩存讀主存中該緩存行的操作),然后 Core 0 對相關(guān)數(shù)據(jù)做出響應(yīng),a 存儲于這兩個核心 Core 0 和 Core 1 的緩存行中,然后設(shè)置其狀態(tài)為 S 狀態(tài)(共享),該過程示意圖如下:

假設(shè)此時 Core 0 核心需要對 a 進(jìn)行修改了,首先 Core 0 會將其緩存的 a 設(shè)置為 M(修改)狀態(tài),然后通知其它緩存了 a 的其它核 CPU(比如這里的 Core 1)將內(nèi)部緩存的 a 的狀態(tài)置為 I(無效)狀態(tài),最后才對 a 進(jìn)行賦值操作。該過程如下所示:

細(xì)心的朋友們可能已經(jīng)注意到了,上圖中內(nèi)存中 a 的值(值為 1)并不等于 Core 0 核心中緩存的最新值(值為 2),那么要什么時候才會把該值更新到內(nèi)存中去呢?就是當(dāng) Core 1 需要讀取 a 的值的時候,此時會通知 Core 0 將 a 的修改后的最新值同步到內(nèi)存(Memory)中去,在這個同步的過程中 Core 0 中緩存的 a 的狀態(tài)會置為 E(獨(dú)享)狀態(tài),同步完成后將 Core 0 和 Core 1 中緩存的 a 置為 S(共享)狀態(tài),示意圖描述該過程如下所示:

至此,變量 a 在 CPU 的兩個核 Core 0 和 Core 1 中回到了 S(共享)狀態(tài)了,以上只是簡單的描述了一下大概的過程,實際上這些都是在 CPU 的硬件層面上去保證的,而且操作比較復(fù)雜。

五、總結(jié)

現(xiàn)在很多一些實現(xiàn)緩存功能的應(yīng)用程序都是基于這些思想設(shè)計的,緩存把數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行緩存到速度更快的內(nèi)存中,可以加快我們應(yīng)用程序的響應(yīng)速度,比如我們使用常見的 Redis 數(shù)據(jù)庫可能是采用下面這些策略:① 首先應(yīng)用程序從緩存中查詢數(shù)據(jù),如果有就直接使用該數(shù)據(jù)進(jìn)行相應(yīng)操作后返回,如果沒有則查詢數(shù)據(jù)庫,更新緩存并且返回。② 當(dāng)我們需要更新數(shù)據(jù)時,先更新數(shù)據(jù)庫,然后再讓緩存失效,這樣下次就會先查詢數(shù)據(jù)庫再回填到緩存中去,可以發(fā)現(xiàn),實際上底層的一些思想都是相通的,不同的只是對于特定的場景可能需要增加一些額外的約束?;A(chǔ)知識才是技術(shù)這顆大樹的根,我們先把根栽好了,剩下的那些枝和葉都是比較容易得到的東西了。

CPU實用緩存知識相關(guān)文章

CPU基礎(chǔ)知識大全詳解

CPU的基礎(chǔ)知識大全

CPU的基礎(chǔ)知識

如何清理CPU緩存

【電腦小知識知多少】:CPU四核和兩核的區(qū)別在于哪里呢?

CPU基礎(chǔ)知識科普

cpu緩存低有什么缺點(diǎn)

CPU基礎(chǔ)知識拓展

計算機(jī)硬件基本知識你知多少?

2019超詳細(xì)電腦硬件及電腦配置知識大全講解

CPU實用緩存知識

由于CPU是核心硬件,相信我們在選擇CPU的時候都會去關(guān)心CPU參數(shù)方面,而在CPU核心參數(shù)中,我們經(jīng)常會看到緩存(Cache)這個參數(shù),那么CPU緩存有什么用?下面就讓小編帶你去看看CPU實用緩存知
推薦度:
點(diǎn)擊下載文檔文檔為doc格式

精選文章

  • CPU緩存作用知識科普
    CPU緩存作用知識科普

    說到CPU的規(guī)格參數(shù),相信很多小伙伴都看到過電商、評測、官方的各種表格,大家覺著最重要的是什么?第幾代核心?頻率?還是制造工藝?從這些參數(shù)在表格里

  • CPU緩存冷門知識講解
    CPU緩存冷門知識講解

    由于CPU是核心硬件,相信我們在選擇CPU的時候都會去關(guān)心CPU參數(shù)方面,而在CPU核心參數(shù)中,我們經(jīng)常會看到緩存(Cache)這個參數(shù),那么CPU緩存有什么用?下面

  • CPU漏洞的成因和預(yù)防
    CPU漏洞的成因和預(yù)防

    最近,CPU大規(guī)模爆出安全漏洞的消息鬧得人心惶惶。消息顯示,英特爾等CPU中存在嚴(yán)重的安全漏洞,這些漏洞會導(dǎo)致內(nèi)核內(nèi)存數(shù)據(jù)泄漏,身份驗證、密碼之

  • CPU選購實用基礎(chǔ)知識
    CPU選購實用基礎(chǔ)知識

    我們購買電腦,往往會關(guān)心CPU的性能好壞,CPU的性能好壞直接影響了電腦的運(yùn)算速度,我們可以將CPU比喻成大腦,是計算機(jī)的核心,決定了電腦速度好壞。

813530