Nvidia Pascal GPU 架構詳解

本文作於 2016/12/25,作者卜居。

寫在前面:本文假定讀者有一定 CUDA 基礎。如果你對 GPU, sm_60/sm_61,CUDA 這些名詞感到陌生,可以看我之前寫的博客《CUDA 從入門到精通》。 

1. 前言

Nvidia 在今年的 GTC( GPU Technology Conference ) 上高調宣佈了 Pascal 架構——專門針對每瓦性能優化的新架構,採用 16nm 工藝。接着發佈了該系列的扛鼎之作 P100 及其裝進機箱後的產品 DGX-1:

Tesla P100 採用頂級大核心 GP100,面積 610 mm^2,位於下圖中間位置

GP100 參數彙總如下:

  • 芯片:GP100
  • 架構:SM_60
  • 工藝:16 nm FinFET
  • 支持:雙精度 FP64, 單精度 FP32, 半精度 FP16
  • 功耗:250 W
  • CUDA 核心數:3584(56 SMs, 64 SPs/SM)
  • GPU 時鐘(Base/Boost):1189 MHz/1328 MHz
  • PCIe:Gen 3 x16
  • 顯存容量:12/16 GB HBM2
  • 顯存位寬:3072/4096 bits
  • 顯存時鐘:715 MHz
  • 顯存帶寬:539/732 GB/s

DGX-1 擁有 8 顆帕斯卡架構 GP100 核心的 Tesla P100 GPU,一共組成了 128 GB 的顯存。
浮點運算(FP16) 達到了 170 TFlops(官方宣稱相當於 250 個 x86服務器),內置 7 TB 的 SSD,兩顆 16 核心的 Xeon E5-2698v3 以及 512 GB 的 DDR4 內存,整機功耗 3200W,售價爲129000$。

看完上述配置,深刻感到這玩意是土豪套餐,不是人人都用得起。但是看看文檔又不花錢,何樂而不爲。

 

2. GP100 GPU 硬件架構

 

GP100 以最高性能並行計算處理器自居,面向 GPU 加速計算的市場。

GP100 包含一組 GPC(圖形處理簇,Graphics Processing Clusters)、TPC(紋理處理簇,Texture Processing Clusters)、SM(流多處理器,Stream Multiprocessors)以及內存控制器。其架構如下:

 

(如果圖看不清,可以右鍵-另存爲保存到本地打開,可以縮放到適合尺寸)

 

下面就是數字遊戲了。

 

一顆完整的 GP100 芯片包括 6 個圖形處理簇,60 個 Pascal 流多處理器,30 個紋理處理簇和 8 個 512 位內存控制器(總共 4096 位)。

每個圖形處理簇內部包括 10 個 流多處理器。

每個流多處理器內部包括 64 個 CUDA 核心和 4 個紋理單元。

 

問題:Tesla P100 內共有多少 CUDA 核心?

 

回答 1:根據材料顯示,GP100 內一共有 60 個 SM,每個 SM 有 64 個 CUDA 核心,那麼 GP100 總共有 60 x 64 = 3840 CUDA 核心。

 

正確答案:回答 1 推斷能力很強,但結果與實際不符。在 Tesla P100 上運行 deviceQuery 得到如下信息:

(56) Multiprocessors, ( 64) CUDA Cores/MP:     3584 CUDA Cores

事實上,Tesla P100 只用了 GP100 上 60 個 SM 中的 56 個。 

所以,一切還是要從實際出發。 

 

進一步細看 GP100 SM 的架構。

 

GP100 的第六代 SM 架構提高了 CUDA 核心利用率和能效,核心頻率更高,整體 GPU 性能有較大提升。

 

GP100 的 SM 包括 64 個單精度 CUDA 核心。而 Maxwell 和 Kepler 的 SM 分別有 128 和 192 個單精度 CUDA 核心。雖然 GP100 SM 只有 Maxwell SM 中 CUDA 核心數的一半,但總的 SM 數目增加了,每個 SM 保持與上一代相同的寄存器組,則總的寄存器數目增加了。這意味着 GP100 上的線程可以使用更多寄存器,也意味着 GP100 相比舊的架構支持更多線程、warp 和線程塊數目。與此同時,GP100 總共享內存量也隨 SM 數目增加而增加了,帶寬顯著提升不至兩倍。

 

 

