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