2017-05-25 3 views
2

新しい__local floatを設定しようとしていますが、引数としてfloatのサイズを渡すとエラーが発生します。OpenCLで__local floatを設定する

このコードは、エラーを与える:

int TILE_DIM = get_local_size(0)*get_local_size(1); //local size 
__local float buffer[TILE_DIM]; 

このコードはありません:

int TILE_DIM = get_local_size(0)*get_local_size(1); //local size 
__local float buffer[512]; 

答えて

2

ローカルメモリは常にカーネルの実行前に割り当てなければなりません。したがって、カーネル実行時の長さの配列は使用できません。しかし、メモリへのポインタ(未初期化)__localを引数としてカーネルに渡すことができます。これの長さはclSetKernelArg()コールで設定できます。 (ローカルメモリのカーネル引数の詳細についてはリンクされたドキュメントをチェックしてください)。したがって、エンキューされたカーネルごとに可変長ですが、ワークグループごとではありません。

2

__local配列のサイズがoptions引数にclBuildProgramに渡すことができます。たとえば"-DTILE_DIM=512"

clBuildProgram(program, 1, &device.device_id, "-DTILE_DIM=512", NULL, NULL);

ローカル配列のサイズは、カーネルのビルド時に決定することができる。この方法を。

関連する問題