0
現在、私はOpenCLプログラム(オンラインコンパイル)を配布中です。OpenCLビルド:カーネルコードのストリングの利点
私のカーネルコードは、*.cl
ファイルにあり、カーネル構築中に読み込まれます。カーネルソースコードを同じ目的のために*.cl
の代わりに直接読むことができる文字列リテラルに変換することも可能であると思います。
私の質問は、カーネルコードを文字列で書くことのメリットは?
現在、私はOpenCLプログラム(オンラインコンパイル)を配布中です。OpenCLビルド:カーネルコードのストリングの利点
私のカーネルコードは、*.cl
ファイルにあり、カーネル構築中に読み込まれます。カーネルソースコードを同じ目的のために*.cl
の代わりに直接読むことができる文字列リテラルに変換することも可能であると思います。
私の質問は、カーネルコードを文字列で書くことのメリットは?
利点:
例:
const char *KernelSource = "\n" \
"__kernel void square( \n" \
" __global float* input, \n" \
" __global float* output, \n" \
" const unsigned int count) \n" \
"{ \n" \
" int i = get_global_id(0); \n" \
" if(i < count) \n" \
" output[i] = input[i] * input[i]; \n" \
"} \n";
program = clCreateProgramWithSource(context, 1, (const char **) &KernelSource, NULL, &err);
欠点は、文字列を使用する場合、カーネルソースを変更するたびにホストプログラムを再コンパイルする必要があることです。カーネルをファイルに置いた場合、カーネルは独立してコンパイルできます。 – Ruyk
が '@ replace_me @'のような部品とすることができ、一つは動的に変更された値に置き換えると、ローカル配列のサイズ等の異なるパラメータで同じコード(ローカル配列を再コンパイルすることができサイズは定数でなければならないので、ローカル配列に異なるサイズが必要なときはいつでも再コンパイルできます)。 '__local float data [@replace_me _ @];' –
コード内の文字列にコードを入れることをお勧めします。ファイルを開くよりもはるかに簡単です。 – DarkZeros
@huseyintugrulbuyukisik:これらの定数プリミティブ( '-DSIZE = NUM')の転送にコンパイラ定義を使用する方が良いでしょうか? –