3.1 全局存儲帶寬與合並訪問 -- Global Memory(DRAM) bandwidth and memory coalesce


全局存儲帶寬(DRAM)

全局內存是動態隨機訪問的方式訪問內存.我們希望訪問DRAM的時候非常快,實際情況是DRAM中出來的數據非常非常慢,這就好比,理想狀態是泄洪,水傾巢而出,氣勢宏偉,實際取水卻像是用吸管在喝飲料,速度非常慢.

通常來看,我們會通過優化算法減少DRAM的訪問次數.

由上圖可以看出,用戶訪問需要的Address會被分成Row addr和Column address, 通過row decoder -> Core Array -> Sense Amps -> Column Latches ->到這里會非常寬,但是到-> Mux 會變得非常窄,然后通過off-chip data bus 給到處理器 .這就是DRAM bank的組織框架.

 

DRAM 中從core array中讀取一個cell是非常慢的,cell是指一個存儲單元.

 

• DDR: Core speed = 1⁄2 interface speed
• DDR2/GDDR3: Core speed = 1⁄4 interface
speed
• DDR3/GDDR4: Core speed = 1⁄8 interface
speed
• ... likely to be worse in the future 

隨着時間的推移,市場上DDR的容量越來越大,但是訪問速度卻是越來越慢.

為什么core array中讀取非常慢,如下圖: 

如下圖:

假設我們有1000個cells,在水平方向(因為是行嗎)是很長的,當訪問其中的一個cell,其實是訪問在訪問某一個bit,當為1時表示存在,0表示不存在.而這個bit是存儲在一個很小的電容里面,當想這個電容的晶體管里面充電,這個值是1,不充電則是0. 這個在縱向會連接到一個檢測放大器(sense amplifier),縱向線是一個非常緩慢的過程,記得這個即可.

DRAM Bursting

對於DDR{2,3}  cores 核心的頻率是接口頻率的1/N. 為了提高訪問的速度,DRAM中提供更多的端口數目(lanes),類似收費站提供很多的收費口來減輕擁堵問題一樣.雖然單一時間慢,但是同時執行的多,所以總的情況會變快.

DDR2/GDDR3: buffer的寬度是借口寬度的4倍

為了降低訪問的次數,當處理器訪問一段數據時,實際上傳遞給處理器的是圍繞這一段數據的一個更大的數據.這個就是dram burst 設計.所以一個時鍾周期訪問的數據,其實是把這個之后的幾個時鍾周期也訪問的數據一起取出來,如果CPU不需要這些多余的數據,其實就可以說是浪費了,所以為了充分利用DRAM的這個特性.

上面提到的增加更多的接口數目說的是DRAM bank.

例子:

nVidia GTX280 GPU的極限帶寬是141.7GB/s

DDR3的接口速度是1.1GHz,  core speed是276Mhz, 是接口速度的1/4.

對於一個64bit的接口,時鍾應該是2倍,因為在上升沿和下降沿都由數據傳輸.

64bit/8 = 8Bytes. 

8*2 *1.1 = 17.6GB/s 這個遠遠達不到141.7.

141.7/17.6 = 8 memory channels  . 這樣可以達到這個速度.

 

內存合並訪問

為了利用dram burst的特性,所以我們就有了合並內存訪問.通過合並內存訪問的次數提高訪問memory的效率.

GPU的存儲是row-major,是以行來組織數據的.

對於GPU來說,由於thread是異步執行的.下面這兩種訪問模式一種是合並訪問的,利用到DRAM,一種是非合並訪問:

 

B是合並訪問, A不是.B是以縱向的訪問方向,A是橫向的訪問方向.

 

所以總結一條規則是:
GPU縱向訪問內存可以實現合並訪問的效果.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM