NVIDIA GPU 架构梳理
TODO:英偉達(dá)顯卡型號(hào)梳理
目錄:
一、NVIDIA GPU的架構(gòu)演變歷史二、Tesla 架構(gòu)
三、Fermi架構(gòu)
四、Kepler架構(gòu)
五、Maxwell架構(gòu)
六、Pascal架構(gòu)
七、Volta架構(gòu)
八、Turing架構(gòu)
九、Ampere架構(gòu)
一、NVIDIA GPU的架構(gòu)演變歷史和基本概念[1]
截止2021年,發(fā)布時(shí)間離我們最近的8種NVIDIA GPU微架構(gòu)是:
- Tesla? (特斯拉)
 - Fermi(費(fèi)米)
 - Kepler(開普勒)
 - Maxwell(麥克斯韋)
 - Pascal(帕斯卡)
 - Volta(伏特)
 - Turing(圖靈)
 - Ampere(安培)
 
NVIDIA一般以歷史上一些著名科學(xué)家的名字命名自己的GPU微架構(gòu),上面8種微架構(gòu)分別是:特斯拉,費(fèi)米,開普勒,麥克斯韋,帕斯卡,伏特,圖靈,安培。
其中最新的是2020年宣布的Ampere架構(gòu)。
二、Tesla 架構(gòu)
Tesla 架構(gòu)的資料在官網(wǎng)也沒找到多少,不過這是英偉達(dá)第一個(gè)實(shí)現(xiàn)統(tǒng)一著色器模型的微架構(gòu)。
經(jīng)典型號(hào)是G80,在Fermi架構(gòu)白皮書的開篇部分有對(duì)G80的簡要介紹:
- G80 是第一款支持 C 語言的 GPU,讓程序員無需學(xué)習(xí)新的編程語言即可使用GPU的強(qiáng)大功能。
 - G80 是第一款用單一、統(tǒng)一的處理器取代獨(dú)立的頂點(diǎn)和像素管道的 GPU,該處理器可以執(zhí)行頂點(diǎn)、幾何、像素和計(jì)算程序。
 - G80 是第一款使用標(biāo)量線程處理器的 GPU,無需程序員手動(dòng)管理向量寄存器
 - G80 引入了單指令多線程 (SIMT) 執(zhí)行模型,即多個(gè)獨(dú)立線程使用一條指令并發(fā)執(zhí)行。
 - G80 為線程間通信引入了共享內(nèi)存(shared memory)和屏障同步(barrier synchronization)。
 
G80 顯卡
三、Fermi架構(gòu)[2]
Fermi 架構(gòu)是NVIDIA GPU 架構(gòu)自初代 G80 以來最重大的飛躍。
NVIDIA的GPU研發(fā)團(tuán)隊(duì)從G80和GT200兩個(gè)型號(hào)上汲取經(jīng)驗(yàn),采用全新的設(shè)計(jì)方法來創(chuàng)建世界上第一個(gè)計(jì)算 GPU。在這個(gè)過程中,專注于提高以下關(guān)鍵領(lǐng)域:
- 提高雙精度性能——雖然單精度浮點(diǎn)性能大約是桌面 CPU 性能的十倍,但一些 GPU 計(jì)算應(yīng)用程序也需要更高的雙精度性能。
 - ECC 支持——ECC 允許 GPU 計(jì)算用戶在數(shù)據(jù)中心安裝中安全地部署大量 GPU,并確保醫(yī)療成像和金融期權(quán)定價(jià)等數(shù)據(jù)敏感應(yīng)用程序免受內(nèi)存錯(cuò)誤的影響。
 - True Cache Hierarchy—— 一些并行算法無法使用 GPU 的共享內(nèi)存,用戶需要一個(gè)真正的緩存架構(gòu)來幫助他們。
 - 更多共享內(nèi)存——許多 CUDA 程序員要求超過 16 KB 的 SM 共享內(nèi)存來加速他們的應(yīng)用程序。
 - 更快的上下文切換——用戶要求在應(yīng)用程序和更快的圖形和計(jì)算互操作之間進(jìn)行更快的上下文切換。
 - 更快的原子操作(Atomic Operations)——用戶要求為他們的并行算法提供更快的讀-修改-寫原子操作。
 
