首页 文章

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

提问于
浏览
1

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

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

1 回答

  • 1

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

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

    视觉工作室cuda启用的构建系统将它转换为一系列 gencode 开关,如:

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

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

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

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

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

相关问题