使用#include加载OpenCL代码

时间:2009-09-12 16:40:58

标签: c++ c opencl c-preprocessor

我很久以前就用hlsl / glsl着色器代码看到了这一点 - 在源代码文件上使用#include将代码粘贴到char*中,以便在运行时不会发生文件IO

如果我将它表示为伪代码,它看起来会像这样:

#define CLSourceToString(filename) " #include "filename" "
const char* kernel = CLSourceToString("kernel.cl");

当然,#define当然不会起作用,因为它只会尝试使用这些引号来启动字符串。

2 个答案:

答案 0 :(得分:12)

请参阅子弹物理引擎使用OpenCL for howkernel执行此操作。

在C ++ / C源代码

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"

在OpenCL源代码中

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);

答案 1 :(得分:4)

根据this,这是不可能的,但您可以使用xxd -i来达到同样的效果。