基于以上出發(fā)點(diǎn),Fermi架構(gòu)有以下四大亮點(diǎn):
第三代流式多處理器 (SM)
- 每個(gè) SM 有 32 個(gè) CUDA 內(nèi)核,是 GT200 的 4 倍
 - 8 倍于 GT200 的峰值雙精度浮點(diǎn)性能
 - Dual Warp Scheduler 同時(shí)調(diào)度和分派來自兩個(gè)獨(dú)立 warp 的指令
 - 64 KB RAM,可配置共享內(nèi)存和 L1 cache
 
第二代并行線程執(zhí)行 ISA
- 具有完整 C++ 支持的統(tǒng)一地址空間
 - 針對(duì) OpenCL 和 DirectCompute 進(jìn)行了優(yōu)化
 - 完整的 IEEE 754-2008 32 位和 64 位精度
 - 帶有 64 位擴(kuò)展的完整 32 位整數(shù)路徑
 - 支持過渡到 64 位尋址的內(nèi)存訪問指令
 - 通過預(yù)測(cè)提高性能
 
改進(jìn)的內(nèi)存子系統(tǒng)
- 具有可配置 L1 和Unified L2 Caches 的 NVIDIA Parallel DataCache TM 層次結(jié)構(gòu)
 - 第一個(gè)支持 ECC 內(nèi)存的 GPU
 - 大幅提升原子內(nèi)存操作性能
 
NVIDIA GigaThread TM 引擎
- 應(yīng)用程序上下文切換速度提高 10 倍
 - 并發(fā)內(nèi)核執(zhí)行
 - 亂序線程塊執(zhí)行
 - 雙重疊內(nèi)存?zhèn)鬏斠?/li>
 
以上是Fermi 架構(gòu)相較于初代架構(gòu)提升的地方
下面具體看看Fermi 架構(gòu)的配置
Fermi 架構(gòu)
第一個(gè)基于Fermi架構(gòu)的GPU,使用 30 億個(gè)晶體管實(shí)現(xiàn),共計(jì)512個(gè)CUDA內(nèi)核。
這512 個(gè) CUDA 內(nèi)核被組織成 16 個(gè) SM,每個(gè) SM 是一個(gè)垂直的矩形條帶(紅框中的內(nèi)容),分別位于一個(gè)普通的 L2 cache周圍,每個(gè) SM 有32 個(gè)CUDA 內(nèi)核。
一個(gè)CUDA 內(nèi)核為一個(gè)線程在每個(gè)時(shí)鐘周期里執(zhí)行一條浮點(diǎn)或整數(shù)指令。
6個(gè)64-bit顯存分區(qū),組成一個(gè)384-bit的顯存接口,總共支持高達(dá) 6GB 的 GDDR5 DRAM顯存。
GDDR5:第五版圖形用雙倍數(shù)據(jù)傳輸率存儲(chǔ)器DRAM:動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器
主機(jī)接口(host interface )通過 PCI-Express 將 GPU 連接到 CPU。 Giga Thread 全局調(diào)度器將線程塊分發(fā)給 SM 線程調(diào)度器。
Fermi圖形渲染架構(gòu)
 整個(gè) GPU 有多個(gè) GPC(圖形處理集群),單個(gè)GPC包含一個(gè)光柵引擎(Raster Engine),四個(gè) SM(流式多處理器),GPC 可以被認(rèn)為是一個(gè)獨(dú)立的 GPU。所有從 Fermi 開始的 NVIDIA GPU,都有 GPC。
