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字符串)?
答案 0 :(得分:4)
取自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);
答案 1 :(得分:0)
使用cuModuleLoadDataEx函数从以NULL结尾的字符串加载PTX源。