圖中爲一個 SM 的架構。其中綠色的“Core” 爲單精度 CUDA 核心,共有 64 個,同時支持 32 位單精度浮點計算和 16 位半精度浮點計算,其中 16 位計算吞吐是 32 位計算吞吐的兩倍。圖中橘黃色的 “DP Unit” 爲雙精度計算單元,支持 64 位雙精度浮點計算,數量爲 32 個。每個 GP100 SM 雙精度計算吞吐爲單精度的一半。下面這張處理性能表證實了這一點。

 

 

Pascal SM 架構圖中可以看到,一個 GP100 SM 分成兩個處理塊,每塊有【 32768 個 32 位寄存器 + 32 個單精度 CUDA 核心 + 16 個雙精度 CUDA 核心 + 8 個特殊功能單元(SFU) + 8 個存取單元 + 一個指令緩衝區 + 一個 warp 調度器 + 兩個分發單元】。

Pascal SM 架構相比 Kepler 架構簡化了數據通路,佔用面積更小,功耗更低。

Pascal SM 架構提供更高級的調度和重疊載入/存儲指令來提高浮點利用率。

GP100 中新的 SM 調度器架構相比 Maxwell 更智能,具備高性能、低功耗特性。

一個 warp 調度器(每個處理塊共享一個)在一個時鐘週期內可以分發兩個 warp 指令。

 

 

雙精度算法是很多 HPC 應用(如線性代數,數值模擬,量子化學等)的核心。GP100 的一個關鍵設計目標就是顯著提升這些案例的性能。

GP100 中每個 SM 都有 32 個雙精度(FP64)CUDA 核心,即單精度(FP32)CUDA 核心數目的一半。GP100 和以前架構相同,支持 IEEE 754-2008 標準,支持 FMA 運算,支持異常值處理。

注意:在 Kepler GK110 中單精度核心數目:雙精度核心數目爲 3:1。

 

半精度算法提升深度學習性能。深度學習是增長最快的計算領域之一,它是很多重要應用(實時語言翻譯,高準確率圖像識別,自動圖片標題,自動駕駛中的目標識別、最優路徑計算、防碰撞系統等)的構成部分。

深度學習是個兩步過程:(1) 神經網絡訓練;(2) 使用訓練好的結果,將網絡部署到現場,對未知輸入進行預測(分類,識別)。

深度神經網絡天然對錯誤不敏感。使用 FP16 存儲數據可以有效減少神經網絡內存佔用,允許訓練、部署更大的網絡。

使用 FP16 計算相比 FP32 可以帶來 2 倍性能提升,數據傳輸時間也可以大大降低。

注意:GP100 上,兩個 FP16 運算可以使用一個雙路指令完成。

 

 

 

相比上一代產品和上上代產品情況如下表所示

表現出了優異的高性能和高能效。

 

Maxwell 架構相對 Kepler 做了改進,提升了效率。

Pascal 基於 Maxwell 架構,利用 TSMC 16 nm FinFET 工藝進一步降低了能耗。

【卜居注:半導體行業在 Intel 帶領下都學會了 tick-tock 策略】

 

 

計算能力

GP100 GPU 支持最新 6.0 計算能力。

 

 

 

 

 

 

3. GP104 GPU 硬件架構

 

Pascal 架構的消費級顯卡 GTX 1080 是面向普通消費者的圖形加速卡,先來張靚照:

GTX1080 參數彙總如下:

  • 芯片:GP104, sm_61
  • 工藝:16 nm FinFET
  • 支持:單精度 FP32, 整數 INT8
  • 功耗:180 W
  • Nvidia CUDA 核心數:2560(20 SMs, 128 SPs/SM)
  • GPU 時鐘:Base = 1607 MHz, Maximum Boost = 1733 MHz
  • PCIe:Gen 3 x16
  • 顯存容量:8 GB GDDR5X
  • 顯存位寬:256 bits
  • 顯存時鐘:1251 MHz
  • 顯存帶寬:320 GB/s

