加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • Cache的工作原理
    • Cache設計如何影響性能
    • 未來的創(chuàng)新
    • 緩存的發(fā)展
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

L1和L2 CPU Cache為何如此重要?

2021/09/24
2561
閱讀需 15 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

Cache(高速緩存)的發(fā)展是計算歷史上最重要的事件之一。幾乎所有的現(xiàn)代CPU內(nèi)核,從ARM Cortex-A5這樣的超低功耗芯片到最高端的Intel Core i9都使用cache。即使是更高端的微控制器也經(jīng)常有小型cache,或作為選項提供,即使是在超低功耗設計中,其性能優(yōu)勢也實在是不容忽視。

緩存的發(fā)明是為了解決一個重要問題。在計算機發(fā)展的早期幾十年里,主存非常慢,而且非常昂貴,但CPU也不是特別快。從20世紀80年代開始,這一差距開始迅速擴大。微處理器的時鐘速度突飛猛進,但內(nèi)存訪問時間卻沒有明顯改善。隨著這一差距的擴大,越來越明顯的是,需要一種新型的快速存儲來彌補這一差距。

 

雖然只到2000年,但20世紀80年代開始差異越來越大,導致了第一批CPU cache開發(fā)出來。

Cache的工作原理

CPU cache是小型內(nèi)存池,用于存儲CPU下一步最可能需要的信息。哪些信息加載到cache取決于復雜的算法和對編程代碼的某些假設。Cache系統(tǒng)的目標是確保CPU在尋找下一位數(shù)據(jù)時,已經(jīng)將其加載到cache(也稱為‘cache hit’)。

另一方面,cache miss意味著CPU不得不去別處尋找數(shù)據(jù)。這就是L2 cache發(fā)揮作用的地方,雖然它比較慢,但卻更大。有些處理器使用inclusive cache設計(意味著存儲在L1 cache中的數(shù)據(jù)也會復制到L2 cache中),而其他處理器則是exclusive的(意味著這兩個cache從不共享數(shù)據(jù))。如果在L2 cache中找不到數(shù)據(jù),CPU就會繼續(xù)往下找L3(通常仍在芯片上),然后是L4(如果存在)和主內(nèi)存(DRAM)。

這張圖顯示了一個hit rate恒定的L1 cache與一個更大的L2 cache之間的關系。請注意,總hit rate隨著L2大小的增加而急劇上升。一個更大、更慢、更便宜的L2可以提供大型L1的所有優(yōu)勢,但沒有芯片尺寸和功耗的影響。大多數(shù)現(xiàn)代L1 cache的hit rate都遠遠高于這里顯示的理論上的50%,Intel和AMD的cache hit rate通常都在95%或更高。

下一個重要的點是set-associativity。每個CPU都包含一種特定類型的RAM,稱為tag RAM。Tag RAM是所有可以映射到任何給定cache塊的內(nèi)存位置的記錄。如果一個cache是完全關聯(lián)的,這意味著任何RAM數(shù)據(jù)塊都可以存儲在任何一塊cache中。這種系統(tǒng)的優(yōu)點是hit rate高,但搜索時間非常長,CPU必須在搜索主存之前查看整個cache以確定數(shù)據(jù)是否存在。

當然,還有直接映射的cache。直接映射的cache是指每個cache塊可以包含一個且只有一個主存塊。這種類型的cache可以被快速搜索,但是由于它是1:1映射到內(nèi)存位置,因此hit rate很低。介于這兩個極端之間的是n-way associative cache。2-way associative cache(Piledriver的L1是2-way)意味著每個主內(nèi)存塊可以映射到兩個cache塊中的一個。8-way意味著每個主內(nèi)存塊可以映射到8個cache塊中的一個。Ryzen的L1指令cache是4-way associative,而L1數(shù)據(jù)cache是8-way set associative。

