20世紀80年代,CPU性能有了顯著提升,但這受到板載內(nèi)存訪問速度緩慢增長的阻礙。隨著這種差異的惡化,工程師們發(fā)現(xiàn)了一種通過新的設(shè)計技術(shù)緩存來解決問題的方法。本文將幫助你進一步了解什么是緩存,它如何工作以及如何設(shè)計CPU緩存。
什么是CPU硬件緩存?
CPU硬件緩存是一個較小的內(nèi)存,位于離處理器較近的位置,用于存儲最近引用的數(shù)據(jù)或指令,以便在需要時可以快速檢索它們。通過減少訪問較慢主存儲器的昂貴的讀寫操作,緩存對CPU的性能產(chǎn)生巨大影響。實際上,所有現(xiàn)代處理器都采用某種形式的緩存。第一個緩存是片外或外部的。這些很快就被通常由SRAM制成的片上高速緩存存儲器取代。為了進一步提高性能,這些片上高速緩存分為指令和數(shù)據(jù)分區(qū)。圖1顯示了分區(qū)的示例。
圖1.Intel80486使用了通用緩存,而其后繼產(chǎn)品PentiumP5則使用了分區(qū)緩存(總線寬
緩存分區(qū)導(dǎo)致了多級緩存層次結(jié)構(gòu)的誕生,其中處理器核心將擁有自己的小型私有緩存(L1),其位于更大的共享緩存(L2)之上,其中一些處理器包括第三級緩存(L3),偶爾會有第四級緩存(L4)。
位置(又稱緩存如何工作?)
為什么緩存工作?緩存通過參考局部性原則工作。引用位置是指處理器在運行應(yīng)用程序時訪問相同內(nèi)存位置的趨勢。因為這些內(nèi)存訪問是可預(yù)測的,所以可以通過緩存來利用它們。局部性通常分為時間局部性和空間局部性兩個子集,有時又分為三個子集,稱為算法局部性。
時間位置
時間局部性是指在短時間內(nèi)重用特定數(shù)據(jù)項。這依賴于以下事實:在處理器上運行的程序往往在短時間內(nèi)使用相同的變量和數(shù)據(jù)結(jié)構(gòu)。從主內(nèi)存中提取一個項目并將其存儲在緩存中之后,對該數(shù)據(jù)的任何后續(xù)調(diào)用都可以更快地完成。
空間位置
空間位置是指很快將需要的數(shù)據(jù)項駐留在當前需要的項附近或相鄰的內(nèi)存位置的趨勢。這可能是程序員或編譯器在內(nèi)存中聚集項目的結(jié)果。例如,使用數(shù)組(一種數(shù)據(jù)結(jié)構(gòu))的應(yīng)用程序?qū)褦?shù)組的元素存儲在相鄰的存儲單元中。通過緩存當前正在使用的數(shù)據(jù)項旁邊的數(shù)據(jù)項,處理器可以在必要時快速訪問那些相鄰項。
算法局部性
一種不常討論的局域類型是算法局部性。算法局部性是應(yīng)用程序在相關(guān)數(shù)據(jù)項上執(zhí)行操作的趨勢,盡管不是在任何短時間段內(nèi),并且盡管事物在內(nèi)存中彼此不相鄰。使用鏈表(另一種數(shù)據(jù)結(jié)構(gòu))的應(yīng)用程序可能會出現(xiàn)此行為。這種類型的局部性可能出現(xiàn)在圖形處理或迭代模擬中。
邏輯緩存組織
緩存存儲和檢索數(shù)據(jù)的方式和位置取決于緩存的組織方式。這稱為緩存的邏輯組織。確定存儲的內(nèi)容由內(nèi)置于緩存中的管理啟發(fā)式控制,但它也受到邏輯組織的嚴重影響。因此,緩存的布局方式在其性能中起著巨大的作用。組織緩存有三種主要方法:全相聯(lián)緩存;直接映射高速緩存;組相聯(lián)緩存。
緩存塊
當CPU需要訪問主內(nèi)存中的項目時,它使用地址來查找該項目。CPU硬件緩存通常透明地工作,這意味著程序員不必以任何方式確認緩存。因此,用于訪問存儲器的地址首先由高速緩存處理。該地址用于標識數(shù)據(jù)項是否位于緩存中。
術(shù)語緩存命中表示在緩存中找到數(shù)據(jù)項,緩存未命中表示沒有找到。高速緩存被組織成稱為高速緩存塊的數(shù)據(jù)組。每個地址被劃分為若干個個位字段,以便可以識別正確的高速緩存塊。這些字段是緩存標記、組編號和字節(jié)偏移量。圖2顯示了分成緩存可以解釋的字段的地址。
圖2.尋址緩存塊
當一個CPU緩存被賦予一個地址時,它會將該地址分成必要的字段并開始檢查其緩存條目。緩存條目包括緩存標記(此處標記為標記)和緩存塊(標記數(shù)據(jù))。緩存標記是一個標識符,用于指示引用哪個緩存塊。緩存塊是存儲在該標記上的實際數(shù)據(jù),表示來自主內(nèi)存的一個項目塊。要獲取該塊中的單個字段,需要使用偏移量。
直接映射
在直接映射的高速緩存中,高速緩存項被組織成多個組。地址中的組編號用于索引每組條目。一旦識別出組,就比較緩存標簽。如果它們匹配,則這是緩存命中并輸出指定的數(shù)據(jù)。理解直接映射緩存的關(guān)鍵是每個組只有一個緩存條目。這使得直接映射緩存非???,同時消耗最少的功率。
圖3.Adirect-mapped緩存
由于每個集合只能包含一個項,因此直接映射的緩存確實具有更高的爭用率,這意味著需要將多個數(shù)據(jù)項存儲在同一位置。這導(dǎo)致緩存未命中。解決此問題的一種方法是使用完全關(guān)聯(lián)的緩存。
全相聯(lián)
全相聯(lián)緩存與直接映射緩存相反。全相聯(lián)緩存具有多個緩存項,而不是包含單個項的多個集合,而是包含在單個集合中。因此,設(shè)定的號碼不再提供任何信息,也不會使用。相反,當緩存處理內(nèi)存地址時,將檢查每個緩存條目的匹配標記。如果找到,則使用字節(jié)偏移量在高速緩存塊內(nèi)輸出正確的數(shù)據(jù)。檢查每個緩存條目使得全相聯(lián)的緩存比直接映射緩存消耗更多的功率。通過使用組關(guān)聯(lián)高速緩存來完成功耗和更高競爭率之間的平衡。
圖4.全相聯(lián)緩存
組相聯(lián)
組相聯(lián)緩存提供了兩全其美的優(yōu)勢。它由多個集合組成,每個集合具有多個緩存條目。它是如何工作的?首先,設(shè)置好允許緩存跳轉(zhuǎn)到適當?shù)臈l目集。接下來,搜索每組條目以尋找匹配的標簽。如果找到,則使用字節(jié)偏移量來輸出所請求的數(shù)據(jù)。此方法允許緩存提供功耗和爭用率的優(yōu)化平衡。
圖5顯示了一個4路組相聯(lián)緩存。它被稱為4路,因為每個集合最多可以包含四個緩存條目。如果每個集合只能容納兩個緩存條目,那么它將是一個雙向的。因此,直接映射高速緩存實際上只是單向組關(guān)聯(lián)高速緩存,而組相聯(lián)高速緩存是單組m路組相聯(lián)高速緩存,其中m是高速緩存條目的數(shù)量。
責(zé)任編輯人:CC
-
cpu
+關(guān)注
關(guān)注
68文章
11062瀏覽量
216454 -
緩存
+關(guān)注
關(guān)注
1文章
245瀏覽量
27096
發(fā)布評論請先 登錄
什么是CPU一級緩存/二級緩存?
CPU緩存是什么意思_CPU緩存有什么作用
各級別CPU緩存的工作原理

CPU緩存的作用及原理有哪些
cpu緩存的作用及原理是什么

CPU緩存那些事兒

評論