如何使用CUDA_FORCE_PTX_JIT?

时间:2013-01-27 12:23:19

标签: linux cuda nvcc

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

1 个答案:

答案 0 :(得分:0)

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