內存帶寬
此條目需要補充更多來源。 (2019年2月12日) |
內存帶寬是處理器可以從內存讀取數據或將數據存儲到內存的速率。內存帶寬通常以字節/秒為單位表示,但對於自然數據大小不是8位的倍數的系統,這可能會有所不同。
為給定內存或系統決定的內存帶寬通常是最大理論帶寬。實際中的內存帶寬將小於(並且不可能超過)所決定的帶寬。存在各種基準測試以使用各種訪問模式來測量持續內存帶寬。這些旨在提供對系統在各類實際應用程序上應支持的內存帶寬的深入了解。
測量慣例
在「字節/秒」定義的傳輸數據量中有三種不同的約定:
- bcopy約定:計算每單位時間從內存中的一個位置複製到另一個位置的數據量。例如,在1秒內將100萬字節從內存中的一個位置到另一個位置將被計為100萬字節/秒。bcopy約定是自洽的,但不容易擴展,以適用具有更複雜訪問模式的情況,例如三次讀取和一次寫入。
- STREAM約定:計算應用程序代碼顯式讀取的數據量和應用程序代碼顯式寫入的數據量之和。[1]以之前的100萬字節複製為例,STREAM帶寬將計為1秒內讀取的100萬字節加上寫入的1百萬字節,總計每秒200萬字節。STREAM約定與用戶代碼最直接相關,但可能無法統計硬件實際需要執行的所有數據流量。
- 硬件約定:計算硬件讀取或寫入的實際數據量,無論數據動作是否由用戶代碼明確請求。以相同的100萬字節複製為例,具有寫分配高速緩存策略的計算機系統上的硬件帶寬將會多出100萬字節的流量,因為硬件在執行存儲之前將目標從內存讀取到高速緩存中。這使得硬件實際傳輸總計每秒300萬字節。硬件約定與硬件直接相關,但可能不代表實現用戶代碼所需的最小數據流量。
- 例如,一些計算機系統能夠使用特殊指令避免寫入分配流量,從而可能導致基於所執行的不同數據流量的誤導。
帶寬計算和命名
命名方式因內存技術而異,但對於商用DDR SDRAM , DDR2 SDRAM和DDR3 SDRAM內存,總帶寬是以下值之乘積:
- 基本DRAM時鐘頻率
- 每時鐘的數據傳輸次數:在「雙倍數據速率」(DDR、DDR2、DDR3、DDR4)內存的情況下是兩次
- 內存總線(接口)帶寬:每個DDR、DDR2或DDR3內存接口都是64位。有時也被稱為1個「行」
- 接口數量 :現代PC通常使用兩個內存接口(雙通道模式)來實現有效的128位總線帶寬
例如,一個計算機有兩個通道的內存,每通道都配備運行在400MHz時鐘頻率的DDR2-800模塊,則其理論最大內存帶寬為:
- 每秒400,000,000個時鐘×每個時鐘2個通道×每行64個位×2個接口=
- 每秒102,400,000,000(1024億)比特(也就是12,800MB/s或12.8GB/s)
但是該理論最大內存帶寬被稱為「突發速率」,是不可持續的。
DDR,DDR2和DDR3模塊的命名約定指定了最大速度(例如,DDR2-800)或最大帶寬(例如,PC2-6400)。速度等級(800)不是最大時鐘速度,而是它的兩倍(1600,因為數據速率是加倍的)。帶寬等級(6400)是使用64位每秒傳輸的最大兆字節數。在雙通道模式中,這實際上是128位。因此,示例中的內存配置可以簡化為:兩個DDR2-800模塊以雙通道模式運行。
PC系統內存的常見配置是每個內存條都有兩側內存接口,但在較舊、低端或低功耗設備中,單通道內存也很常見。一些PC和大多數現代圖形卡還會使用兩個以上的內存接口(例如,Intel的LGA 2011平台和英偉達 GeForce GTX 980有四個內存接口)。並行運行多個接口的高性能顯卡可以獲得非常高的內存總線帶寬(例如,NVIDIA GeForce GTX TITAN的384位和AMD Radeon R9 290X的512位,分別使用了六個和八個64位接口)。
ECC位
在具有糾錯內存 (ECC)的系統中,接口的額外帶寬(通常為72而不是64位)不會被計入帶寬規範中,因為用於糾錯的位不能用於存儲用戶數據。 糾錯位會被認為是內存硬件自身的一部分,而不是存儲在該硬件中的信息。
參見
參考
BSS Random Access Benchmark Performance Evaluation and Optimization of Random Memory Access on Multicores with High Productivity at ACM/IEEE HiPC 2010 (頁面存檔備份,存於網際網路檔案館)