如果我编译具有较低计算能力的 CUDA 程序,例如 1.3(nvcc 标志 sm_13),并在具有 Compute Capability 2.1 的设备上运行它,它会利用 Compute 2.1 的功能吗?
在那种情况下,计算 2.1 设备的行为会像计算 1.3 设备一样吗?
不,它不会利用您需要明确编程的任何功能。只有那些对用户透明的特性(如缓存或更大的寄存器文件)才会被使用。
此外,您需要确保您的目标文件包含编译为 PTX 中间语言的代码版本,该版本可以动态编译为目标架构,否则您的程序甚至无法运行。
编译为虚拟架构 ( nvcc -arch compute_13
) 以确保这一点,或者使用-gencode
nvcc 选项为多个架构创建包含代码的胖二进制文件。
使用胖二进制文件,如果将代码包装在#if __CUDA_ARCH__ >= xyz
预处理器条件中,则可以针对仅在更高计算能力上可用的功能进行编程。