我正在开发Snow Leopard上的OpenCL代码,并了解OpenCL即时编译是由Clang / LLVM完成的。是否使用C预处理器?有没有办法用编译器设置预处理定义?存在什么定义?
我希望代码能够知道它是为CPU还是GPU编译的,所以我可以使用printf语句进行调试。
答案 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))
(注意括号,它们很重要,因为您可以在变量中插入任何表达式并正确评估表达式)
这有助于提高应用程序的速度。