看板 C_and_CPP 關於我們 聯絡資訊
※ [本文轉錄自 VideoCard 看板] 作者: a5000ml (咖啡裡的海洋藍) 看板: VideoCard 標題: [分享] CUDA 程式設計(4) -- 硬體規格簡介 & 採購參考 時間: Wed Oct 8 22:57:51 2008 這禮拜把安裝和硬體規格介紹完, 下禮拜就要開始進入 CUDA 程式了 ^^, 如果有什麼需要幫忙, 歡迎寫信給我. ※ 第四章 硬體規格簡介 這單元中簡介硬體規格, 做為採購上的參考, 最後在附錄列出目前市面上常見的規格. NV 的 GPGPU 主要以計算能力版本(Compute Capability), 做為硬體和軟體上的規範, 形成不同世代的區隔, 而實際產品上, 影響最大「理論效能」的因素來自 (1) 多處理器數目 (MP, multiprocessors) (2) 處理器時脈 (PC, Processor Clocks) 除此之外, 記憶體的差異往往影響了「實際效能」, 太差的記憶體頻寬可能導至「實際 效能」甚至不到「理論效能」的 5%, 這些都是採購上要注意的事項。 ◆ 多處理器 (MP, Multiprocessors) GPGPU 是以「多處理器」 為群組, 每個多處理器有 8 個單精確浮點數的「串流處理器」 (SP, Stream Processor) 負責運算, 這些串流處理器就是我們平常說的「核心」. 所以像 GTX 280 有 30 個 MP, 裡面就有 30 x 8 = 240 個 SP 核心, 在不切換執行緒的 情況下, 可以同時處理 240 個單精確的運算. 而在 Compute 版本 1.3 之後每個多處理器裡面又塞入 1 個雙精確浮點數的處理器, 稱為 (DP, Double precision stream Processor). 所以 GTX 280 有 30 個 DP 核心. ◆ 計算能力版本 (Compute Capability) 表示 GPGPU 的計算能力, 包含暫存器個數, 內部記憶體大小, 指令支援, 網格和區塊 大小等各式規範, 具有向下相容性, 到目前為止發展到 1.3 版, 其摘要如下: Compute 1.0 每個 MP (多處理器)的 32 位元暫存器為 8,192 個。 每個 MP 的共享記憶體為 16 KB, 分散成 16 個 bank 存取。 總共的常數記憶體大小為 64 KB。 每個網格最多的區塊數目為 65,535 個 (max gridDim)。 每個區塊最多的執行緒數目為 512 個 (max blockDim)。 dim3 blockDim 的各維度上限為 (512,512,64) 每個 MP 的 texture 快取為 6~8 KB。 每個 MP 的常數記憶體快取為 8 KB。 執行纜 warp 大小為 32 個執行緒。 每個 MP 有 8 個 SP, 可以在 4 個 clocks 之內執行完一個 warp。 每個 MP 最大的進行中區塊數目為 8 (active blocks)。 每個 MP 最大的進行中執行纜數目為 24 (active warps)。 每個 MP 最大的進行中執行緒數目為 768 (active threads, 24x32)。 (其它關於 texture 細節...) Compute 1.1 在顯示卡記憶體上支援 32-bit 的 atomic 整數運算。 Compute 1.2 在顯示卡記憶體上和共享記憶體上支援 64 bits 的 atomic 整數運算。 MP 的 32 位元暫存器增為 16,384 個。 支援 warp vote 指令。 Compute 1.3 支援雙精確浮點數的運算。 ◆ 運算效能估計 運算效能一般採用「每秒能執行的浮點運算次數」GFlops (Giga float operations per seconds)來衡量, NV 的 GPGPU 最大效能可用下面公式估計: 單精確倍數 (增速因子為 3, 每個多處理器有 8 個單精確的串流處理器) GFlops = 多處理器數目 x 8 x 3 x 處理器頻率(GHz) (其中 3 是因為管線化因素所造成的「增速因子」) 範例 GTX 280 30 x 8 x 3 x 1.296 = 933 (GFlops) 8800 Ultra 16 x 8 x 3 x 1.500 = 576 (GFlops) 9600 GT 8 x 8 x 3 x 1.625 = 312 (GFlops) Tesla S1070 30 x 8 x 3 x 1.440 = 1037 (GFlops/GPU) 雙精確倍數 (增速因子為 2, 每個多處理器只有 1 個雙精確的串流處理器) GFlops = 多處理器數目 x 1 x 2 x 處理器頻率(GHz) (只有 compute 1.3 的版本才有雙精確倍數) 範例 GTX 280 30 x 1 x 2 x 1.296 = 77.8 (GFlops) Tesla S1070 30 x 1 x 2 x 1.440 = 86.4 (GFlops/GPU) 一般來說, 這種最大效能是達不到的, 因為我們還需要從記憶體中載入或儲存資料, 位址轉換和執行緒定位計算, 條件分支指令, 各執行緒之間同步和交換資料, 以及 內部記憶體競爭問題, GPU 做的工作並非單純直線型地只做浮點運算而己, 通常 達到最大效能的 1/3 或 1/4, 就已經很驚人了。 ◆ 記憶體頻寬估計 記憶體頻寬通常用每秒傳輸的資料量來衡量 GB/s (giga-bytes per seconds), 其最大頻寬, 可用下面公式估計 記憶體頻寬(GB/s) = 記憶體介面寬度(bits) x 記憶體時脈頻率(GHz) / 8 x 2 其中 /8 是因為 1 個 byte 有 8 個 bits。 x2 是因為雙通道。 範例 GTX 280 512 x 1.107 / 8 x 2 = 141.7 (GB/s) 8800 Ultra 384 x 1.080 / 8 x 2 = 103.7 (GB/s) 8800M GTX 256 x 0.800 / 8 x 2 = 51.2 (GB/s) 通常在工程或科學計算上 GPGPU 的運算效能會受限於記憶體頻寬, 拿 GTX 280 做例子, 它每秒可計算 933G 個單精確浮點數, 而僅能載入 35.4G 個單精確浮點數 (每個單精確 浮點數佔用 4 bytes, 所以 141.7/4=35.4 ), 平均每個浮點數要計算 26.3 次才能用盡 GPGPU 的運算資源 (933G/35.4G=26.3), 這還沒有算輸出呢, 因為輸出也佔記憶體頻寬, 若考慮進來, 每個載入的浮點數起碼要計算 30~50 次才能用盡運算資源, 這樣的要求 有點過高, 為什麼呢?舉常見的向量內積為例, 它需要謮取 2 條向量, 輸出一個數字, 只有輸出一個浮點數不佔頻寬, 而兩條向量要佔兩倍頻寬, 所以用盡運算資源的要求是 每個浮點數載入要進行 52.6 次運算 (933G/(35.4G/2)=52.6), 然而向量中每個元素只 做一個乘法, 然後再做一個加法而己, 單元運算次數為 2, 所以最優的實際運算效能 僅能達 GPGPU 最大運算能力的 2/52.6 = 3.8%, 也就是 933 x 3.8% = 35.5 GFlops. 這就是記憶體頻寬對實際運算效能產生的限制, 事實上還有其它的限制, 包括記憶庫衝突 (bank conflict)等, 使得實際效能還會再下降。 ps.這裡指的載入是顯示卡記憶體到 GPGPU 的暫存器或晶片內部的快速記憶體(快取或共享記憶體之類)。 ※名詞解釋 (1) 暫存器 (register) 處理器中存放變數的地方, 大多數指令皆是以此為單元進行操作, 其速度為所有記憶單元中最快, 可視為近乎零延遲。GPGPU 中的暫存器 數量超多, 屬於 RISC 架構。 (2) 共享記憶體 (shared memory) 多處理機時, 會有一塊所有處理機都看得到的記憶體, 稱為共享記憶體, 用來共享或交換資料用, 交換資料時必需要同步所有 處理機, 避免因先後序不可預期而導至資料存取錯誤。 (3) 精簡指令集電腦 (RISC, Reduced Instruction Set Computer), 將指令集精簡, 記憶體存取上採用簡單的 load/save 指令來橋接, 其優點有指令平行 執行度更好, 製造上更容易, 並且可以放入更多的暫存器和快取, 提昇系統效能, 相對者為 CISC。 (4) 複雜指令集電腦 (CISC, Complex Instruction Set Computer), 傳統的電腦設計, 需要什麼功能就加什麼指令, 並且容許運算元是記憶體, 缺乏指令的 正交性, 指令平行化不易, 造成晶片面積浪費, 效能不易提昇, 以前 的 Intel x86 CPU 就是一例, 但現今的 Intel CPU 已採用微指令, 將核心改為 RISC 架構. (5) 單精確浮點數 (single precision float) 使用 4 個 byte 來記錄一個浮點數的 規範, 在 C 語言裡面的型別是 float。 (6) 雙精確浮點數 (double precision float) 使用 8 個 byte 來記錄一個浮點數的 規範, 在 C 語言裡面的型別是 double。 (7) 雙通道 (dual channel) 利用兩個互補的記憶體控制器,讓溝晶片與記憶體模組 之間的頻寬變成兩倍的技術。 (8) 記憶體介面寬度 (Memory Interface Width) 記憶體匯流排屬於並列式傳輸, 一次 可以同時存取到的 bit 數稱為介面寬度。 (9) 記憶庫 (Memory bank) 將記憶體分散成數個獨立的群組儲存, 並可借由多個獨立 的記憶體控制器來提昇整體的頻寬。 (10) 記憶庫衝突 (bank conflict) 當同時要存取的資料位於同一記憶庫, 稱為記憶庫 衝突, 此時就要排隊等待而造成延遲. ※附錄:規格表 項目標記 MP. 多處理器數目 Number of Multiprocessors Comp. 計算能力版本 Compute Capability Mem. 記憶體大小 Memory Size PC. 處理器時脈頻率 Processing Clocks MC. 記憶體時脈頻率 Memory Clocks MI. 記憶體介面寬度 Memory Interface Width MB. 記憶體頻寬 Memory Bandwidth 顯示卡系列 ------------------------------------------------------------------------------ GeForce MP. Comp. Mem(MB) PC(MHz) MC(MHz) MI(bit) MB(GB/s) ------------------------------------------------------------------------------ GTX 280 30 1.3 1024 1296 1107 512 141.7 GTX 260 24 1.3 896 1242 999 448 111.9 ------------------------------------------------------------------------------ 9800 GX2 16x2 1.1 512x2 1500 1000 256 64.0 9800 GTX 16 1.1 512 1688 1100 256 70.4 9800 GT 14 1.1 512 1500 900 256 57.6 9600 GSO 12 1.1 384 1375 800 192 38.4 9600 GT 8 1.1 512 1625 900 256 57.6 9500 GT 4 1.1 256/512 1400 800 128 25.6 ------------------------------------------------------------------------------ 8800 Ultra 16 1.0 768 1500 1080 384 103.7 8800 GTX 16 1.0 768 1350 900 384 86.4 8800 GTS 12 1.0 640/320 1200 800 320 64.0 8800 GT 14 1.1 512 1500 900 256 57.6 8800 GS 12 1.1 384 1375 800 192 38.4 8600 GTS 4 1.1 256 1450 1000 128 32.0 8600 GT 4 1.1 256 1190 700 128 22.4 8500 GT 2 1.1 256 900 400 128 12.8 8400 GS 2 1.1 256 900 400 64 6.4 ------------------------------------------------------------------------------ 8800M GTX 12 1.1 512 1250 800 256 51.2 8800M GTS 8 1.1 512 1250 800 256 51.2 8700M GT 4 1.1 512 1250 800 128 25.6 8600M GT 4 1.1 512 950 700 128 22.4 8600M GS 2 1.1 512 1200 700 128 22.4 8400M GT 2 1.1 512 900 600 128 19.2 8400M GS 2 1.1 256 800 600 64 9.6 8400M G 1 1.1 256 800 600 64 9.6 ------------------------------------------------------------------------------ 高速運算工作站系列 ------------------------------------------------------------------------------ Tesla MP. Comp. Mem PC(MHz) MC(MHz) MI(bit) MB(GB/s) ------------------------------------------------------------------------------ S1070 30x4 1.3 4Gx4 1440 800 512 102.0 C1060 30 1.3 4G 1296 800 512 102.0 S870 16x4 1.0 1.5Gx4 1350 800 384 76.8 D870 16x2 1.0 1.5Gx2 1350 800 384 76.8 C870 16 1.0 1.5G 1350 800 384 76.8 ------------------------------------------------------------------------------ Workstation 顯示卡系列 ------------------------------------------------------------------------------ Quadro MP. Comp. Mem(MB) PC(MHz) MC(MHz) MI(bit) MB(GB/s) ------------------------------------------------------------------------------ Plex 1000 S4 16x4 1.0 Plex 1000 IV 16x2 1.0 1.5Gx2 ------------------------------------------------------------------------------ FX 5600 16 1.0 1.5G 800 384 76.8 FX 4600 12 1.0 768 700 384 67.2 FX 3700 14 1.1 512 800 256 51.2 FX 1700 4 1.1 FX 570 4 1.1 FX 370 2 1.1 NVS 290 2 1.1 ------------------------------------------------------------------------------ FX 3600M 12 1.1 FX 1600M 4 1.1 512 800 128 25.6 FX 770M 4 1.1 512 800 128 25.6 FX 570M 4 1.1 256 700 128 22.4 FX 360M 2 1.1 256 600 64 9.6 FX 370M 1 1.1 256 600 64 9.6 NVS 140M 2 1.1 NVS 135M 2 1.1 NVS 130M 1 1.1 ------------------------------------------------------------------------------ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.212.85 ※ 編輯: a5000ml 來自: 114.45.212.85 (10/08 23:20)
iuytjhgf:很強大.... 10/08 23:27
MBRSL:趕快讓3D軟體支援吧...只能用CPU著色真是浪費GPU 10/08 23:57
b24333666:推~+1 10/09 01:50
b24333666:ATI要是能套用CUDA要怎麼計算?? 10/09 08:37
Bencrie:2樓說的3D軟體是指像Maya之類的modeler ? 10/09 09:45
Bencrie:說CPU著色應該是指ray tracer那種global illumination 10/09 09:46
xhole:那像ATi的晶片SP都爆多的 在硬體架構上比較適合這種計算嗎 10/09 11:51
b24333666:ATI顯卡應該=超級電腦等級??(誤)ATI應該能跑CUDA吧! 10/09 12:04
finkel:ATI當然不能跑 10/09 12:19
wowtiger:架個問題 所以ATI要先SP除以五 10/09 12:39
sdk:ATI有自己的Stream/CAL 10/09 15:38
DuoMax:我有問題!!! CUDA要怎麼唸? 酷打? 10/10 20:38
sdk:樓上你得到他了 10/13 18:56
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.209.219