将PTX程序直接传递给CUDA驱动程序

CUDA驱动程序API提供从文件系统加载包含PTX代码的文件。 通常会做以下事情:

CUmodule module; CUfunction function; const char* module_file = "my_prg.ptx"; const char* kernel_name = "vector_add"; err = cuModuleLoad(&module, module_file); err = cuModuleGetFunction(&function, module, kernel_name); 

如果在运行时(运行中)生成PTX文件,则通过文件IO似乎是浪费(因为驱动程序必须再次加载它)。

有没有办法直接将PTX程序传递给CUDA驱动程序(例如作为C字符串)?

取自ptxjit CUDA示例:

将PTX程序定义为C字符串

 char myPtx32[] = "\n\ .version 1.4\n\ .target sm_10, map_f64_to_f32\n\ .entry _Z8myKernelPi (\n\.param .u32 __cudaparm__Z8myKernelPi_data)\n\ {\n\ .reg .u16 %rh<4>;\n\ .reg .u32 %r<8>;\n\ // Other stuff .loc 28 18 0\n\ exit;\n\ }\n\ "; 

然后

  cuModuleLoadDataEx(phModule, myPtx32, 0, 0, 0); 

最后

  cuModuleLoadDataEx(phModule, myPtx, 0, 0, 0); 

使用cuModuleLoadDataEx函数从以NULL结尾的字符串加载PTX源。