2

我正在 Snow Leopard 上开发 OpenCL 代码,并且了解 OpenCL 即时编译是由 Clang/LLVM 完成的。是否使用了 C 预处理器?有没有办法用编译器设置预处理定义?存在哪些定义?

我希望代码知道它是为 CPU 还是 GPU 编译的,所以我可以使用 printf 语句进行调试。

4

2 回答 2

5

API采用clBuildProgram编译器参数(const char * options参数)。

-D MYMACRO被理解,所以是-D MYMACRO=value

至于预定义的宏,请参阅 OpenCL 规范以获取完整列表(第 6.9 节)。非详尽清单:

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__
于 2009-10-09T20:19:12.090 回答
2

您还可以使用 OpenCL“预处理器”来定义定义(如在 C 中):

#define dot3(x1, y1, z1, x2, y2, z2) ((x1)*(x2) + (y1)*(y2) + (z1)*(z2))

(注意括号,它们很重要,因为您可以在变量中插入任何表达式并且表达式得到正确评估)

这有助于提高您的应用程序的速度。

于 2010-07-10T23:22:29.163 回答