【发布时间】:2014-12-01 16:09:18
【问题描述】:
我对“-gencode”语句中的“code=sm_X”选项有点困惑。
一个例子:NVCC 编译器选项有什么作用
-gencode arch=compute_13,code=sm_13
嵌入到库中?
只有 CC 1.3 的 GPU 的机器代码(cubin 代码),或者 也 CC 1.3 的 GPU 的 PTX 代码?
在“Maxwell 兼容性指南”中,声明“只有 'code=' 子句指定的后端目标版本将保留在生成的二进制文件中”。
据此,我推断给定的编译器选项只为具有 CC 1.3 和 no PTX 代码的 GPU 嵌入机器代码。这意味着它不可能运行这个库,例如在 Maxwell 代卡上,因为库中没有嵌入 PTX 代码,机器代码可以从中“即时”(JIT) 编译。
另一方面,在 NVIDIA 的 GTC 2013 演示文稿“将 CUDA 工具包作为应用程序构建工具介绍”中,声明“-gencode arch=compute_13,code=sm_13”对于所有带有 CC 的 GPU 来说已经足够了>= 1.3,并且对于 CC > 1.3 的 GPU 使用此编译器选项,机器代码是来自 PTX 代码的 JIT-ed。因此,我认为 Maxwell 兼容性指南和此 GTC 演示文稿中提供的信息相互矛盾。
【问题讨论】: