詳解GPU的記憶體頻寬與CPU的不同
導讀 | 我們談到GPU相比CPU有更大的記憶體頻寬,此言不虛,這也是眾核GPU有源源不斷資料彈藥供給,能夠發揮強大算力的主要原因。 |
在先前的文章中我們談到GPU相比CPU有更大的記憶體頻寬,此言不虛,這也是眾核GPU有源源不斷資料彈藥供給,能夠發揮強大算力的主要原因。如下表所示(GDDR和HBM都是GPU的視訊記憶體規格),基本上GPU的記憶體頻寬要比CPU多一個數量級。
但是考慮到GPU運算核心的數量,平均下來視訊記憶體頻寬真的足夠富裕嗎?參考資料1的《Memory bandwidth》文章提供了很有趣的視角,我們在這裡介紹下。MOS 6502釋出於1975年,是微型計算機發展史上非常重要的一塊晶片。6502一般執行在1M時脈頻率,每個時鐘可以訪問1Byte記憶體資料,6502的一條指令需要花費3~5個時鐘,所以平均下來每條指令大概可以獲得4B記憶體資料。
與此相對照,Intel的Core i7-7700K是一款目前比較主流的桌面CPU,執行頻率4.2G,記憶體頻寬大概50GB/s。i7-7700K一共有4個處理核心,所以每個核心大概可以均攤到12.5GB/s的記憶體頻寬,也就是每個時鐘可以訪問約3B的記憶體資料。該CPU的IPC(Instruction Per Clock)為1,極優化的程式碼可以達到的IPC為3,按此計,每條指令可得1B的記憶體資料,跟老前輩6502相比,已經落後不少。更進一步,現代CPU支援256位長度的SIMD指令,每個時鐘最多執行3條指令,類比GPU,我們以32位為一個通道作為單獨執行執行緒,這樣每個時鐘我們一共有24條指令執行,所以每條指令可以訪問0.125B記憶體資料或者說每8條指令得到1B記憶體資料。
我們再回過頭來看看GPU的情形。以NVidia GeForce GTX 1080Ti為例,記憶體頻寬484GB/s,處理單元工作頻率為1.48G,所以對整個GPU來說,每個時鐘大概可以訪問327B記憶體資料。這個GPU一共有28個SM(類似CPU的處理核心),每個SM有128個SP,所以總共有3584個SP(類似先前SIMD32位通道)。這樣每個SM一個時鐘大概可以訪問11.7B的記憶體資料,平均到128個SP,一個SP一個時鐘得到0.09B資料,換個好聽的說法就是每11條指令可以得到1B記憶體資料,比CPU的指標還惡劣。
需要再次重申的是,因為設計目標的問題,CPU其實更關注訪存延遲指標,所以相形之下,記憶體頻寬的壓力對GPU更為顯著。這也是為什麼我們先前說過的GPU也開始配置多級Cache的原因,除了改善訪存延遲,也可以降低記憶體頻寬壓力。另外我們在《GPU歷史之二三事》裡也提到Nvidia和AMD都開始擁抱移動GPU常用的TBR(Tile Based Rendering)的繪製技術,記憶體頻寬的壓力也應該是重要的驅動因素。而作為軟體人員,在設計演算法的時候,我們要重視演算法的運算強度(見《Roofline模型初步》),要充分利用片上記憶體包括硬體Cache和軟體Cache(Shared Memory),以及注意記憶體的合併訪問(Memory Coalescing)等等來優化記憶體頻寬。
主要參考資料:
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2786914/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GPU深度學習效能的三駕馬車:Tensor Core、記憶體頻寬與記憶體層次結構GPU深度學習記憶體
- CPU、記憶體、快取的關係詳細解釋!記憶體快取
- AMD銳龍平臺記憶體與CPU超頻圖文教程 AMD CPU如何超頻?記憶體
- AMD銳龍平臺記憶體與CPU超頻圖文教程 AMD CPU怎麼超頻?記憶體
- 詳解 AWS 的突發效能例項:CPU 和頻寬突發的工作原理
- DDR4記憶體頻率2400和3000的區別 高頻記憶體與低頻記憶體效能效能對比記憶體
- flink記憶體模型詳解與案例記憶體模型
- DDR記憶體基礎知識和頻寬測試記憶體
- Java中的記憶體模型詳解Java記憶體模型
- CPU和記憶體如何互動的記憶體
- 伺服器記憶體和普通記憶體的不同點在哪伺服器記憶體
- JVM堆記憶體詳解JVM記憶體
- JVM記憶體模型詳解JVM記憶體模型
- iOS記憶體管理詳解iOS記憶體
- 記憶體CPU監控記憶體
- CPU快取記憶體快取記憶體
- Redis的記憶體回收機制和記憶體過期淘汰策略詳解Redis記憶體
- Tensorflow2對GPU記憶體的分配策略GPU記憶體
- docker的資源控制(CPU、記憶體、IO)Docker記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 系統記憶體怎麼選?詳解SRAM與DRAM的前生今世記憶體
- 九、JVM記憶體模型詳解JVM記憶體模型
- Android 記憶體洩露詳解Android記憶體洩露
- 詳解JVM中的記憶體模型是什麼?JVM記憶體模型
- CPU、記憶體、磁碟IO之間的關係記憶體
- 3576 npu ddr gpu 定頻(cpu定頻還不知道)GPU
- ubuntu解決GPU視訊記憶體佔用問題UbuntuGPU記憶體
- 記憶體碎片與緩解記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 寬頻路由器的詳細說明路由器
- 詳解CPU的主頻、核心、執行緒、快取、架構執行緒快取架構
- JVM之記憶體結構詳解JVM記憶體
- iOS Memory 記憶體詳解 (長文)iOS記憶體
- Redis 記憶體淘汰機制詳解Redis記憶體
- ArkTS 的記憶體空間詳解:從 SemiSpace 到 HugeObjectSpace記憶體Object
- Win10系統GPU共享記憶體怎麼關閉?Win10系統GPU共享記憶體的關閉方法Win10GPU記憶體
- CPU快取和記憶體屏障快取記憶體
- 談談CPU快取記憶體快取記憶體