私はSnowLeopardでOpenCLコードを開発しており、OpenCLのジャストインタイムコンパイルがClang/LLVMによって行われることを理解しています。Cプリプロセッサは使用されていますか?コンパイラで前処理定義を設定する方法はありますか?どのような定義がありますか?
コードがCPU用にコンパイルされているのかGPU用にコンパイルされているのかを認識して、たとえばデバッグにprintfステートメントを使用できるようにします。
私はSnowLeopardで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))
(角かっこに注意してください。変数に任意の式を挿入でき、式が正しく評価されるため、角かっこは重要です)
これは、アプリケーションの速度を向上させるのに役立ちます。