CUDA应用程序是否';计算能力自动升级?

CUDA应用程序是否';计算能力自动升级?,cuda,nvcc,Cuda,Nvcc,如果我编译一个计算能力较低的CUDA程序,例如1.3(nvcc标志sm_13),并在计算能力为2.1的设备上运行它,它是否会利用Compute 2.1的功能 在这种情况下,compute 2.1设备是否会像compute 1.3设备一样工作?不,它不会利用您需要显式编程的任何功能。 仅使用对用户透明的功能(如缓存或更大的寄存器文件) 此外,您需要确保您的目标文件包含编译为PTX中间语言的代码版本,该版本可以动态编译为目标体系结构,否则您的程序甚至不会运行 编译到虚拟体系结构(nvcc-arch

如果我编译一个计算能力较低的CUDA程序,例如1.3(nvcc标志sm_13),并在计算能力为2.1的设备上运行它,它是否会利用Compute 2.1的功能


在这种情况下,compute 2.1设备是否会像compute 1.3设备一样工作?

不,它不会利用您需要显式编程的任何功能。 仅使用对用户透明的功能(如缓存或更大的寄存器文件)

此外,您需要确保您的目标文件包含编译为PTX中间语言的代码版本,该版本可以动态编译为目标体系结构,否则您的程序甚至不会运行

编译到虚拟体系结构(
nvcc-arch compute_13
)以确保,或者使用nvcc的
-gencode
选项为多个体系结构创建一个包含代码的fat二进制文件


使用fat二进制文件,如果将代码包装在
\if uuu CUDA\u ARCH\uuuu>=xyz
预处理器条件中,则只能为更高计算能力上可用的功能编程。

谢谢您的回答。我更喜欢为所有计算功能创建带代码的fat二进制文件。请注意,最好的选择是两者兼而有之(创建一个也包含PTX版本的fat二进制文件)。这样,即使在未来的GPU上使用不同的指令集,程序也会一直运行。我之前评论的第二部分格式不正确。我把它移到了答案上。