1

Open GL ES にシェーダー プログラムがあります。Compute Shader で 1 次元のタスクを完了するために、ローカル/グローバル ワークグループ サイズを調整したいと考えています。

[task_size] など、タスクの合計サイズ (異なる実行間で変更できるスレッドの合計数) があります。ローカル ワークグループのサイズを指定するとします。それを [local_size] とします。また、自分が持っているワークグループの数も知っています。たとえば、[ワークグループ] です。ローカル サイズを次のように指定します。

 layout(local_size_x = [local_size]) in;

そして、glDispatchCompute でワークグループの数を指定します。

glDispatchCompute([workgroups], 1, 1);

の場合local_size * workgroups == task_size、何が起こるかはっきりと理解できます。タスクの各部分は、個別のグループによって計算されます。

しかし、task_size が local_size で割り切れない場合はどうなるでしょうか? 必要なワークグループの最小数は であることを理解していますtask_size / local_size + 1。しかし、それはどのように機能しますか?最後のワークグループは実際に他のワークグループより少ないですか? パフォーマンスに影響しますか? task_size を local_size で割り切れるようにするのは良い考えですか?

4

0 に答える 0