2009-10-09 70 views
2

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

我想知道代码是否为CPU或GPU编译,因此我可以使用printf语句进行调试。

回答

5

clBuildProgram API接受编译参数(参数const char * options)。

-D MYMACRO被理解,因此是-D MYMACRO=value

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

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__
1

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

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

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

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