我可以为cuda nvcc编译器指定计算能力,默认值为2.0:-gencode = arch = compute_20,code = \“sm_20,compute_20 \” .
我有两台电脑 . 一个可以做compute_20,另一个可以做compute_30 . 我正在使用visual studio . 有没有指定nvcc使用最大本地卡功能?否则,我需要在每台计算机上有一个单独的项目(.vcxproj)(手动指定最大计算能力),这是不理想的 .
是的,您可以指定多个目标 . CUDA示例代码提供了如何在Visual Studio项目中执行此操作的示例 . 基本思路是通过项目... CUDA ...设备下的VS项目设置指定多个 -gencode 开关(在nvcc编译命令行上)(这也可以在逐个源文件的基础上指定) . 在Visual Studio中,您只需指定开关参数,例如:
-gencode
compute_20,sm_20;compute_30,sm_30;compute_35,sm_35;
视觉工作室cuda启用的构建系统将它转换为一系列 gencode 开关,如:
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运行时是否在选择要使用的对象时执行了预期的操作 .
__CUDA_ARCH__
1 回答
是的,您可以指定多个目标 . CUDA示例代码提供了如何在Visual Studio项目中执行此操作的示例 . 基本思路是通过项目... CUDA ...设备下的VS项目设置指定多个
-gencode
开关(在nvcc编译命令行上)(这也可以在逐个源文件的基础上指定) . 在Visual Studio中,您只需指定开关参数,例如:视觉工作室cuda启用的构建系统将它转换为一系列
gencode
开关,如:nvcc编译器将识别并为指定的各种目标生成单独的设备代码 . 这是一个相当复杂的主题,所以你可能想要阅读nvcc manual中的fatbinary系统和nvcc编译流程,或者在这里的cuda标签上研究关于它的其他问题,如this one .
预计您的其他一些问题,nvcc手册中也包含这些问题:
CUDA运行时将根据fatbinary中的可用目标选择最适合实际设备的运行时 . 如果存在精确的SASS编译二进制文件,它将使用它,否则它将采用最接近的PTX对象和JIT编译用于预期的设备 .
__CUDA_ARCH__
宏存在并在设备代码中定义 . 您可以使用它来专门化各种目标的设备代码,这将为您提供一种繁琐的机制来验证CUDA运行时是否在选择要使用的对象时执行了预期的操作 .