NVIDIA GPU的架构代号

NVIDIA GPU的架构代号

  • NVIDIA GPU的架构代号
  • 什么时候用gencode,什么时候用arch呢
  • SM_num和gencode变量
    • 费米 Fermi(cuda 3.2~cuda 8)
    • 开普勒 Kepler(cuda 5~cuda 10)
    • 麦克斯韦 Maxwell(CUDA 6~CUDA 11)
    • 帕斯卡 Pascal (CUDA 8 ~今)
    • 伏特 Volta (CUDA 9 ~今)
    • 图灵Turing (CUDA 10 ~今)
    • 安培Ampere (CUDA 11 ~今)
    • 哈珀Hopper (CUDA 12 计划中)
    • 例子:

NVIDIA GPU的架构代号

使用NVIDIA GPU时,难免会用到nvcc来编译自己写的cuda代码,nvcc要求我们给一个-arch选项或者-gencode选项,gencode也可以从ptx编译代码。但是NVIDIA的架构代号很多,有GA-{num}类型,也有sm_{num}类型,有时候给人整不会了都。GA系列的架构代号网络上的解释很多,这里不多扯了。sm的代号他们有这么多,大家看看:
sm_20 sm_30 sm_50 sm_60 sm_70 sm_75 sm_80 sm_901 ? sm_35 sm_52 sm_61 sm_72 sm_86 sm_37 sm_53 sm_62

什么时候用gencode,什么时候用arch呢

如果你写的cuda代码,那么最好就是用-arch。这样也会加快runtime,因为直接编译出obj。如果仅仅使用-gencode,而没有使用-arch,CPU的codegen会发生在JIT阶段,就是在runtime编译device code。
接下来介绍架构代码了。

SM_num和gencode变量

费米 Fermi(cuda 3.2~cuda 8)

SM20 or SM_20, compute_30 –
GeForce 400, 500, 600, GT-630.
CUDA 10 以后就完全不支持了。

开普勒 Kepler(cuda 5~cuda 10)

SM30 or SM_30, compute_30 –
GeForce 700, GT-730
支持了统一内存模型编程

SM35 or SM_35, compute_35 –
Tesla K40.
支持动态并行化。

SM37 or SM_37, compute_37 –
Tesla K80.
增加了一些寄存器。

CUDA 11 以后就完全不支持了。

麦克斯韦 Maxwell(CUDA 6~CUDA 11)

SM50 or SM_50, compute_50 –
Tesla/Quadro M 系列

SM52 or SM_52, compute_52 –
Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X

SM53 or SM_53, compute_53 –
Tegra (Jetson) TX1 / Tegra X1, Drive CX, Drive PX, Jetson Nano

cuda 11 以后彻底不支持

帕斯卡 Pascal (CUDA 8 ~今)

SM60 or SM_60, compute_60 –
Quadro GP100, Tesla P100, DGX-1 (Generic Pascal)

SM61 or SM_61, compute_61–
GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4, Discrete GPU on the NVIDIA Drive PX2

SM62 or SM_62, compute_62 –
Integrated GPU on the NVIDIA Drive PX2, Tegra (Jetson) TX2

伏特 Volta (CUDA 9 ~今)

SM70 or SM_70, compute_70 –
DGX-1 with Volta, Tesla V100, GTX 1180 (GV104), Titan V, Quadro GV100

SM72 or SM_72, compute_72 –
Jetson AGX Xavier, Drive AGX Pegasus, Xavier NX

图灵Turing (CUDA 10 ~今)

SM75 or SM_75, compute_75 –
GTX/RTX Turing – GTX 1660 Ti, RTX 2060, RTX 2070, RTX 2080, Titan RTX, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000, Quadro T1000/T2000, Tesla T4

安培Ampere (CUDA 11 ~今)

SM80 or SM_80, compute_80 –
NVIDIA A100 (不再用特斯拉(Tesla)做名字了 – GA100), NVIDIA DGX-A100

SM86 or SM_86, compute_86 – (from CUDA 11.1 onwards)
Tesla GA10x, RTX Ampere – RTX 3080, GA102 – RTX 3090, RTX A6000, RTX A40

“计算能力高于 8.6 的比8.0的有2倍以上 FP32 的计算能力 (单位:ops/cycle/SM)。 从8.0上编译出的二进制文件也可以在8.6上运行,但还是推荐在fp32类型上使用8.6的编译选项。“2

哈珀Hopper (CUDA 12 计划中)

SM90 or SM_90, compute_90 –
NVIDIA H100 (GH100)

例子:

-arch=sm_30 \
 -gencode=arch=compute_20,code=sm_20 \
 -gencode=arch=compute_30,code=sm_30 \
 -gencode=arch=compute_50,code=sm_50 \
 -gencode=arch=compute_52,code=sm_52 \
 -gencode=arch=compute_52,code=compute_52

  1. 可能是hopper,也就是是tesla-next。 ↩︎

  2. https://docs.nvidia.com/cuda/ampere-tuning-guide/index.html#improved_fp32 ↩︎

你可能感兴趣的:(GPU学习,架构,nvidia)