CPU緩存用處意義解釋
簡而言之,因為內存太慢了,實際上內存之所以誕生也是基于類似的原因。理論上來說,一臺計算機只需要外部存儲器就能運行,但是這樣速度太慢,尤其是早期使用的紙帶、磁帶,完全跟不上處理器的運算速度。下面就讓小編帶你去看看CPU緩存用處意義解釋,希望能幫助到大家!
CPU緩存有什么用?Intel官方答案來了
更詳細來講,在計算機系統(tǒng)中,CPU高速緩存在金字塔式存儲體系中它位于自頂向下的第二層,僅次于CPU寄存器。其容量遠小于內存,但速度卻可以接近處理器的頻率,比內存快得多。
緩存的出現(xiàn)主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度要比內存讀寫速度快很多,這樣會使CPU花費很長時間等待數(shù)據(jù)到來或把數(shù)據(jù)寫入內存。
按照數(shù)據(jù)讀取順序和與CPU結合的緊密程度,CPU緩存可以分為一級緩存,二級緩存,部分高端CPU還具有三級緩存。
今年下半年,Intel將推出10nm+ Tiger Lake,還是針對輕薄本,CPU架構升級為Willow Cove,IPC相比于Skylake提升25%,換算一下對比Sunny Cove只提升大約6%。
下一代桌面級的Rocket Lake據(jù)說也會是同樣的架構,只不過工藝延續(xù)14nm。
再往后的新架構是Golden Cove,將應用于10nm++ Alder Lake,IPC相比于Skylake提升50%,相比于Willow Cove則提升大約20%。
傳聞稱,Alder Lake將會采用大小核配置,8+8的規(guī)格可媲美AMD 16核心32線程的銳龍9 3950__,不過到那個時候,Zen 4都快出來了。
Intel官方公布的架構路線圖到此為止,而根據(jù)傳聞,Golden Cove的繼任者代號為“Ocean Cove”,IPC性能相比于Skylake提升幅度達80%,不過對比它之前的Golden Cove提升幅度還是20%。
CPU 緩存是什么?
不同存儲技術的訪問時間差異很大,從 計算機層次結構 可知,通常情況下,從高層往底層走,存儲設備變得更慢、更便宜同時體積也會更大,CPU 和內存之間的速度存在著巨大的差異,此時就會想到計算機科學界中一句著名的話:計算機科學的任何一個問題,都可以通過增加一個中間層來解決。
二.引入緩存層為了解決速度不匹配問題,可以通過引入一個緩存中間層來解決問題,但是也會引入一些新的問題。現(xiàn)代計算機系統(tǒng)中,從硬件到操作系統(tǒng)、再到一些應用程序,絕大部分的設計都用到了著名的局部性原理,局部性通常有如下兩種不同的形式:
時間局部性:在一個具有良好的時間局部性的程序當中,被引用過一次的內存位置,在將來一個不久的時間內很可能會被再次引用到。
空間局部性:在一個具有良好的空間局部性的程序當中,一個內存位置被引用了一次,那么在不久的時間內很可能會引用附近的位置。
有上面這個局部性原理為理論指導,為了解決二者速度不匹配問題就可以在 CPU 和內存之間加一個緩存層,于是就有了如下的結構:
三.何時更新緩存在 CPU 中引入緩存中間層后,雖然可以解決和內存速度不一致的問題,但是同時也面臨著一個問題:當 CPU 更新了其緩存中的數(shù)據(jù)之后,要什么時候去寫入到內存中呢?比較容易想到的一個解決方案就是,CPU 更新了緩存的數(shù)據(jù)之后就立即更新到內存中,也就是說當 CPU 更新了緩存的數(shù)據(jù)之后就會從上到下更新,直到內存為止,英文稱之為write through,這種方式的優(yōu)點是比較簡單,但是缺點也很明顯,由于每次都需要訪問內存,所以速度會比較慢。還有一種方法就是,當 CPU 更新了緩存之后并不馬上更新到內存中去,在適當?shù)臅r候再執(zhí)行寫入內存的操作,因為有很多的緩存只是存儲一些中間結果,沒必要每次都更新到內存中去,英文稱之為write back,這種方式的優(yōu)點是 CPU 執(zhí)行更新的效率比較高,缺點就是實現(xiàn)起來會比較復雜。
上面說的在適當?shù)臅r候寫入內存,如果是單核 CPU 的話,可以在緩存要被新進入的數(shù)據(jù)取代時,才更新內存,但是在多核 CPU 的情況下就比較復雜了,由于 CPU 的運算速度超越了 1 級緩存的數(shù)據(jù) I\O 能力,CPU 廠商又引入了多級的緩存結構,比如常見的 L1、L2、L3 三級緩存結構,L1 和 L2 為 CPU 核心獨有,L3 為 CPU 共享緩存。
如果現(xiàn)在分別有兩個線程運行在兩個不同的核 Core 1 和 Core 2 上,內存中 i 的值為 1,這兩個分別運行在兩個不同核上的線程要對 i 進行加 1 操作,如果不加一些限制,兩個核心同時從內存中讀取 i 的值,然后進行加 1 操作后再分別寫入內存中,可能會出現(xiàn)相互覆蓋的情況,解決的方法相信大家都能想得到,第一種是只要有一個核心修改了緩存的數(shù)據(jù)之后,就立即把內存和其它核心更新。第二種是當一個核心修改了緩存的數(shù)據(jù)之后,就把其它同樣復制了該數(shù)據(jù)的 CPU 核心失效掉這些數(shù)據(jù),等到合適的時機再更新,通常是下一次讀取該緩存的時候發(fā)現(xiàn)已經無效,才從內存中加載最新的值。
四.緩存一致性協(xié)議不難看出第一種需要頻繁訪問內存更新數(shù)據(jù),執(zhí)行效率比較低,而第二種會把更新數(shù)據(jù)推遲到最后一刻才會更新,讀取內存,效率高(類似于懶加載)。緩存一致性協(xié)議(MESI) 就是使用第二種方案,該協(xié)議主要是保證緩存內部數(shù)據(jù)的一致,不讓系統(tǒng)數(shù)據(jù)混亂。MESI 是指 4 種狀態(tài)的首字母。每個緩存存儲數(shù)據(jù)單元(Cache line)有 4 種不同的狀態(tài),用 2 個 bit 表示,狀態(tài)和對應的描述如下:
下面看看基于緩存一致性協(xié)議是如何進行讀取和寫入操作的, 假設現(xiàn)在有一個雙核的 CPU,為了描述方便,簡化一下只看其邏輯結構:
單核讀取步驟:Core 0 發(fā)出一條從內存中讀取 a 的指令,從內存通過 BUS 讀取 a 到 Core 0的緩存中,因為此時數(shù)據(jù)只在 Core 0 的緩存中,所以將 Cache line 修改為 E 狀態(tài)(獨享),該過程用示意圖表示如下:
雙核讀取步驟:首先 Core 0 發(fā)出一條從內存中讀取 a 的指令,從內存通過 BUS 讀取 a 到 Core 0 的緩存中,然后將 Cache line 置為 E 狀態(tài),此時 Core 1 發(fā)出一條指令,也是要從內存中讀取 a,當 Core 1 試圖從內存讀取 a 的時候, Core 0 檢測到了發(fā)生地址沖突(其它緩存讀主存中該緩存行的操作),然后 Core 0 對相關數(shù)據(jù)做出響應,a 存儲于這兩個核心 Core 0 和 Core 1 的緩存行中,然后設置其狀態(tài)為 S 狀態(tài)(共享),:
假設此時 Core 0 核心需要對 a 進行修改了,首先 Core 0 會將其緩存的 a 設置為 M(修改)狀態(tài),然后通知其它緩存了 a 的其它核 CPU(比如這里的 Core 1)將內部緩存的 a 的狀態(tài)置為 I(無效)狀態(tài),最后才對 a 進行賦值操作。該過程如下所示:
細心的朋友們可能已經注意到了,上圖中內存中 a 的值(值為 1)并不等于 Core 0 核心中緩存的最新值(值為 2),那么要什么時候才會把該值更新到內存中去呢?就是當 Core 1 需要讀取 a 的值的時候,此時會通知 Core 0 將 a 的修改后的最新值同步到內存(Memory)中去,在這個同步的過程中 Core 0 中緩存的 a 的狀態(tài)會置為 E(獨享)狀態(tài),同步完成后將 Core 0和 Core 1 中緩存的 a 置為 S(共享)狀態(tài),示意圖描述該過程如下所示:
至此,變量 a 在 CPU 的兩個核 Core 0 和 Core 1 中回到了 S(共享)狀態(tài)了,以上只是簡單的描述了一下大概的過程,實際上這些都是在 CPU 的硬件層面上去保證的,而且操作比較復雜。
五.總結現(xiàn)在很多一些實現(xiàn)緩存功能的應用程序都是基于這些思想設計的,緩存把數(shù)據(jù)庫中的數(shù)據(jù)進行緩存到速度更快的內存中,可以加快我們應用程序的響應速度,比如我們使用常見的 Redis 數(shù)據(jù)庫可能是采用下面這些策略:
① 首先應用程序從緩存中查詢數(shù)據(jù),如果有就直接使用該數(shù)據(jù)進行相應操作后返回,如果沒有則查詢數(shù)據(jù)庫,更新緩存并且返回。
② 當我們需要更新數(shù)據(jù)時,先更新數(shù)據(jù)庫,然后再讓緩存失效,這樣下次就會先查詢數(shù)據(jù)庫再回填到緩存中去,可以發(fā)現(xiàn),實際上底層的一些思想都是相通的,不同的只是對于特定的場景可能需要增加一些額外的約束?;A知識才是技術這顆大樹的根,我們先把根栽好了,剩下的那些枝和葉都是比較容易得到的東西了。
有問有答:為什么CPU有緩存?
隨機存儲器主要有兩種,靜態(tài)隨機存儲器SRAM和動態(tài)隨機存儲器DRAM。SRAM無需刷新,速度快,但密度小,造價高昂。DRAM需要不斷通電刷新,速度比較慢,但制造成本更低,容量更大。內存最開始有過SRAM的時期,隨后就被更廉價的DRAM取代。一開始DRAM的速度還能跟得上CPU,比如CPU的頻率在2MHz時內存的頻率可以達到4MHz。而從上世紀80年代開始,CPU的速度很快就遠遠甩開的內存,差距逐漸達到數(shù)個數(shù)量級。
CPU與DRAM的速度差距越來越大。
這時候SRAM來救場了,它的速度仍能跟得上CPU,因此人們開始將其內置到CPU中,CPU緩存也因此誕生。最早有記錄使用緩存的系統(tǒng)是通用電氣的645和IBM360/67,它們配備了TLB轉換檢測緩沖區(qū),用于加快內存尋址,而最早有記錄搭載了數(shù)據(jù)緩存的系統(tǒng)是IBM System/360 Model 85。我們比較熟悉的摩托羅拉68k系列處理器中,發(fā)布于1984年的68020是第一款真正搭載了緩存的68k CPU,擁有256字節(jié)的指令緩存。
現(xiàn)在的CPU大都有一套多層緩存系統(tǒng),將緩存分為L1、L2、L3等,有的還有L4。當L1發(fā)生緩存命中失敗后,CPU會嘗試去L2中讀取,如果又失敗,則繼續(xù)向下一層緩存尋找。數(shù)字越小,緩存的速度越快,但成本也越高,因此容量一般更小。緩存并不是越大越好,雖然更大的緩存雖然能存儲更多的數(shù)據(jù)和指令,但每一次尋址需要花費更多的周期,可能最終得不償失。緩存的設計需要平衡時間、空間和制造成本,是CPU架構設計中的一個重要環(huán)節(jié)。
CPU緩存用處意義解釋相關文章:
★ 計算機類實習報告
CPU緩存用處意義解釋
上一篇:CPU緩存冷門知識講解
下一篇:CPU緩存作用知識科普