0

次のように、コンパイル時に定義されたサイズのローカル メモリを使用してカーネルを生成する場合

__local float2 block[%d];

カーネルの実行時に実際に使用できるサイズを確認するにはどうすればよいですか?

これは CL_DEVICE_LOCAL_MEM_SIZE ではありません。これを使用すると、最大許容量を示すエラー メッセージが表示されますが、これは常に報告された値よりも少なくなります (また、2 の累乗ではなく、カーネルによって使用されるレジスタを減算しますか?)。

現在、私は単に報告されたサイズの半分を使用しています...

4

1 に答える 1

0

これは確認できません。これを確認するために、デバイスごとの最大ローカル メモリを決定し、その量を割り当てるカーネルを作成する小さなテスト プログラムを作成しました。量を少なくとも 1 バイト増やさない限り、プログラムは正常に実行されます。

多分あなたの問題は にありますfloat2。これには 8 バイトかかり、block配列の長さをローカル メモリの最大サイズに設定すると機能しません。

于 2013-01-15T20:29:42.297 に答える