接下來的兩圖片顯示了hit rate是如何隨著set-associativity而提高的。請記住,像hit rate這樣的東西是非常特殊的,不同的應用會有不同的hit rate。

為什么CPU的cache越來越大?那么,為什么首先要不斷增加更大的cache呢?因為每個額外的內(nèi)存池都會推遲訪問主內(nèi)存的需求,并且在特定情況下可以提高性能。

這張來自Anandtech的Haswell評論的圖表很有用,因為它說明了增加一個巨大的(128MB)L4 cache以及傳統(tǒng)的L1/L2/L3結構對性能的影響。每個階梯代表一個新的cache級別。紅線是帶有L4的芯片。請注意,對于大文件,它的速度仍然幾乎是其他兩個Intel芯片的兩倍。

那么,將大量的片上資源用于cache似乎是合乎邏輯的。但事實證明,這樣做的邊際收益是遞減的。較大的cache既慢又貴。在每一位SRAM(6T)有六個晶體管,cache也很昂貴(就芯片尺寸而言,也就代表著成本)。過了某一點,把芯片的功率預算和晶體管數(shù)量花在更多的執(zhí)行單元、更好的分支預測或額外的內(nèi)核上會更有意義。下圖是Pentium M(Centrino/Dothan)芯片,整個芯片的左側被用于一個巨大的L2 Cache。在過去單線程CPU的時代就是這樣,現(xiàn)在我們有了多核芯片和GPU,在很多情況下,整個CPU中用于cache的比例較小。

Cache設計如何影響性能

增加CPU cache對性能的影響與其效率或hit rate直接相關;反復的cache miss會對CPU性能產(chǎn)生災難性的影響。下面的例子雖然被大大簡化了,但應該可以說明這個問題。

想象一下,CPU必須連續(xù)100次從L1 cache加載數(shù)據(jù)。L1 cache的訪問延遲為1ns,hit rate為100%。因此,CPU需要100ns的時間來執(zhí)行這個操作。

現(xiàn)在,假設cache有99%的hit rate,但CPU第100次訪問實際需要的數(shù)據(jù)卻在L2中,有10-cycle(10ns)的訪問延遲。這意味著CPU需要花99ns的時間來執(zhí)行前99次讀取,10ns的時間來執(zhí)行第100次。Hit rate降低1%,卻讓CPU的速度降低了10%。

在現(xiàn)實世界中,L1 cache的hit rate通常在95%到97%之間,但在我們的簡單例子中,這兩個值對性能的影響不是2%,而是14%。請記住,我們假設丟失的數(shù)據(jù)總是在L2 cache中。如果數(shù)據(jù)已經(jīng)從cache中被驅逐位于主內(nèi)存中,訪問延遲為80-120ns,那么95%和97%的hit rate之間的性能差異可能會使執(zhí)行代碼所需的總時間翻倍。

這張die shot,芯片中間的重復結構是20MB的共享L3 cache。

早在人們對AMD的Bulldozer系列與Intel的處理器進行比較時,cache設計和性能影響的話題就出現(xiàn)了很多。目前還不清楚Bulldozer低迷的性能有多少可以歸咎于其cache子系統(tǒng),除了有相對較高的延遲外,Bulldozer系列還受到大量cache爭用的影響。如下圖所示,每個Bulldozer/Piledriver/Streamroller模塊共享其L1指令cache。

當兩個不同的線程在同一內(nèi)存空間中寫入和覆蓋數(shù)據(jù)時,cache會發(fā)生爭用現(xiàn)象。這損害了兩個線程的性能,每個核都被迫花時間把自己的首選數(shù)據(jù)寫進L1,而另一個核卻迅速覆蓋了這些信息。即使AMD將L1代碼cache增加到96KB,并使其成為3-way associative,AMD的舊版Steamroller仍然被這個問題所困擾。后來的Ryzen CPU沒有以這種方式共享cache,這個問題也就沒再發(fā)生。

