我的开发工作站目前有 NVIDIA Quadro K2200 和 K620。两者都具有 CUDA 计算能力 5.0。然而,最终的生产系统有一个 CUDA 计算能力为 3.7 的 Tesla K80。
是否可以在我的 Quadro GPU 上安装和开发用于计算能力 3.7 的 CUDA 程序,然后将它们转移到 K80 而无需进行重大更改?
是的,这是可能的。确保不要在您的代码中使用任何计算能力5.0+ 特定功能,并且您应该能够在 cc3.7 设备或 cc5.0 设备上正确运行您的代码。
编译代码时,为两种计算能力指定目标架构,例如
-gencode arch=compute_50,code=sm_50 -gencode arch=compute_37,code=sm_37
并且这样的编译方法应该可以在任一平台上使用以创建可用的二进制文件。此外,以这种方式编译将导致编译器标记您可能无意中使用了 cc5.0+ 特定功能的任何情况。
我认为您不太可能无意中使用 cc5.0+ 特定功能;它们不会成为常见 CUDA 使用的一部分。例如,如果您尝试使用lop3.b32
inline PTX 中的指令,这将无法在 cc3.7 设备上运行(并且使用上述编译开关,编译器会为您标记。)