CPU緩存
編輯CPU 緩存是計算機中央處理器 (CPU) 用來降低從主內存訪問數據的平均成本(時間或能量)的硬件緩存。 高速緩存是更小、更快的內存,靠近處理器核心,它存儲來自頻繁使用的主內存位置的數據副本。 大多數 CPU 具有多個緩存級別(L1、L2,通常是 L3,很少甚至是 L4)的層次結構,在級別 1 具有不同的特定于指令和特定于數據的緩存。高速緩存通常使用靜態隨機存取存儲器實現( SRAM),在現代 CPU 中,芯片面積占xxx部分,但 SRAM 并不總是用于所有級別(I 緩存或 D 緩存),甚至任何級別,有時某些級別或所有級別都使用 動態隨機存取存儲器。
存在其他類型的緩存(不計入上述最重要緩存的緩存大小),例如轉換后備緩沖區 (TLB),它是大多數 CPU 所具有的內存管理單元 (MMU) 的一部分。
概覽
編輯當嘗試讀取或寫入主內存中的某個位置時,處理器會檢查來自該位置的數據是否已在高速緩存中。 如果是這樣,處理器將讀取或寫入緩存而不是慢得多的主內存。
許多現代臺式機、服務器和工業 CPU 至少具有三個獨立的緩存:
Instruction cache用于加速可執行指令的獲取;Data cache用于加速數據的獲取和存儲; 數據緩存通常組織為更多緩存級別(L1、L2 等;另請參閱下面的多級緩存)的層次結構。轉換后備緩沖區 (TLB) 用于加速兩個可執行文件的虛擬到物理地址轉換 指令和數據。 可以提供單個 TLB 來訪問指令和數據,或者可以提供單獨的指令 TLB (ITLB) 和數據 TLB (DTLB)。 但是,TLB 緩存是內存管理單元 (MMU) 的一部分,與 CPU 緩存沒有直接關系。
歷史
編輯CPU 存儲的早期示例包括 Atlas 2 和 1960 年代的 IBM System/360 Model 85。 xxx個使用緩存的 CPU 只有一級緩存; 與后來的 1 級緩存不同,它沒有拆分為 L1d(用于數據)和 L1i(用于指令)。 Split L1 cache 始于 1976 年的 IBM 801 CPU,在 80 年代后期成為主流,并于 1997 年以 ARMv5TE 進入嵌入式 CPU 市場。 2015 年,甚至低于美元的 SoC 也拆分了 L1 緩存。 它們也有 L2 緩存,對于更大的處理器,還有 L3 緩存。 L2 緩存通常不拆分,并充當已拆分的 L1 緩存的公共存儲庫。 多核處理器的每個內核都有一個專用的 L1 緩存,通常不在內核之間共享。 L2 緩存和更高級別的緩存可以在內核之間共享。 L4 高速緩存目前并不常見,通常位于(一種形式的)動態隨機存取存儲器 (DRAM) 上,而不是位于靜態隨機存取存儲器 (SRAM) 上,位于單獨的芯片或芯片上(例外情況下,eDRAM 是 用于各級緩存,低至 L1)。 L1 在歷史上也是如此,而更大的芯片允許集成它和通常所有緩存級別,最后一級可能除外。 每個額外的緩存級別往往更大并且優化不同。
緩存(如歷史上的 RAM)的大小通常為:2、4、8、16 等 KiB 的冪; 當達到 MiB 大小時(即對于更大的非 L1),模式很早就崩潰了,以允許更大的緩存而不被迫進入大小加倍的范例,例如 2008 年 4 月,具有 3 MiB L2 緩存的 Intel Core 2 Duo。但是對于 L1 大小來說,這仍然只計入少量 KiB,但是 2012 年的 IBM zEC12 是一個例外,為其獲得異常大的 96 KiB L1 數據緩存 時間,例如 IBM z13 具有 96 KiB L1 指令緩存(和 128 KiB L1 數據緩存),以及 2018 年基于英特爾 Ice Lake 的處理器,具有 48 KiB L1 數據緩存和 48 KiB L1 指令緩存。 2020 年,一些 Intel Atom CPU(最多 24 個內核)具有 4.5 MiB 和 15 MiB 的(倍數)緩存大小。
緩存條目
數據以固定大小的塊(稱為緩存行或緩存塊)在內存和緩存之間傳輸。 當緩存行從內存復制到緩存中時,會創建一個緩存條目。 緩存條目將包括復制的數據以及請求的內存位置(稱為標記)。
當處理器需要讀取或寫入內存中的某個位置時,它首先檢查緩存中的相應條目。 高速緩存檢查可能包含該地址的任何高速緩存行中請求的內存位置的內容。 如果處理器發現內存位置在高速緩存中,則發生了高速緩存命中。 但是,如果處理器在高速緩存中找不到內存位置,則發生了高速緩存未命中。 在緩存命中的情況下,處理器立即讀取或寫入緩存行中的數據。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195845/