7

如果我编译具有较低计算能力的 CUDA 程序,例如 1.3(nvcc 标志 sm_13),并在具有 Compute Capability 2.1 的设备上运行它,它会利用 Compute 2.1 的功能吗?

在那种情况下,计算 2.1 设备的行为会像计算 1.3 设备一样吗?

4

1 回答 1

10

不,它不会利用您需要明确编程的任何功能。只有那些对用户透明的特性(如缓存或更大的寄存器文件)才会被使用。

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

编译为虚拟架构 ( nvcc -arch compute_13) 以确保这一点,或者使用-gencodenvcc 选项为多个架构创建包含代码的胖二进制文件。

使用胖二进制文件,如果将代码包装在#if __CUDA_ARCH__ >= xyz预处理器条件中,则可以针对仅在更高计算能力上可用的功能进行编程。

于 2012-09-14T12:19:29.310 回答