Fermi Streaming Multiprocessor (SM)
上圖是將16個(gè)SM中的 1 個(gè)拿出來放大后的詳細(xì)結(jié)構(gòu)圖,其中包含:
- 橙色部分:2 個(gè) Warp Scheduler/Dispatch Unit
 - 綠色部分:32 個(gè) CUDA 內(nèi)核,分在兩條 lane 上,每條分別是 16 個(gè)
 - 淺藍(lán)色部分:register file-寄存器文件和 L1 cache
 - 16 個(gè) Load/Store units (LD/ST Unit)
 - 4 個(gè) Special Function Units (SFU)
 
每個(gè) SM 具有 32 個(gè) CUDA 內(nèi)核,就是圖中寫著Core的綠色小方塊兒,每個(gè) CUDA 內(nèi)核都有一個(gè)完全流水線化的整數(shù)算術(shù)邏輯單元 (ALU) 和浮點(diǎn)單元 (FPU):
CUDA 內(nèi)核
SM(Streaming Multiprocessors)是GPU架構(gòu)中非常重要的部分,GPU硬件的并行性就是由SM決定的。
四、Kepler架構(gòu)
Kepler架構(gòu)的思路是:減少SM單元數(shù)(在這一代中叫SMX單元),增加每組SM單元中的CUDA內(nèi)核數(shù)。在Kepler架構(gòu)中,每個(gè)SM單元的CUDA內(nèi)核數(shù)由Fermi架構(gòu)的32個(gè)激增至192個(gè)。
在每個(gè)SMX中:
- 4 個(gè) Warp Scheduler,8 個(gè) Dispatch Unit
 - 綠色:192個(gè) CUDA 內(nèi)核,分在12條 lane 上,每條分別是 16 個(gè)
 - 黃色:64 個(gè)DP雙精度運(yùn)算單元,分在4條 lane 上,每條 lane 上 16 個(gè)
 - 32 個(gè) LD/ST Unit
 - 32 個(gè) SFU
 
五、Maxwell架構(gòu)
Maxwell架構(gòu)的SM單元和Kepler架構(gòu)相比,又有很大變化,這一代的SM單元更像是把4個(gè)Fermi 架構(gòu)的SM單元,按照2x2的方式排列在一起,這一代稱為SMM單元:
SMM 使用基于象限的設(shè)計(jì),具有四個(gè) 32 核處理塊(processing blocks),每個(gè)處理塊都有一個(gè)專用的 warp 調(diào)度程序,能夠在每個(gè)時(shí)鐘分派兩條指令。
每個(gè) SMM 單元提供
- 八個(gè)紋理單元(texture units)
 - 一個(gè)多態(tài)引擎(polymorph engine-圖形的幾何處理)
 - 專用寄存器文件和共享內(nèi)存。
 
每個(gè)處理塊中:
- 1個(gè) Warp Scheduler,2 個(gè) Dispatch Unit
 - 綠色:32個(gè) CUDA 內(nèi)核
 - 8個(gè) LD/ST Unit
 - 8個(gè) SFU
 
CUDA內(nèi)核總數(shù) 從Kpler時(shí)代的每組SM單元192個(gè)減少到了每組128個(gè),但是每個(gè)SMM單元將擁有更多的邏輯控制電路,便于精確控制。
參考:Maxwell: The Most Advanced CUDA GPU Ever Made | NVIDIA Developer Blog
六、Pascal架構(gòu)
pascal架構(gòu)的GP100核心
這里有一個(gè)新概念:核心
NVIDIA不同的架構(gòu)會(huì)有幾種不同的核心,Pascal架構(gòu)有GP100、GP102兩種大核心:
- GP100:3840個(gè)CUDA核心,60組SM單元;
 - GP102:3584個(gè)CUDA核心,28組SM單元;
 
