CUDA nvcc - 使用本地卡最大计算能力构建

时间:2015-10-07 15:12:14

标签: cuda

我可以向cuda nvcc编译器指定计算能力,默认值为2.0:-gencode = arch = compute_20,code = \" sm_20,compute_20 \"。

我有两台电脑。一个可以做compute_20,另一个可以做compute_30。我正在使用visual studio。有没有指定nvcc使用最大本地卡功能?否则,我需要在每台计算机上都有一个单独的项目(.vcxproj)(手动指定最大计算能力),这不是理想的。

1 个答案:

答案 0 :(得分:1)

是的,您可以指定多个目标。 CUDA示例代码提供了如何在Visual Studio项目中执行此操作的示例。基本的想法是通过项目下的VS项目设置指定多个-gencode开关(在nvcc编译命令行上)... CUDA ... device(这也可以在源文件中指定)基础)。在Visual Studio中,您只需指定开关参数,例如:

 compute_20,sm_20;compute_30,sm_30;compute_35,sm_35;

并且visual studio cuda启用的构建系统会将其转换为gencode开关的序列,如:

-gencode arch=compute20,code=sm_20 -gencode arch=compute_30,code=sm_30 ...

nvcc编译器将识别并为指定的各种目标生成单独的设备代码。这是一个相当复杂的主题,所以你可能想要阅读nvcc manual中的fatbinary系统和nvcc编译流程,或者在这里的cuda标签上研究关于它的其他问题,如this one。< / p>

预测您的其他一些问题,nvcc手册中也包含这些问题:

  1. CUDA运行时将根据fatbinary中的可用目标选择最适合实际设备的运行时。如果存在精确的SASS编译二进制文件,它将使用它,否则它将采用最接近的PTX对象和JIT编译用于预期的设备。

  2. __CUDA_ARCH__宏存在,并在设备代码中定义。您可以使用它来专门化各种目标的设备代码,这将为您提供一种繁琐的机制来验证CUDA运行时是否在选择要使用的对象时做了预期的事情。