記憶體階層

記憶體階層

在計算機體系結構中,記憶體階層根據回響時間將計算機存儲劃分為一個層次結構。 由於回響時間,複雜性和容量是相關的,所以這些級別也可以通過它們的性能和控制技術來區分。 記憶體階層影響計算機體系結構設計,算法預測以及涉及參考位置的較低級別編程結構的性能。

基本介紹

  • 中文名:記憶體階層
  • 外文名:Memory hierarchy
  • 領域:計算機技術
概述,原理,記憶體階層中技術的特點,舉例,

概述

由於硬體技術的限制,我們可以製造出容量很小但很快的存儲器,也可以製造出容量很大但很慢的存儲器,但不可能兩邊的好處都占著,不可能製造出訪問速度又快容量又大的存儲器。因此,現代計算機都把存儲器分成若干級,稱為記憶體階層(MemoryHierarchy),按照離CPU由近到遠的順序依次是CPU暫存器、Cache、記憶體、硬碟,越靠近CPU的存儲器容量越小但訪問速度越快。

原理

記憶體階層是在電腦架構下儲存系統階層的排列順序。每一層於下一層相比都擁有較高的速度和較低延遲性,以及較小的容量(也有少量例外,如AMD早期的DuronCPU)。
大部分現今的中央處理器的速度都非常的快。大部分程式工作量需要記憶體存取。由於快取的效率和記憶體傳輸位於階層中的不同等級,所以實際上會限制處理的速度,導致中央處理器花費大量的時間等待記憶體I/O完成工作。
AMD記憶體階層AMD記憶體階層
設計高性能需要考慮存儲器層次的限制,即每個組件的大小和能力。可以將各個組件中的每一個都視為存儲器層次(m1,m2,...,mn)的一部分,其中每個成員mi通常比分層結構的下一個最高成員mi+1更小且更快。為了限制高等級的等待,較低的等級將通過填充一個緩衝區來回響,然後發信號通知激活傳輸。
大部分電腦中的記憶體階層如下:
  • 暫存器–可能是最快的存取,但僅僅只有幾百個位元組。
  • 第一級(L1)快取–通常存取只需要幾個周期,通常是幾十個KB。
  • 第二級(L2)快取–比L1約有2到10倍較高延遲性,通常是幾百個KB或更多。
  • 第三級(L3)快取–(不一定有)比L2更高的延遲性,通常有數MB之大。
  • 主記憶體DRAM)–存取需要幾百個周期,但可以大到數個GB。
  • 磁碟儲存–需要成千上百個周期,但是容量非常的大。

記憶體階層中技術的特點

1.增加複雜性會降低記憶體層次結構。
2.CMOx記憶體技術延伸了記憶體層級中的Flash空間。
3.提高系統性能的主要途徑之一是最小化存儲器層次結構向運算元據的方向。
4.延遲頻寬是與快取和快取相關的兩個度量。它們都不是統一的,而是特定於存儲器層次結構的特定組件。
5.預測記憶體層次結構中數據所在的位置是很困難的。
6.記憶體層次中的位置決定了預取發生所需的時間。

舉例

隨著時間的推移,存儲器層級中的級別數量以及每個級別的性能都有所提高。例如,大約在2013年的英特爾Haswell移動處理器的記憶體層次結構是:
處理器暫存器-最快的訪問(通常是1個CPU周期),幾千位元組的大小。
高速快取:
第0級(L0)微操作快取-大小為6KiB。
第1級(L1)指令快取-128KiB大小。
第1級(L1)數據快取-128KiB大小。最佳訪問速度約為700GiB/s。
第2級(L2)指令和數據(共享)-大小為1MiB。最佳訪問速度約為200GiB/s。
第3級(L3)共享快取-6MiB的大小。最佳訪問速度約為100GB/s。
第4級(L4)共享快取-128MiB大小。最佳訪問速度約為40GB/s。
主記憶體(主存儲)-千兆位元組。最佳訪問速度約為10GB/秒。對於NUMA機器,訪問時間可能不統一磁碟存儲(輔助存儲)-TB級大小。截至2017年,最佳訪問速度是從消費者固態硬碟大約是2000MB/秒。
近線存儲(第三級存儲)-最大可達EB級。截至2013年,最佳訪問速度約為160MB/秒。
離線存儲:
層次結構的較低級別(從磁碟向下)也稱為分層存儲。線上,近線和離線存儲之間的正式區別是:
1.線上存儲立即可用於I/O。
2.近線存儲不是立即可用的,但是可以在不需要人工干預的情況下快速線上存儲。
3.脫機存儲不是立即可用,需要一些人工干預才能在線上。
例如,永遠線上的磁碟處於在線上狀態,而旋轉空閒的磁碟(如空閒磁碟陣列(MAID))在近線處。可以自動載入的可移動介質(如磁帶盒)(如磁帶庫中)是近線的,而必須手動載入的盒式磁帶則處於脫機狀態。
大多數現代CPU速度如此之快,以至於對於大多數程式工作量來說,瓶頸是存儲器訪問的參考位置以及層次結構不同級別之間快取和記憶體傳輸的效率。因此,CPU花費大量時間閒置,等待記憶體I/O完成。這有時被稱為空間成本,因為較大的記憶體對象更可能溢出一個小/快的水平,並要求使用較大/較慢的水平。記憶體使用中產生的負載稱為壓力(分別為記錄壓力,快取壓力和(主)記憶壓力)。從較高級別丟失數據和從較低級別獲取數據的條件分別是:暫存器溢出(由於註冊壓力:註冊到快取),快取未命中(快取到主記憶體)和(硬)頁面錯誤(主記憶體到磁碟)。
現代程式語言主要採用兩級存儲器,主存儲器磁碟存儲器,儘管在彙編語言和內聯彙編器等語言(如C)中,暫存器可以直接訪問。要充分利用記憶體層次,需要程式設計師,硬體和編譯器的協作(以及作業系統的底層支持):
1.程式設計師負責通過檔案I/O在磁碟和記憶體之間移動數據。
2.硬體負責在記憶體和高速快取之間移動數據。
3.最佳化編譯器負責生成代碼,執行時會使硬體高效地使用快取和註冊。
許多程式設計師都假設一個記憶體級別。這工作正常,直到應用程式擊中性能牆。然後將在代碼重構期間評估記憶體階層。

相關詞條

熱門詞條

聯絡我們