計算能力 (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-smi、cudaDeviceGetAttribute、cuDeviceGetAttribute、nvmlDeviceGetCudaComputeCapability |
| 位元組序 | 所有 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 |
後續表格中的 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);
三種 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 起)
- 針對特化運算(如 Tensor Core 操作)的加速,不保證在後續 CC 提供,或可能在未來世代大幅改變。
- 需用 architecture-specific compiler target 啟用,例如
compute_100a、compute_120a。 - 以此 target 編譯的程式碼只能在它編譯時的 exact compute capability 上執行。
Family-Specific Features(後綴 f,CC 10.0 起)
- 部分 architecture-specific 特性為多個 CC 共有,這些裝置屬於同一 family,特性即 family-specific。
- family-specific 特性保證在同 family 所有裝置可用;以
compute_100f、compute_120f等啟用。 - 以 family-specific target 編譯的程式碼只能在屬於該 family 的 GPU 上執行。
- 慣例上同一 major CC 的後世代裝置多屬同一 family(少數例外,見 Table 28)。
範例(以 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 建立時僅含單一成員,未來可能擴充更多裝置。
compute_100f 所屬 family 目前涵蓋 CC 10.0 與 10.3(與上方 compute_100f 範例一致);標 ¹ 的 compute_103f/compute_110f 現階段各只有單一成員,日後納入更多 CC 時,對應 family target 的相容範圍也會隨之擴大。
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) |
- DPX 在 8.x 以多條指令完成,自 9.0 起為 native 加速指令。
- 128-bit 精度浮點運算屬於後續世代新增特性(早期 No、後續 Yes)。
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 |
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 |
可配置 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,已列於上方不變表。)
每個 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 支援越多低精度型別(FP8/FP6/FP4),以加速 AI/GEMM 工作負載。
- 透過 inline PTX 可直接使用,但建議經由 CUDA-X 函式庫或 CUTLASS。
考試/測驗重點
| 題型 | 關鍵答案 |
|---|---|
| 執行期如何取得 CC? | cudaDeviceGetAttribute(cudaDevAttrComputeCapabilityMajor/Minor)、cuDeviceGetAttribute(CU_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 |
Related Notes
- 05-Technical-Appendices/15-CUDA-Cpp-Execution-Model
- 05-Technical-Appendices/06-Function-and-Variable-Annotations
- 01-Introduction-to-CUDA/05-CUDA-Platform
- 02-Programming-GPUs/17-NVCC-Compiler
- 05-Technical-Appendices/02-CUDA-Environment-Variables
- 05-Technical-Appendices/Practice-Technical-Appendices
- 00-Dashboard/Exam-Traps