指定虚拟架构计算能力
编译指令(指定虚拟架构计算能力)
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代表计算能力的次版本号。
注意:
- 二进制cubin代码,大版本之间不兼容
- 指定真实架构计算能力时必须指定虚拟架构计算能力
- 指定的真实架构能力必须大于或等于虚拟架构能力
- 真实架构可以实现低小版本到高小版本的兼容
指定多个GPU版本编译
1 | -gencode=arch=compute_35,code=sm_35 |
注意:
- 执行上述指令必须CUDA版本支持7.0计算能力,否则报错
- 过多指定计算能力,会增加编译时间和可执行文件大小
nvcc即时编译
在运行可执行文件时,从保留的PTX代码临时编译出cubin文件。
在可执行文件中保留PTX代码,nvcc编译指令指定所保留的PTX代码虚拟架构
指令:
1 | -gencode=arch=compute_XY,code=compute_XY |
注意:
- 两个计算能力都是虚拟架构计算能力
- 两个虚拟架构计算能力必须一致
简化:
1 | -arch=sm_XY |
等价于:
1 | -gencode=arch=compute_61,code=sm_61 |