4

こんにちは、PS3 で OpenCL カーネル コードをデバッグしようとしています。コードは次のとおりです。

#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable

int offset() {
    return 'A' - 'a';
}

__kernel void tKernel(__global unsigned char *in, __global unsigned char *out) {    
    size_t i;
    printf(“var”);
    for (i = 0; i < 10; i++)
        out[i] = in[i] + offset();
}

IBM OpenCL_guide.pdf のセクション 4.3.3 の 18 ページに、printf メソッドを使用したカーネルのデバッグが記述されています。そこで、カーネルに printf 関数を追加してテストします。しかし、OpenCL コンパイルで次のエラーが発生しました。

「IBM_OpenCL_kernel.cl」、9.15 行目: 1506-766 (S) 汎用文字名「?」識別子の許容範囲外です。

LD_LIBRARY_PATH 変数もエクスポートしました。誰でもこの問題を抱えていますか?

4

3 に答える 3

8

IBM の実装についてはわかりませんが、printf() は非標準の OpenCL 関数です。AMD プラットフォームでは、次の方法で拡張機能を有効にする必要があります。

#pragma OPENCL EXTENSION cl_amd_printf : enable

printf() が機能する前に。IBM プラットフォームでも拡張機能を有効にする必要があるのではないでしょうか?

(更新)このページから、使用可能な拡張子名は cl_intel_printf かもしれないので、試してください:

#pragma OPENCL EXTENSION cl_intel_printf : enable
于 2011-04-27T01:27:52.033 に答える
6

OpenCL の実装が printf をサポートしていないようです。または、エミュレートされたデバイスではなくハードウェア デバイスを使用している可能性があります。

私の意見では、printf はまったく使用すべきではありません。より複雑なハードウェアに依存する問題に答えを出すには十分なツールではありません。追加の引数、別名「__global float* output」を使用してみてください。カーネル内にif (something_happened) { output[get_global_id(0)] = the_value_you_need_to_debug; }このようなものを入力すると、考えられる問題を診断するのに役立ちます。このアプローチはプラットフォームに依存しません

于 2011-04-26T06:16:38.643 に答える
0

システム構築時はprintf機能をサポートしていません。ソフトウェアおよびハードウェア エミュレーションでのみ使用できます。

于 2019-10-30T08:18:14.863 に答える