2009-10-09 69 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)) 

(請注意括號,它們很重要,因爲您可以插入變量中的任何表達式以及正確評估的表達式)

這有助於提高應用程序的速度。