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