Wikipedia article的overview graphics描述了Nehalem(第一個CPU標記爲「Core i7」),每個內核具有256 KB的L2高速緩存。
我不明白「銀行」這個詞在這裏的含義。 Nehalem的緩存與每個緩存行有64位(8字節)的8路結合。
這意味着,對於每次讀取/寫入高速緩存的訪問,都會傳輸8個字節的數據,這很好地對應於所有虛擬地址都有8個字節的64位架構。因此,每次必須從內存中檢索地址或將地址存儲在內存中時,必須傳輸8個字節,因此自然適合以這種方式在緩存中設計單個條目。 (其他高速緩存大小也是有意義的,具體取決於應用程序:如用於矢量處理單元的數據高速緩存的較大大小)。
x-way Associativity確定內存地址與該地址中的信息可以存儲在緩存內的位置的關係。術語「8路關聯性」是指存儲在某個存儲器地址的數據可以保存在8個不同的高速緩存行中。高速緩存有一個地址比較機制來選擇一種方式內的匹配條目,並且一些replacement strategy決定使用哪種x方式 - 可能排除先前的有效值。
您對「銀行」一詞的使用可能指的是這種8路關聯性的「集合」。因此,你的問題的答案可能是「8」。而且,每個核心都有一個L2緩存,每個都有這種結構。
您對同時訪問的假設也是有效的。這是documented e.g. for ARM's Cortax A15 但是,如果和如何可以獨立訪問這些緩存集或銀行是任何人的猜測。 Wikipedia圖表顯示了L1數據緩存和L2緩存之間的256位總線。這可能意味着可以獨立訪問4種方式(4 * 64 = 256,但更可能的是在任何給定時間只有一個內存加載/存儲實際上被傳送,較慢的L2緩存僅僅同時向4個緩存線提供可以稱爲突發的更快的L1緩存。
了這一假設的事實System Architecture Manual它可以在intel's page可以發現,章後來的Sandy Bridge的改進2.2.6名單,強調「兩個負載和一個商店每個週期的內部帶寬。」支持。因此,SandyBridge之前的CPU應該具有較小數量的併發加載/存儲。
請注意,「飛行中」加載/存儲和傳輸的實際數據存在差異。 「在飛行中」是那些正在執行的操作。在所有高速緩存報告未命中後,可能需要等待內存產生數據的負載。因此,您可以同時進行多個負載,但您仍然可以在任何兩個緩存之間的數據總線在任何給定時間只使用一次。上面的SandyBridge改進實際上將數據總線擴展到兩個負載,一個存儲實際上同時傳輸Nehalem(一個「tock」,或者Sandy Bridge之前的一個體繫結構)無法完成的數據。
你的直覺是不正確的部分帳戶:
- 超線程和多線程一般允許CPU執行每個週期多個語句。 (Nehalem,第2.2.5章:「每個內核提供兩個硬件線程 (邏輯處理器),利用4寬度執行引擎」,因此支持多個併發加載/存儲到L1高速緩存是有意義的。二級緩存既可以處理L1數據,也可以處理L1指令緩存 - 你在這一部分是正確的。(1)支持2個以上同時操作是有意義的。 L3緩存,但在實踐中這是沒有意義的,我不知道你從哪裏得到32號,也許只是一個猜測,對於任何額外的接入點(術語中的「銀行」),你必須有地址解碼器,標籤數組(用於處理與緩存行地址比較,替換策略以及任何緩存數據標誌(髒位等))。端口需要一些晶體管的開銷,因此需要硅片上的面積和功率。存在的每個端口也會降低緩存訪問速度,即使它未被使用。 (細節超出了這個答案的範圍)。所以這是一個微妙的設計決定,32通常是高的方法。通常用於任何類型的內存,數字範圍從1到6-8個讀取端口和1到2-4個寫入端口。當然可能有例外。
關於您關於軟件優化的觀點:擔心如果您是低級硬件/固件開發人員。否則,只需遵循高層次的想法:如果可以的話,保持最小的激烈操作循環以使其適合L3緩存。不要使用本地數據激烈計算的線程數多於核心數。如果您確實開始擔心這種速度問題,請開始使用匹配的cpu開關編譯/優化您的代碼,並控制機器上的其他任務(甚至是基礎設施服務)。
總結:
- Nehalem的L2高速緩存是8路相聯
- 它支持小於2同時負載和1個存儲操作,可能是唯一的一個。但是每個加載/存儲可以一次向/從L1數據緩存發送多達256位。
- 由於物理設計限制(時序/面積/功率),L3緩存同時加載/存儲操作的數量不會擴展到32個
- 您通常不應該在應用程序中擔心這些細節太多 - 除非你確實知道你必須(例如在高性能計算中)
來源
2013-03-04 14:05:38
cfi
Nehalem的緩存與每個緩存行(或緩存塊)有64個BYTES(而不是位)的8路關聯。緩存行包含若干單詞以利用[空間局部性](http://en.wikipedia.org/wiki/Locality_of_reference)(在引用地址後,很可能也會引用近地址) – chus