根据 NVIDIA 编程指南:
应用程序在运行时加载的任何 PTX 代码都会被进一步编译 由设备驱动程序转换为二进制代码。这就是所谓的准时制 汇编。即时编译增加了应用程序加载时间, 但允许应用程序从最新的编译器改进中受益。
...
将 CUDA_FORCE_PTX_JIT 设置为 1 会强制设备驱动程序忽略任何 嵌入应用程序中的二进制代码(请参阅第 3.1.4 节)并 即时编译嵌入式 PTX 代码;如果内核没有 有嵌入的 PTX 代码,将无法加载
我使用以下标志编译了我的简单向量添加:
nvcc -o vectorAdd -gencode arch=compute_20,code=sm_20 vectorAdd.cu
当
CUDA_FORCE_PTX_JIT
环境变量未设置时,我得到正确的结果。但是当我将 CUDA_FORCE_PTX_JIT
环境变量设置为 1
时,我从 cudaGetErrorString
收到以下错误:
invalid device function
如何解决此问题并使 CUDA_FORCE_PTX_JIT 正常工作?也许我的编译方式没有嵌入任何PTX代码。
提前致谢。
更多信息:
CUDA驱动程序版本:295.41
CUDA工具包版本:4.0
操作系统:Ubuntu 10.04
硬件:GTX 480,或 Tesla C2050
我找到了解决该问题的方法。在编译期间,不得以任何方式指定目标 GPU(删除
-arch
或 -gencode
标志)。随后,驱动程序在运行时生成目标二进制文件。