本文將研究 CPU 緩存設計的原則,包括局部性、邏輯組織和啟發式管理。
1980 年代 CPU 性能有了顯著提高,盡管這受到板載內存訪問速度增長緩慢的阻礙。隨著這種差異的加劇,工程師們發現了一種通過新的設計技術——緩存來緩解這個問題的方法。
本文將幫助您了解更多關于緩存是什么、它是如何工作的以及如何設計 CPU 緩存的信息。
什么是 CPU 硬件緩存?
CPU 硬件緩存是一個較小的內存,位于更靠近處理器的位置,用于存儲最近引用的數據或指令,以便在需要時可以快速檢索它們。通過減少訪問速度較慢的主內存的代價高昂的讀取和寫入,緩存對 CPU 的性能產生了巨大的影響。幾乎所有現代處理器都采用某種形式的緩存。
第一個緩存在芯片外或外部。這些很快被通常由 SRAM 制成的片上高速緩存存儲器所取代。為了進一步提高性能,這些片上緩存被分成指令和數據分區。
圖 1 顯示了一個分區示例。
圖 1. Intel 80486 使用通用高速緩存,而其后繼 Pentium P5 具有分區高速緩存(總線寬度已省略)
高速緩存分區導致了多級高速緩存層次結構的誕生,其中處理器內核將擁有自己的小型私有高速緩存 (L1),位于較大的共享高速緩存 (L2) 之上,一些處理器包括第三級高速緩存 (L3) 和偶爾是第四個(L4)。
局部性(又名緩存如何工作?)
為什么緩存有效?緩存通過引用的局部性原則工作。引用位置是指處理器在運行應用程序時訪問相同內存位置的趨勢。因為這些內存訪問是可預測的,所以可以通過緩存來利用它們。
局部性通常分為兩個子集——時間局部性和空間局部性——有時還有第三個子集,稱為算法局部性。
時間局部性
時間局部性是指在短時間內重復使用特定數據項。這依賴于這樣一個事實,即在處理器上運行的程序傾向于在短時間內使用相同的變量和數據結構。在從主內存中獲取一個項目并將其存儲在緩存中之后,對該數據的任何后續調用都可以更快地完成。
空間局部性
空間局部性是指將很快需要的數據項駐留在現在需要的項附近或相鄰的內存位置中的趨勢。這可能是程序員或編譯器對內存中的項目進行聚類的結果。
例如,使用數組(一種數據結構)的應用程序會將數組的元素存儲在相鄰的內存位置。通過緩存當前正在使用的數據項旁邊的數據項,處理器可以在必要時快速訪問那些相鄰的項。
算法局部性
一種較少討論的局部性類型是算法局部性。算法局部性是應用程序對相關數據項執行操作的趨勢,盡管不是在任何短時間內,并且盡管這些項目在內存中并不彼此靠近。
使用鏈表(另一種類型的數據結構)的應用程序可能會出現這種行為。這種類型的局部性可能出現在圖形處理或迭代模擬中。
邏輯緩存組織
緩存存儲和檢索數據的方式和位置取決于緩存的組織方式。這稱為緩存的邏輯組織。確定存儲的內容由緩存中內置的管理啟發式方法控制,但它也受到邏輯組織的嚴重影響。因此,緩存的布局方式對其性能起著重要作用。
有三種主要的方式來組織緩存:
完全關聯
直接映射
設置關聯
緩存塊
當 CPU 需要訪問主存中的某個項目時,它會使用一個地址來定位該項目。CPU 硬件緩存通常透明地工作,這意味著程序員無需以任何方式確認緩存。因此,用于訪問內存的地址首先由緩存處理。該地址用于識別數據項是否位于緩存中。
術語“緩存命中”表示在緩存中找到了數據項,“緩存未命中”表示未在緩存中找到。
緩存被組織成稱為緩存塊的數據組。每個地址都被劃分為多個位域,以便可以識別正確的高速緩存塊。這些字段是緩存標記、集合編號和字節偏移量。圖 2 顯示了一個地址拆分為緩存可以解釋的字段。
圖 2. 尋址緩存塊
當給 CPU 緩存一個地址時,它會將這個地址分成必要的字段并開始檢查它的緩存條目。一個緩存條目由一個緩存標簽(這里是標簽標簽)和一個緩存塊(標簽數據)組成。
緩存標簽是一個標識符,它表示正在引用哪個緩存塊。
緩存塊是存儲在該標簽上的實際數據,代表主內存中的一個項目塊。為了獲取該塊中的單個單詞,使用了偏移量。
直接映射
在直接映射緩存中,緩存條目被組織成多個集合。地址中的集合編號用于索引每組條目。一旦識別出該集合,就比較緩存標簽。如果它們匹配,則這是緩存命中并輸出指定的數據。
理解直接映射緩存的關鍵是每個集合只有一個緩存條目。這使得直接映射緩存非常快,同時消耗最少的功率。
圖 3。直接映射緩存
由于每組只能包含一個條目,因此直接映射緩存確實具有更高的爭用率,這意味著多個數據項將希望存儲在同一位置。這會導致緩存未命中。解決此問題的一種方法是使用完全關聯的緩存。
完全關聯
全關聯緩存與直接映射緩存相反。與包含單個條目的多個集合不同,完全關聯緩存具有多個緩存條目,它們都包含在一個集合中。因此,集合編號不再提供任何信息并且不被使用。相反,當緩存處理內存地址時,會檢查每個緩存條目是否有匹配的標記。如果找到,則使用字節偏移量輸出緩存塊內的正確數據。
檢查每個緩存條目使得完全關聯緩存比直接映射緩存消耗更多的功率。通過使用一組關聯高速緩存來在功耗和更高的爭用率之間找到平衡點。
圖 4. 全關聯緩存
設置關聯
一組關聯緩存提供了兩全其美的優勢。它由多個集合組成,每個集合具有多個緩存條目。它是如何工作的?首先,集合編號允許緩存跳轉到適當的條目集合。接下來,在每組條目中搜索匹配的標簽。如果找到,則使用字節偏移量輸出請求的數據。這種方法允許緩存提供功耗和爭用率的優化平衡。
圖 5 顯示了一個 4 路組關聯緩存。之所以稱為 4-way,是因為每組最多可以包含四個緩存條目。如果每個集合只能保存兩個緩存條目,那么它將是 2-way。因此,直接映射緩存實際上只是一個單路組關聯緩存,而完全關聯緩存是一個單組多路組關聯緩存,其中 m 是緩存條目的數量。
圖 5. 設置關聯緩存
管理啟發式
一旦確定了緩存的邏輯組織,就需要確定一組管理啟發式方法。啟發式管理只是一組確定緩存如何執行其職責的規則。這些通常在位于緩存上方的緩存控制器中實現,并充當它與 CPU 之間的接口。緩存管理啟發式可以分為兩個不同的類別:內容管理和一致性管理。
內容管理
內容管理啟發式正是它們聽起來的樣子。它們是一組規則,用于確定緩存的時間和內容。這些啟發式方法識別已從內存請求的重要項目,并將這些項目復制到緩存中。內容啟發式的兩個示例是預取被認為重要或即將使用的數據項,以及決定在緩存集已滿或接近容量時替換哪些項目的替換策略。
一致性管理
一致性管理啟發式方法都是關于保持緩存與其他內存同步。這可能意味著主內存、層次結構中的其他緩存級別,甚至緩存本身。例如,緩存不應該在其緩存塊中包含相同數據的多個副本。此外,如果高速緩存和主存儲器具有應該是相同數據的不同副本,則應用程序可能會收到過時或陳舊的數據項。這在多核系統中尤其可能。因此,一致性管理啟發式可能會定期使用更新版本的緩存數據更新主內存。
CPU 硬件緩存基礎知識回顧
本文介紹了 CPU 硬件緩存的一些基本原理。CPU 緩存的工作原理是參考局部性,即處理器傾向于在短時間內或在相鄰的內存位置對內存進行可預測的讀取和寫入。討論的其他設計原則是如何在邏輯上組織緩存以及需要定義以管理該緩存的規則。幾乎所有 CPU 中都可以找到緩存,并且緩存設計技術已擴展到軟件緩存和基于 Web 的緩存,用于存儲瀏覽器數據或 Web 文檔。我希望這篇文章能幫助您更好地理解和欣賞這項重要的技術。
-
cpu
+關注
關注
68文章
10901瀏覽量
212720 -
緩存
+關注
關注
1文章
241瀏覽量
26729
發布評論請先 登錄
相關推薦
評論