這張圖顯示了Opteron 6276(原Bulldozer處理器)的hit rate在兩個核都處于活動狀態(tài)時是如何下降的,至少在一些測試中是這樣。然而,很明顯,cache的爭用并不是唯一的問題,即使在兩個處理器的hit rate相同的情況下,6276在歷史上也很難超過6174的表現(xiàn)。

今天,Zen 2沒有這類弱點,Zen和Zen 2的整體cache和內(nèi)存性能比老的Piledriver架構好很多。

AMD最初的Ryzen首秀。Ryzen使用的cache系統(tǒng)與以前的AMD CPU非常不同。

現(xiàn)代CPU通常也有一個非常小的L0 cache,通常只有幾KB大小,用于存儲微操作。AMD和Intel都使用這種cache;Zen有一個2,048μOP的cache,而Zen 2有一個4,096μOP的cache。這些微小的cache pool的運作原理與L1和L2相同,但代表一個更小的內(nèi)存池,CPU可以以比L1更低的延遲訪問。通常情況下,公司會對這些能力進行相互調(diào)整。Zen 1和Zen+(Ryzen 1xxx、2xxx、3xxx APU)有一個64KB的L1指令cache,是4-way set associative的,還有一個2,048μOP L0 cache。Zen 2(Ryzen 3xxx desktop CPU,Ryzen Mobile 4xxx)有一個32KB的L1指令cache,是8-way set associative的,有一個4,096µOP的cache。將set associativity和µOP cache的大小增加一倍,使AMD能夠將L1 cache的大小減少一半。這類權衡在CPU設計中很常見。

未來的創(chuàng)新

最近,IBM推出了Telum微處理器,cache結構很有趣且不尋常。Telum有一般的L1和L2,但CPU沒有物理L3,而是部署了一個虛擬L3。下一代CPU不是完全驅逐CPU認為不再需要的L2數(shù)據(jù),而是將其驅逐到同一硅片上不同CPU的L2 cache中,并將其標記為L3數(shù)據(jù)。每個核都有自己的32MB L2,整個芯片的虛擬L3是256MB。IBM甚至可以在多芯片系統(tǒng)中共享這種能力,創(chuàng)建一個虛擬的L4,總共有8192MB的數(shù)據(jù)存儲

這種類型的虛擬cache系統(tǒng)是獨一無二的,它在x86方面沒有可對應,它是一個有趣的例子,說明是如何推動cache設計的極限。雖然AMD的V-Cache提供額外的L3,而不是L2,但我們完全沒有必要提及它。AMD 最近的成就以及有望在未來 Zen CPU 上出現(xiàn)的功能是大型 L3 cache,垂直安裝在現(xiàn)有小芯片頂部,并通過芯片內(nèi)硅通孔連接到它們。Cache在這一點上可能已經(jīng)有40年的歷史了,但是制造商和設計師仍然在尋找方法來改進并擴大其實用性的方法。

緩存的發(fā)展

隨著研究人員不斷去尋找從較小的cache中擠出更高性能的方法,cache的結構和設計仍在進行微調(diào)。到目前為止,Intel和AMD還沒有大力推動更大的cache,也沒有把設計一直擴展到L4。有一些Intel的CPU帶有板載EDRAM,相當于一個L4 cache,但這種方法并不常見。這就是為什么我們在上面使用Haswell的例子,盡管該CPU比較老。據(jù)推測,對于大多數(shù)使用情況來說,大型L4 cache的優(yōu)勢性價比并不高。

不管怎么說,cache設計、功耗和性能對未來處理器的性能至關重要,任何一家公司如果可以在當前設計的基礎上取得實質性改進都會獲得非常大的優(yōu)勢。

[參考文章]

How L1 and L2 Caches Work, and Why They're an Essential Part of Modern Chips — Joel Hruska

相關推薦

電子產(chǎn)業(yè)圖譜

C.A.S.E.及大出行領域學習及知識分享。歡迎業(yè)內(nèi)朋友交流~!