Matching SM architectures (CUDA arch and CUDA gencode) for various NVIDIA cards

I’ve seen some confusion regarding NVIDIA’s nvcc sm flags and what they’re used for:
When compiling with NVCC, the arch flag (‘-arch‘) specifies the name of the NVIDIA GPU architecture that the CUDA files will be compiled for.
Gencodes (‘-gencode‘) allows for more PTX generations, and can be repeated many times for different architectures.

When should different ‘gencodes’ or ‘cuda arch’ be used?

When you compile CUDA code, you should always compile only one ‘-arch‘ flag that matches your most used GPU cards. This will enable faster runtime, because code generation will occur during compilation.
If you only mention ‘-gencode‘, but omit the ‘-arch‘ flag, the GPU code generation will occur on the JIT compiler by the CUDA driver.

When you want to speed up CUDA compilation, you want to reduce the amount of irrelevant ‘-gencode‘ flags. However, sometimes you may wish to have better CUDA backwards compatibility by adding more comprehensive ‘-gencode‘ flags.

Find out which GPU you have, and which CUDA version you have first.

Supported SM and Gencode variations

Below are the supported sm variations and sample cards from that generation

Supported on CUDA 7 and later

  • Fermi (CUDA 3.2 until CUDA 8) (deprecated from CUDA 9):
    • SM20 or SM_20, compute_30 – Older cards such as GeForce 400, 500, 600, GT-630
  • Kepler (CUDA 5 and later):
    • SM30 or SM_30, compute_30 – Kepler architecture (generic – Tesla K40/K80, GeForce 700, GT-730)
      Adds support for unified memory programming
    • SM35 or SM_35, compute_35 – More specific Tesla K40
      Adds support for dynamic parallelism. Shows no real benefit over SM30 in my experience.
    • SM37 or SM_37, compute_37 – More specific Tesla K80
      Adds a few more registers. Shows no real benefit over SM30 in my experience
  • Maxwell (CUDA 6 and later):
    • SM50 or SM_50, compute_50 – Tesla/Quadro M series
    • 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
  • Pascal (CUDA 8 and later)
    • 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 and later)
    • 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
  • Turing (CUDA 10 and later)
    • SM75 or SM_75, compute_75 – GTX Turing – GTX 1660 Ti, RTX 2060, RTX 2070, RTX 2080, Titan RTX, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000

Sample Flags

According to NVIDIA:

The arch= clause of the -gencode= command-line option to nvcc specifies the front-end compilation target and must always be a PTX version. The code= clause specifies the back-end compilation target and can either be cubin or PTX or both. Only the back-end target version(s) specified by the code= clause will be retained in the resulting binary; at least one must be PTX to provide Volta compatibility.

Sample flags for generation on CUDA 7 for maximum compatibility:

 
  1. -arch=sm_30 \
  2. -gencode=arch=compute_20,code=sm_20 \
  3. -gencode=arch=compute_30,code=sm_30 \
  4. -gencode=arch=compute_50,code=sm_50 \
  5. -gencode=arch=compute_52,code=sm_52 \
  6. -gencode=arch=compute_52,code=compute_52

Sample flags for generation on CUDA 8 for maximum compatibility:

 
  1. -arch=sm_30 \
  2. -gencode=arch=compute_20,code=sm_20 \
  3. -gencode=arch=compute_30,code=sm_30 \
  4. -gencode=arch=compute_50,code=sm_50 \
  5. -gencode=arch=compute_52,code=sm_52 \
  6. -gencode=arch=compute_60,code=sm_60 \
  7. -gencode=arch=compute_61,code=sm_61 \
  8. -gencode=arch=compute_61,code=compute_61

Sample flags for generation on CUDA 9 for maximum compatibility with Volta cards. 
Note the removed SM_20:

 
  1. -arch=sm_50 \
  2. -gencode=arch=compute_50,code=sm_50 \
  3. -gencode=arch=compute_52,code=sm_52 \
  4. -gencode=arch=compute_60,code=sm_60 \
  5. -gencode=arch=compute_61,code=sm_61 \
  6. -gencode=arch=compute_70,code=sm_70 \
  7. -gencode=arch=compute_70,code=compute_70

Sample flags for generation on CUDA 10 for maximum compatibility with Turing cards:

 
  1. -arch=sm_50 \
  2. -gencode=arch=compute_50,code=sm_50 \
  3. -gencode=arch=compute_52,code=sm_52 \
  4. -gencode=arch=compute_60,code=sm_60 \
  5. -gencode=arch=compute_61,code=sm_61 \
  6. -gencode=arch=compute_70,code=sm_70 \
  7. -gencode=arch=compute_75,code=sm_75 \
  8. -gencode=arch=compute_75,code=compute_75

CATEGORIESGCCGPUSTAGSCOMPUTECOMPUTE_52CUDACUDA ARCHGENCODEGPUGTX 1080NVCCNVCC ARCHNVCC FLAGSNVCC SMNVIDIANVIDIA SMPASCALSM

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值