0

次のスニペットprintf()では、コードで使用して、input[i]計算の結果を印刷しようとしているので、正しく機能していることがわかります。

しかし、これは私が望んでいたようには機能しません。これは、引用符がprintf()カーネルの文字列形式を台無しにして、プログラム全体がコンパイルされないためです。カーネルの文字列を入力できるエスケープ文字\"を使用してみましたが、コンパイルすると、予想される式と欠落文字エラーが発生します。

これを解決する方法を知っている人はいますか?そして、これはカーネルコードの結果をチェックする最良の方法ですか?

    const char *KernelSource =         "\n"
"__kernel void relax(                    \n"
"   __global double* input,                \n"
"   __global double* output,               \n"
"   __global int N)             \n"
"{                                        \n"
"   int i = get_global_id(0);             \n"
"   if(i > 0 && i < N-1){                         \n"
"       input[i] = 0.25*input[i-1]+0.5*input[i]+0.25*input[i+1];  \n"
"       printf("input[%d] %f \n", i, input[i] )\n"
"   }                                        \n"
"}                                        \n"
"\n";
4

1 に答える 1

5

引用符をエスケープする必要があり、フォーマット文字列内の\をエスケープする必要があります。\n

"       printf(\"input[%d] %f \\n\", i, input[i] )\n"
于 2012-10-31T13:24:24.387 に答える