其中 GTX1080 的 GPU 芯片使用 GP104,與 Tesla P100 中的 GPU 芯片 GP100 相比有如下不同:

(1) GP100 具有 6.0 計算能力,GP104 則具有 6.1 計算能力; 

(2) GP100 支持雙精度,GP104 雙精度支持較弱;

(3) GP100 支持半精度,GP104 半精度支持較弱;

(4) GP100 不支持 INT8,GP104 支持 INT8;

(5) GP100 使用 HBM2 作爲顯存,GP104 使用 GDDR5X;

(6) GP100 每個 SM 上有 64 個 CUDA core,而 GP104 上每個 SM 有 128 個 CUDA core;

 

 

得益於新的 Pascal 架構、16 nm 工藝、GDDR5X 顯存等,GTX1080 比上一代 GTX980 性能提升超過 70%,是目前最快的遊戲卡。

 

 

我們深入 GP104 芯片內部一探究竟。

 

 

 

整個 GP104 芯片內置 4 個 GPC(圖形處理簇),共計 20 個 SM(流多處理器),以及 8 個內存控制器。

細看每個 SM 架構如下圖:

每個 GP104 SM 包括 128 CUDA core,沒有 DPUnit。每個 CUDA core 支持 dp2a(雙路 16 bit 整數乘累加指令)、dp4a(四路 8 bit 整數乘累加指令)。因此, GP104 十分適合做定點乘加計算,這在深度學習的模型定點化實現壓縮方面有用途。

每個 GP104 SM 還內置 96 KB 共享內存、48 KB L1 緩存、256 KB 寄存器、8 個紋理單元。

 

 

4. Pascal GPU 選型

很多深度學習愛好者可能都想自己攢一臺機器用於模型訓練、調參,而 Nvidia 今年推出的 Pascal 架構消費級 GPU 也十分吸引眼球。這裏我們做一個簡單的選型對比,希望能幫到那些仍然猶豫買哪一款的朋友。

 

 

從上表對比來看,GTX1080 應該是個不錯的選擇,差不多人民幣 5000 元左右就能買到 9.0 TFLOPS 計算能力。而更高端的 Titan X(Pascal) 則需要付出多一倍的價格,僅換得額外 2.0 TFLOPS 計算能力,其實還不如買兩塊 GTX1080 划算。

GTX1070 和 GTX1080 的 GPU 芯片均爲 GP104。但 GTX1070 使用 GDDR5,而 GTX1080 使用 GDDR5X。

 

對於 GP102、GP106 架構,從目前還沒看到公佈的架構資料,但根據一些指標來看和 GP104 差別不大。如果官方公佈架構細節,本文也會隨時更新。

 

5. 使用 Pascal 架構 GPU 時的注意事項

Pascal 架構是全新的,所以需要使用全新的開發環境。安裝 CUDA 至少要 8.0,cuDNN 則至少要 v5.1.5。

在編譯 Caffe 時,應當在 Makefile.config 時找到如下語句:

 

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_50,code=compute_50


改爲:

 

 

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_50,code=compute_50 \
                -gencode arch=compute_60,code=sm_60 \
                -gencode arch=compute_61,code=sm_61


爲了編譯速度更快,可以刪掉舊的計算架構,例如你編譯用於 GTX1080 的代碼時,可以改爲:

 

 

CUDA_ARCH := -gencode arch=compute_61,code=sm_61

 

只是一旦這麼做,你的代碼就只能運行在 6.1 及以上架構,而不能直接運行在更低版本架構(如 Maxwell、Kepler、Fermi 等)。

 

6. 參考文獻

【1】 Whitepaper NVIDIA Tesla P100:The Most Advanced Datacenter Accelerator Ever Built Featuring Pascal GP100, the World’s Fastest GPU

【2】 Whitepaper NVIDIA GeForce GTX 1080:Gaming Perfected

【3】 https://devblogs.nvidia.com/parallelforall/cuda-8-features-revealed/

【4】 https://developer.nvidia.com/rdp/cudnn-download

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章