使用#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来达到同样的效果。