計算能力 (Compute Capabilities)

重點總覽

裝置的一般規格與可用特性都由其 compute capability (CC) 決定。CC 以 major.minor 表示(如 8.6、9.0、12.x),可用 nvidia-smi、Runtime/Driver/NVML API 取得。特性分三層:baseline(引入後後續架構皆保留)、architecture-specific(CC 9.0 起,僅 exact CC)、family-specific(CC 10.0 起,同 family 共享)。Table 29/30/31 列出各 CC 的特性與技術規格;許多上限(warp size=32、threads/block=1024 等)跨所有 CC 不變。

項目 重點
CC 用途 決定裝置的特性與技術規格
取得方式 nvidia-smicudaDeviceGetAttributecuDeviceGetAttributenvmlDeviceGetCudaComputeCapability
位元組序 所有 NVIDIA GPU 架構皆為 little-endian
baseline 特性 引入後在後續 CC 皆可用(Table 29 標 yes)
architecture-specific CC 9.0 起;編譯後綴 a;僅該 exact CC 可執行
family-specific CC 10.0 起;編譯後綴 f;僅同 family 可執行
含括關係 architecture-specific ⊇ family-specific ⊇ baseline
不變上限 warp size=32、threads/block=1024、registers/thread=255
Note

後續表格中的 KB 代表 1024 bytes(即 KiB),K 代表 1024。

取得 GPU Compute Capability

可從 NVIDIA 官方「CUDA GPU Compute Capability」頁查 GPU 型號對應的 CC;亦可在命令列或執行期程式中查詢。

命令列(NVIDIA Driver 附帶的 nvidia-smi):

# 列出系統各 GPU 名稱與 compute capability
nvidia-smi --query-gpu=name,compute_cap

執行期 API(三選一):

// CUDA Runtime API
#include <cuda_runtime_api.h>
int major, minor;
cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, device_id);
cudaDeviceGetAttribute(&minor, cudaDevAttrComputeCapabilityMinor, device_id);

// CUDA Driver API
#include <cuda.h>
cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, device_id);
cuDeviceGetAttribute(&minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, device_id);

// NVML API(需連結 -lnvidia-ml)
#include <nvml.h>
nvmlDeviceGetCudaComputeCapability(nvmlDevice, &major, &minor);
Tip

三種 API 取得的都是 major/minor 兩個整數,組合成 major.minor 即為 CC。NVML 路徑記得加上 -lnvidia-ml 連結旗標。

Feature Availability 與 Compiler Targets

大多數隨某架構引入的特性,設計上會在所有後續架構繼續提供,這類即 baseline 特性(Table 29 中標 yes)。但自 CC 9.0 起,部分高度專門化特性不再保證向後可用。

編譯器可鎖定三組 feature set,彼此為包含關係:

architecture-specific (compute_NNa)   最大集:該 CC 完整 arch 專屬特性;僅 exact CC 相容
  └─ family-specific  (compute_NNf)   中間集:同 family 共享的 arch 特性子集;僅同 family 相容
       └─ baseline    (compute_NN)    基礎集:無 arch 專屬特性;CC NN.x 及之後皆相容

Architecture-Specific Features(後綴 a,CC 9.0 起)

Family-Specific Features(後綴 f,CC 10.0 起)

範例(以 CC 10.0 為例,說明三種 target 的差異):

Target 可用特性 相容裝置
compute_100 baseline(無 arch 特性) 所有 CC 10.0 及之後
compute_100f family 共享的 arch 特性子集 同 family:CC 10.0 與 10.3
compute_100a CC 10.0 完整 arch 特性 僅 CC 10.0

Table 28:Family-Specific 相容性

Compilation Target 相容 Compute Capability
compute_100f 10.0, 10.3
compute_103f 10.3 ¹
compute_110f 11.0 ¹
compute_120f 12.0, 12.1
compute_121f 12.1

¹ 某些 family 建立時僅含單一成員,未來可能擴充更多裝置。

Note

compute_100f 所屬 family 目前涵蓋 CC 10.0 與 10.3(與上方 compute_100f 範例一致);標 ¹ 的 compute_103f/compute_110f 現階段各只有單一成員,日後納入更多 CC 時,對應 family target 的相容範圍也會隨之擴大。

Important

Tensor Core 特性集透過 inline PTX 提供於 CUDA 編譯工具鏈;官方強烈建議改用 CUDA-X 函式庫(cuDNN、cuBLAS、cuFFT)或 CUTLASS(CUDA C++ template 抽象與 Python DSL,用於高效能 GEMM)。

Features per Compute Capability(Table 29)

baseline 特性一旦在某 CC 標為 yes,後續 CC 皆延續支援。下面依「引入世代」整理主要特性(7.x 未列出的特性視為所有 CC 皆支援):

引入 CC 代表性 baseline 特性
8.x (Ampere/Ada) Warp Reduce Functions、Bfloat16 浮點運算、硬體加速 memcpy_async (Pipelines)、硬體加速 Split Arrive/Wait Barrier (Asynchronous Barriers)、L2 Cache Residency Management、DPX 指令(以多指令模擬)
9.0 (Hopper) 128-bit 整數的 atomic functions(shared/global)、atomicAdd() 對 global memory 的 float2/float4 向量、Native DPX 指令、Distributed Shared Memory、Thread Block Cluster、Tensor Memory Accelerator (TMA)

Device 與 SM 技術規格(Table 30)

跨所有列出 CC 不變的關鍵上限:

規格
Maximum dimensionality of a grid 3
Max grid x-dimension 2³¹ − 1
Max grid y- / z-dimension 65535
Max resident grids per device(Concurrent Kernel) 128
Maximum dimensionality of a thread block 3
Max thread block x- / y-dimension 1024
Max thread block z-dimension 64
Maximum threads per block 1024
Warp size 32

