0

根据 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

4

1 回答 1

0

我找到了一个锻炼来解决这个问题。在编译期间,无论如何都不能指定目标 GPU(删除-arch-gencode标志)。随后,驱动程序在运行时生成目标二进制文件。

于 2013-02-01T16:20:17.210 回答