OpenCL编译器预处理定义?

时间:2009-10-09 18:58:55

标签: osx-snow-leopard opencl

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

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

2 个答案:

答案 0 :(得分:5)

clBuildProgram API需要编译器参数(const char * options参数)。

-D MYMACRO被理解,-D MYMACRO=value也是如此。

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

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__

答案 1 :(得分:1)

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

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

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

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