依 CC 變動的占用率/吞吐量規格:

項目 依 CC(例)
FP32:FP64 吞吐比(非 Tensor Core) 7.5=32:1;8.0、9.0=2:1;其餘多為 64:1
Max resident blocks per SM 16 ~ 32(如 8.6=16;8.0/9.0/10.x=32)
Max resident warps per SM 32 ~ 64(7.5=32;8.0/9.0/10.x=64;多數為 48)
Max resident threads per SM 1024 (7.5) / 1536 / 2048
Note

Green contexts 另有 useFlags 0 下的最小 SM partition size 與每 partition 的 co-scheduled alignment,兩者皆隨 CC 變動(partition size 約 2/4/8、alignment 32 或 64)。

記憶體規格(Table 31 / 32)

跨 CC 不變的記憶體上限:

項目
32-bit registers per SM 64 K
Max 32-bit registers per thread block 64 K
Max 32-bit registers per thread 255
Number of shared memory banks 32
Max local memory per thread 512 KB
Constant memory size 64 KB
Constant cache working set per SM 8 KB

各 CC 的 shared memory 容量(Table 31 + Table 32):

CC Max SMEM / SM Max SMEM / block Unified Data Cache 可配置 SMEM 階梯 (KB)
7.5 64 KB 64 KB 96 KB 32, 64
8.0 164 KB 163 KB 192 KB 0, 8, 16, 32, 64, 100, 132, 164
8.6 100 KB 99 KB 128 KB 0, 8, 16, 32, 64, 100
8.7 164 KB 163 KB 192 KB 0, 8, 16, 32, 64, 100, 132, 164
8.9 100 KB 99 KB 128 KB 0, 8, 16, 32, 64, 100
9.0 228 KB 227 KB 256 KB 0, 8, 16, 32, 64, 100, 132, 164, 196, 228
10.x 228 KB 227 KB 256 KB 0, 8, 16, 32, 64, 100, 132, 164, 196, 228
11.0 228 KB 227 KB 256 KB 0, 8, 16, 32, 64, 100, 132, 164, 196, 228
12.x 100 KB 99 KB 128 KB 0, 8, 16, 32, 64, 100
Note

可配置 SMEM 階梯為各 CC 可 opt-in 的 shared memory carveout 檔位。Unified Data Cache 同時是 texture cache working set per SM 的上限:texture cache working set per SM 在 7.5 為 32 或 64 KB,自 8.0 起為 28 KB ~(該 CC 的 Unified Data Cache 大小)。(對照:constant cache working set per SM 固定 8 KB,已列於上方不變表。)

Warning

每個 block 使用超過 48 KB shared memory 的 kernel,必須改用 dynamic shared memory 並進行明確的 opt-in(見 Configuring L1/Shared Memory Balance);否則無法配置到較大的 per-block 容量。對照上表「可配置 SMEM 階梯」:64 KB 以上的檔位都需 opt-in,≤ 48 KB(如 32 KB)則不需。

Tensor Core 輸入資料型別(Table 33)

Tensor Core 支援的輸入資料型別隨世代逐步擴充(完整對照見 Table 33):

世代 新增/支援的輸入型別
7.5 (Turing) FP16, INT8, INT4
8.0 (Ampere) 加入 FP64, TF32, BF16
8.9 (Ada) 加入 FP8
9.0 (Hopper) FP64, TF32, BF16, FP16, FP8
10.0+ (Blackwell) 加入 FP6, FP4

考試/測驗重點

題型 關鍵答案
執行期如何取得 CC? cudaDeviceGetAttributecudaDevAttrComputeCapabilityMajor/Minor)、cuDeviceGetAttributeCU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR/MINOR)、nvmlDeviceGetCudaComputeCapability
命令列查 CC? nvidia-smi --query-gpu=name,compute_cap
NVML 需要哪個連結旗標? -lnvidia-ml
baseline 特性的相容承諾? 引入後在所有後續架構皆可用(Table 29 標 yes)
architecture-specific 特性從哪個 CC 起?後綴? CC 9.0 起;後綴 a(如 compute_100a
architecture-specific target 的執行限制? 只能在編譯時的 exact CC 上執行
family-specific 特性從哪個 CC 起?後綴? CC 10.0 起;後綴 f(如 compute_120f
compute_100/100f/100a 相容差異? 100:所有 10.0+;100f:同 family(10.0、10.3);100a:僅 10.0
三組 feature set 的含括關係? architecture ⊇ family ⊇ baseline
compute_120f 相容哪些 CC? 12.0 與 12.1
warp size? 32(所有 CC)
max threads per block? 1024
max threads / warps / blocks per SM?(別與 per-block 的 1024 混淆) 7.5=1024 threads(32 warps);8.0/9.0/10.x=2048 threads(64 warps);8.6/8.7/8.9/12.x=1536 threads(48 warps);resident blocks/SM 約 16~32(此為每 SM 上限,非每 block)
max grid x-dim / y-z-dim? 2³¹ − 1 / 65535
max thread block z-dim? 64
max 32-bit registers per thread? 255
每 block 用 >48 KB shared memory 怎麼辦? 用 dynamic shared memory 並明確 opt-in
NVIDIA GPU 的位元組序? little-endian
shared memory banks 數量? 32
constant memory 大小 / constant cache/SM? 64 KB / 8 KB
CC 9.0 引入哪些 baseline 特性(例)? Thread Block Cluster、Distributed Shared Memory、TMA、128-bit 整數 atomics、native DPX