2

みなさん、こんにちは....
私はopenclを初めて使用し、@ itをもっと探求しようとしています。

openCL プログラムでの local_work_size の働きと、それがパフォーマンスに与える影響について教えてください。

私はいくつかの画像処理アルゴリズムに取り組んでおり、私が与えたopenCLカーネルのために

size_t local_item_size = 1; 
size_t global_item_size = (int) (ceil((float)(D_can_width*D_can_height)/local_item_size))*local_item_size; // Process the entire lists
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL,&global_item_size, &local_item_size, 0, NULL, NULL);

そして、私が変更したときの同じカーネルに対して

 size_t local_item_size = 16;

すべてを同じに保ちます。

パフォーマンスが約 4 ~ 5 倍速くなりました。

4

1 に答える 1

6

local-work-size、別名work-group-sizeは、各work-group内のwork-itemsの数です。

各ワークグループは、1 つだけでなく多数のワークアイテムを処理できる計算ユニットで実行されます。

したがって、小さすぎるグループを使用すると、計算能力がいくらか無駄になり、計算ユニット レベルで粗い並列化しかできなくなります。

しかし、グループ内の作業項目が多すぎると、一部の計算ユニットが使用されず、他の計算ユニットが過剰に使用される可能性があるため、並列化の機会を失う可能性もあります。

そのため、多くの値をテストして最適な値を見つけるか、local-work-size としてNULLを渡してOpenCL に適切な値を選択させることができます。

PS : 以前の値と比較して OpenCL を選択した場合のパフォーマンスを知りたいので、テストを行って結果を投稿してください。ありがとう :)

于 2012-12-07T12:10:57.747 に答える