根据 NVIDIA 编程指南:
应用程序在运行时加载的任何 PTX 代码都由设备驱动程序进一步编译为二进制代码。这称为即时编译。即时编译增加了应用程序加载时间,但允许应用程序从最新的编译器改进中受益。
...
将 CUDA_FORCE_PTX_JIT 设置为 1 会强制设备驱动程序忽略应用程序中嵌入的任何二进制代码(参见第 3.1.4 节),并改为实时编译嵌入的 PTX 代码;如果内核没有嵌入式 PTX 代码,它将无法加载
我已经使用以下标志编译了我的简单 vectorAdd :
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