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