L1、L2、L3 快取到底位於電腦的什麼位置?
我知道,我們使用高速緩存透過從高速緩存而不是主記憶體中選取資料和指令來提高效能。
以下是我的問題
- L1 Cache 到底位於哪裡? 。是在CPU晶片上嗎?
L2 快取到底位於哪裡?
L3 快取到底位於哪裡?是在主機板上嗎?
我認為最新的 SMP 處理器使用 3 級緩存,因此我想了解快取層級層次結構及其體系結構。
答案1
讓我們從這個開始:
我認為最新的 SMP 處理器使用 3 級緩存,因此我想了解快取層級層次結構及其體系結構。
要了解緩存,您需要了解一些事情:
CPU有暫存器。其中的值可以直接使用。沒有什麼比這更快了。
然而我們不能為晶片添加無限的寄存器。這些東西佔空間。如果我們把晶片做得更大,它就會變得更貴。部分原因是我們需要更大的晶片(更多的矽),但也因為有問題的晶片數量增加。
(想像 500 cm 2的假想晶圓。我從中切下了 10 個晶片,每個晶片大小為 50cm 2。其中一個壞了。我丟棄了它,留下了9 個工作晶片。現在拿同一個晶圓,我切了100 個晶片,如果損壞了,我會丟棄其中的 99 個可用晶片,以彌補更大的損失。
這就是我們需要小型、價格實惠的晶片的原因之一。
然而,快取距離 CPU 越近,存取速度就越快。
這也很容易解釋;電訊號以接近光速的速度傳播。這很快,但仍然是有限的速度。現代 CPU 使用 GHz 時脈。那也很快。如果我採用 4 GHz CPU,則每個時脈週期電訊號可以傳播約 7.5 公分。即直線長 7.5 公分。 (晶片絕不是直接連接)。實際上,您需要的距離遠小於 7.5 厘米,因為這樣晶片就沒有時間呈現所請求的數據,也沒有時間讓訊號傳回。
最重要的是,我們希望緩存在物理上盡可能接近。這意味著大晶片。
這兩者需要平衡(性能與成本)。
L1、L2 和 L3 快取到底位於電腦中的什麼位置?
假設 PC 風格的硬體(大型主機有很大不同,包括效能與成本平衡);
IBMXT
原來4.77Mhz的一個:無緩存。 CPU直接存取記憶體。從記憶體中讀取將遵循以下模式:
- CPU將它想要讀取的位址放在記憶體匯流排上並置位讀取標誌
- 記憶體將資料放在資料總線上。
- CPU 將資料從資料匯流排複製到其內部暫存器。
80286 (1982)
仍然沒有快取。對於較低速度版本(6Mhz)來說,記憶體存取並不是一個大問題,但更快的型號運行到 20Mhz,並且在存取記憶體時經常需要延遲。
然後你會得到這樣的場景:
- CPU將它想要讀取的位址放在記憶體匯流排上並置位讀取標誌
- 記憶體開始將資料放到資料匯流排上。 CPU 等待。
- 記憶體已完成獲取數據,現在已穩定在數據總線上。
- CPU 將資料從資料匯流排複製到其內部暫存器。
這是等待記憶體所花費的額外步驟。在現代系統上,可以輕鬆完成 12 個步驟,這就是我們擁有快取的原因。
80386:(1985)
CPU 變得更快。既可以按下時鐘運行,也可以以更高的時脈速度運行。
RAM 變得更快,但不如 CPU 快很多。
因此需要更多的等待狀態。一些主機板透過在主機板上添加快取(即一級快取)來解決此問題。
現在,從記憶體中讀取資料時首先檢查資料是否已在快取中。如果是,則從更快的快取中讀取。如果與 80286 所描述的過程不同
80486:(1989)
這是這一代中第一個在 CPU 上有一些快取的 CPU。
它是一個 8KB 統一緩存,這意味著它用於資料和指令。
大約在這個時候,在主機板上放置 256KB 的快速靜態記憶體作為二級快取變得很普遍。因此一級緩存在CPU上,二級緩存在主機板上。
80586 (1993)
586 或 Pentium-1 使用一級快取。數據和指令各 8 KB。高速緩存被分割,以便資料和指令快取可以針對其特定用途進行單獨調整。CPU 附近仍然有一個小但速度非常快的第一高速緩存,主機板上還有一個更大但速度較慢的第二高速緩存。 (在較大的物理距離處)。
在同一 Pentium 1 區域,Intel 生產了奔騰Pro('80686')。根據型號,該晶片具有 256Kb、512KB 或 1MB 板載快取。它也貴得多,這很容易用下圖來解釋。
請注意,晶片中一半的空間被緩存使用。這是針對 256KB 型號的。更多快取在技術上是可行的,某些型號在生產時具有 512KB 和 1MB 快取。這些產品的市場價格很高。
另請注意,該晶片包含兩個晶片。一個具有實際的 CPU 和第一個緩存,第二個晶片具有 256KB 第二緩存。
奔騰2
奔騰 2 是奔騰 Pro 核心。出於經濟原因,CPU 中沒有第二個快取。相反,我們出售的 CPU 是帶有單獨的 CPU 晶片(以及第一個高速緩存)和第二個高速緩存的PCB 。
隨著技術的進步,我們開始用更小的元件製造晶片,在經濟上可以將第二個快取放回實際的 CPU 晶片中。但仍存在分歧。非常快的第一個快取緊貼 CPU。每個 CPU 核心有一個第一個緩存,核心旁邊有一個更大但速度較慢的第二個緩存。
奔騰3
奔騰4
對於 pentium-3 或 pentium-4,這一點不會改變。
大約在這個時候,我們已經達到了 CPU 時脈速度的實際極限。 8086 或 80286 不需要冷卻。運行在 3.0GHz 的 pentium-4 會產生如此多的熱量並消耗如此多的功率,因此在主機板上放置兩個獨立的 CPU 而不是一個快速的 CPU 變得更加實用。
(兩個 2.0 GHz CPU 比單一相同的 3.0 GHz CPU 使用更少的功率,但可以完成更多工作)。
這可以透過三種方式解決:
- 提高 CPU 的效率,以便它們以相同的速度完成更多的工作。
- 使用多個CPU
- 在同一個「晶片」中使用多個 CPU。
1) 是一個持續的過程。這並不新鮮,也不會停止。
2) 很早就完成了(例如使用雙 Pentium-1 主機板和 NX 晶片組)。到目前為止,這是建立更快 PC 的唯一選擇。
3) 需要將多個「CPU 核心」建置到單一晶片中的 CPU。 (然後我們將該 CPU 稱為雙核心 CPU,以增加混亂。謝謝行銷:))
如今,為了避免混淆,我們將 CPU 稱為「核心」。
現在您可以使用諸如 pentium-D(雙核心)之類的晶片,它基本上是同一晶片上的兩個 pentium-4 核心。
還記得舊的 pentium-Pro 的圖片嗎?擁有巨大的快取大小?
請參閱二這張圖有大面積的區域嗎?
事實證明,我們可以在兩個 CPU 核心之間共享第二個快取。速度會略有下降,但 512KiB 共享二級快取通常比添加兩個一半大小的獨立二級快取更快。
這對你的問題很重要。
這意味著,如果您從一個 CPU 核心讀取某些內容,然後嘗試從共享相同快取的另一個核心讀取該內容,您將獲得快取命中。不需要存取記憶體。
由於程序確實會在CPU 之間遷移,具體取決於負載、核心數量和調度程序,因此您可以透過將使用相同資料的程序固定到相同的CPU(L1 及更低等級的快取命中)或固定在使用相同資料的相同CPU 上來獲得額外的效能。
因此,在以後的型號上,您將看到共享的 2 級快取。
如果您正在為現代 CPU 編程,那麼您有兩個選擇:
- 不打擾。作業系統應該能夠安排事情。調度器對電腦的表現有很大的影響,人們花費了大量的精力來優化它。除非您做了一些奇怪的事情或正在針對特定型號的 PC 進行最佳化,否則最好使用預設調度程序。
- 如果您需要每一點效能,並且無法選擇更快的硬件,那麼請嘗試將存取相同資料的步驟保留在同一核心或可存取共用快取的核心上。
我意識到我還沒有提到 L3 緩存,但它們並沒有什麼不同。 L3 快取的工作原理相同。比 L2 大,比 L2 慢。它通常在核心之間共享。如果存在,則比 L2 快取大得多(否則沒有意義),並且通常與所有核心共用。
答案2
高速緩存是處理器的內部結構。有些是在核心之間共享的,有些是單獨的,取決於實作。但它們都位於晶片上。一些細節:Intel® 酷睿™ i7 處理器,拍攝這裡:
- 每個核心 32 KB 指令和 32 KB 資料一級快取 (L1)
- 每個核心 256 KB 共享指令/資料二級快取 (L2)
- 8 MB 共享指令/資料末級快取 (L3),在所有核心之間共享
處理器晶片的照片(抱歉,不知道確切的型號)。您可以看到快取在晶片上佔據了很大的面積:
答案3
高速緩存幾乎總是位於晶片上,以實現最快的存取速度。這是一個很好的圖表,顯示了四核心 Intel CPU 晶片,其中突出顯示了 L3 快取。當您查看像這樣的 CPU 晶片圖片時,您會發現大型統一區域通常是用作高速緩存的片上記憶體組。
答案4
我不確定 L3,但 L1/L2 始終位於 CPU 上。從層次結構來看,基本上,L1 通常是指令緩存,L2 和 L3 是資料緩存。