我在Snow Leopard上开发OpenCL代码,并明白OpenCL即时编译是由Clang/LLVM完成的。是否使用了C预处理器?有没有办法用编译器设置预处理定义?什么定义存在?OpenCL编译器预处理定义?
我想知道代码是否为CPU或GPU编译,因此我可以使用printf语句进行调试。
我在Snow Leopard上开发OpenCL代码,并明白OpenCL即时编译是由Clang/LLVM完成的。是否使用了C预处理器?有没有办法用编译器设置预处理定义?什么定义存在?OpenCL编译器预处理定义?
我想知道代码是否为CPU或GPU编译,因此我可以使用printf语句进行调试。
clBuildProgram
API接受编译参数(参数const char * options
)。
-D MYMACRO
被理解,因此是-D MYMACRO=value
。
至于什么预定义的宏,请参阅OpenCL规范以获取完整列表(参见6.9节)。非详尽的列表:
__FILE__
__LINE__
__OPENCL_VERSION__
您还可以使用OpenCL的 “预处理”(在C等)来定义的定义:
#define dot3(x1, y1, z1, x2, y2, z2) ((x1)*(x2) + (y1)*(y2) + (z1)*(z2))
(请注意括号,它们很重要,因为您可以插入变量中的任何表达式以及正确评估的表达式)
这有助于提高应用程序的速度。