我最近开始讨论NVCC如何为不同的计算架构编译CUDA设备代码。 根据我的理解,当使用NVCC的-gencode选项时,“arch”是程序员应用程序所需的最小计算体系结构,也是NVCC的JIT编译器编译PTX代码的最小设备计算体系结构。 我也明白,-gencode的“code”参数是NVCC完全编译应用程序的计算体系结构,因此不需要JIT编译。 经过对各种CUDA项目Makefiles的检查,我发现定期发生以下情况: -gencode arch=compute_20,code=sm_20 -gencode arch=compute_20,code=sm_21 -gencode arch=compute_21,code=sm_21 经过一番阅读后,我发现可以在一个二进制文件中编译多个设备体系结构 – 在本例中为sm_20,sm_21。 我的问题是为什么有这么多的拱/码对是必要的? 以上是否使用了“拱”的所有值? 有什么区别和说: -arch compute_20 -code sm_20 -code sm_21 自动select“拱”字段中最早的虚拟体系结构还是存在一些其他模糊的行为? 有没有其他编译和运行时行为,我应该知道的? 我已阅读手册, http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-compilation ,我仍然不清楚在编译或运行时会发生什么。 干杯, 詹姆士。