指定虚拟架构计算能力

编译指令(指定虚拟架构计算能力)

1
-arch=compute_XY

XY:第一个数字X代表计算能力的主版本号,第二个数字Y代表计算能力的次版本号。
例如:

1
nvcc helloworld.cu -o helloworld -arch=compute_61

只能在计算能力>= 6.1的GPU上面运行。

指定真实架构计算能力

编译指令(指定真实架构计算能力)

1
-code=sm_XY

XY:第一个数字X代表计算能力的主版本号,第二个数字Y代表计算能力的次版本号。

注意:

  1. 二进制cubin代码,大版本之间不兼容
  2. 指定真实架构计算能力时必须指定虚拟架构计算能力
  3. 指定的真实架构能力必须大于或等于虚拟架构能力
  4. 真实架构可以实现低小版本到高小版本的兼容

指定多个GPU版本编译

1
2
3
4
-gencode=arch=compute_35,code=sm_35
-gencode=arch=compute_50,code=sm_50
-gencode=arch=compute_60,code=sm_60
-gencode=arch=compute_70,code=sm_70

注意:

  1. 执行上述指令必须CUDA版本支持7.0计算能力,否则报错
  2. 过多指定计算能力,会增加编译时间和可执行文件大小

nvcc即时编译

在运行可执行文件时,从保留的PTX代码临时编译出cubin文件。
在可执行文件中保留PTX代码,nvcc编译指令指定所保留的PTX代码虚拟架构
指令:

1
-gencode=arch=compute_XY,code=compute_XY

注意:

  1. 两个计算能力都是虚拟架构计算能力
  2. 两个虚拟架构计算能力必须一致

简化:

1
-arch=sm_XY

等价于:

1
-gencode=arch=compute_61,code=sm_61