将 PTX 程序直接传递给 CUDA 驱动程序
Posted
技术标签:
【中文标题】将 PTX 程序直接传递给 CUDA 驱动程序【英文标题】:Passing the PTX program to the CUDA driver directly 【发布时间】:2013-03-28 08:59:54 【问题描述】: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 似乎是一种浪费(因为驱动程序必须再次加载它)。
有没有办法(例如,作为 C 字符串)?
【问题讨论】:
【参考方案1】:取自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);
【讨论】:
【参考方案2】:使用 cuModuleLoadDataEx 函数从以 NULL 结尾的字符串加载 PTX 源。
【讨论】:
以上是关于将 PTX 程序直接传递给 CUDA 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
我可以将“静态”CUDA 内核启动与 PTX 代码结合起来并获得一个工作二进制文件吗?