核心是一個(gè)完整的GPU模組,上圖展示了一個(gè)pascal架構(gòu)的GP100核心,帶有 60 個(gè) SM 單元。
不同的顯卡產(chǎn)品可以使用不同的 GP100 配置,一般是滿配或者減配,比如Tesla P100 使用了 56 個(gè) SM 單元。
GP100核心的SM單元
每個(gè)SM單元中,分為2個(gè)Process Block,每個(gè)Process Block中:
- 1個(gè) Warp Scheduler,2 個(gè) Dispatch Unit
 - 綠色:32個(gè) CUDA 內(nèi)核
 - 黃色:16 個(gè)DP雙精度運(yùn)算單元,分在2條 lane 上,每條 lane 上 8個(gè)
 - 8個(gè) LD/ST Unit
 - 8個(gè) SFU
 
CUDA內(nèi)核總數(shù)從Maxwell時(shí)代的每組SM單元128個(gè)減少到了每組64個(gè),這一代最大的特點(diǎn)是又把DP雙精度運(yùn)算單元加回來了。
制程工藝升級(jí)到了16nm,性能大幅提升,功耗卻不增加。
七、Volta架構(gòu)
Volta架構(gòu)的GV100核心
GV100核心的SM單元
每個(gè)SM單元中,分為4個(gè)Process Block,每個(gè)Process Block中:
- 1個(gè) Warp Scheduler,1個(gè) Dispatch Unit
 - 8 個(gè) FP64 Core
 - 16 個(gè) INT32 Core
 - 16 個(gè) FP32 Core
 - 2 個(gè) Tensor Core
 - 8個(gè) LD/ST Unit
 - 4個(gè) SFU
 
在前幾代架構(gòu)中:
一個(gè)CUDA 內(nèi)核在每個(gè)時(shí)鐘周期里只能為一個(gè)線程執(zhí)行一條浮點(diǎn)或整數(shù)指令。
但是從Volta架構(gòu)開始,將一個(gè)CUDA 內(nèi)核拆分為兩部分:FP32 和 INT32,好處是在同一個(gè)時(shí)鐘周期里,可以同時(shí)執(zhí)行浮點(diǎn)和整數(shù)指令,提高計(jì)算速度。
Volta架構(gòu)在傳統(tǒng)的單雙精度計(jì)算之外還增加了專用的Tensor Core張量單元,用于深度學(xué)習(xí)、AI運(yùn)算等。
八、Turing架構(gòu)
Turing架構(gòu)的TU102核心
Turing架構(gòu)目前一共有三種核心:
- TU102核心
 - TU104核心
 - TU106核心
 
TU102核心的SM單元
每個(gè)SM單元有4個(gè)處理塊,每個(gè)處理塊中:
- 1 個(gè) Warp Scheduler,1 個(gè) Dispath Unit
 - 16 個(gè) INT32 Core
 - 16 個(gè) FP32 Core
 - 2 個(gè) Tensor Core
 - 4 個(gè) LD/ST Unit
 - 4 個(gè) SFU
 
這一代架構(gòu)去掉了對(duì)FP64的支持。
九、Ampere架構(gòu)
Ampere架構(gòu)的GA102核心
GA102核心的SM單元
每個(gè)SM單元分成4個(gè)處理塊,每個(gè)處理塊中:
- 1 個(gè) Warp Scheduler,1 個(gè) Dispatch Unit
 - 8 個(gè) FP64 Core
 - 16 個(gè) FP32 Core
 - 16 個(gè) INT32 Core
 - 1 個(gè) Tensor Core
 - 8 個(gè) LD/ST Unit
 - 4 個(gè) SFU
 
這一代架構(gòu)又把FP64 Core加回來了,同時(shí)也是自Volta架構(gòu)以來的,NVIDIA第三代Tensor技術(shù),保持一代架構(gòu)更新一次Tensor。
總結(jié)
以上是生活随笔為你收集整理的NVIDIA GPU 架构梳理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: AMD EPYC——CPU命名规则
 - 下一篇: 一篇文章让你了解灾备指标:RPO与RTO