使用#include加载OpenCL代码
我很久以前就用hlsl / glsl着色器代码看到了这一点 – 在源代码文件上使用#include
将代码粘贴到char*
这样在运行时就不会发生文件IO。
如果我将它表示为伪代码,它看起来有点像这样:
#define CLSourceToString(filename) " #include "filename" " const char* kernel = CLSourceToString("kernel.cl");
现在当然#define
不会起作用,因为它只会尝试使用这些引号来启动字符串。
有关如何对内核执行此操作,请参阅子弹物理引擎对OpenCL的使用。
在C ++ / C源代码中
#define MSTRINGIFY(A) #A char* stringifiedSourceCL = #include "VectorAddKernels.cl"
在OpenCL源代码中
MSTRINGIFY( __kernel void VectorAdd(__global float8* c) { // snipped out OpenCL code... return; } );
根据这个 ,它是不可能的,但你可以使用xxd -i
来达到同样的效果。