Using #include to load OpenCL code

2019-02-09 21:14发布

I've seen this done long ago with hlsl/glsl shader code -- using an #include on the source code file that pastes the code into a char* so that no file IO happens at runtime.

If I were to represent it as pseudo-code, it would look a little like this:

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

Now of course that #define isn't going to work because it'll just try to use those quotation marks to start strings.

2条回答
我命由我不由天
2楼-- · 2019-02-09 21:37

According to this, it's not possible, but you can use xxd -i to archieve the same effect.

查看更多
地球回转人心会变
3楼-- · 2019-02-09 21:38

See the bullet physics engines use of OpenCL for how to do this to a kernel.

In C++ / C source

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

In the OpenCL source

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);
查看更多
登录 后发表回答