【问题标题】:Using #include to load OpenCL code使用 #include 加载 OpenCL 代码
【发布时间】:2010-11-27 18:47:32
【问题描述】:

我很久以前就看到过使用 hlsl/glsl 着色器代码完成此操作 - 在源代码文件上使用 #include 将代码粘贴到 char* 中,这样运行时就不会发生文件 IO。

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

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

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

【问题讨论】:

    标签: c++ c opencl c-preprocessor


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      查看子弹物理引擎使用 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;
         }
      );
      

      【讨论】:

      • 如果您的 .cl 文件包含括号中未包含的逗号,例如“int x, y;”,则它不起作用,它会在“int x”之后结束您的字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多