根据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
操作系统:Ubuntu10.04
硬件: GTX 480,或Tesla C2050
发布于 2013-02-01 16:20:17
我找到了一个解决这个问题的方法。在编译期间,无论如何都不能指定目标GPU (删除-arch或-gencode标志)。随后,驱动程序在运行时生成目标二进制文件。
https://stackoverflow.com/questions/14547261
复制相似问题