nvidia 各 GPU 架构匹配的 CUDA arch 和 CUDA gencode
使用 NVCC 进行编译 cuda c(.cu
)时,arch 标志 (-arch
) 指定了 CUDA 文件将为其编译的 NVIDIA GPU 架构的名称。
Gencodes (-gencode
) 允许更多的 PTX 代,并且可以针对不同的架构重复多次。
NVIDIA 架构名称的列表,以及它们具有的计算能力:
Fermi | Kepler | Maxwell | Pascal | Volta | Turing | Ampere | Lovelace | Hopper |
---|---|---|---|---|---|---|---|---|
sm_20 | sm_30 | sm_50 | sm_60 | sm_70 | sm_75 | sm_80 | sm_90 | sm_100 |
sm_35 | sm_52 | sm_61 | sm_72 | sm_86 | ||||
sm_37 | sm_53 | sm_62 |
- Fermi 和 Kepler 从 CUDA 9 和 11 开始弃用
- Maxwell 从 CUDA 12 开始弃用
- Lovelace 是取代 Ampere (AD102) 的微架构
什么时候应该使用不同的gencodes
或cuda arch
?
当编译 CUDA 代码时,应该始终只编译一个-arch
与最常用的 GPU 卡匹配的标志。这将实现更快的运行时,因为代码生成将在编译期间发生。
如果只提及-gencode
,而忽略-arch
标志,则 CUDA 驱动程序将在JIT编译器上生成 GPU 代码。
当想要加速 CUDA 编译时,想要减少不相关的 -gencode
标志的数量。但是,有时可能希望通过添加更全面的 -gencode
标志来获得更好的 CUDA 向后兼容性。