たとえば、自分の金額を設定するとどうなりますか
- ワークグループを 5120 および localsize 1 に
- ワークグループを 2560 および localsize 2 に
- ワークグループを 640 および localsize 4 に
これは、作業項目の量とリソースへのアクセスにどのように影響しますか?
たとえば、自分の金額を設定するとどうなりますか
これは、作業項目の量とリソースへのアクセスにどのように影響しますか?
5120 threads. 5120 groups. 1 thread per group
。各グループ (1 スレッド) は 1 つのプロセッサを使用します。それらのいずれも(従来の意味で)同期することはできません。2560 threads. 1280 groups. 2 threads in each group
。各グループ (2 つのスレッド) は 1 つのプロセッサを使用します。これら 2 つのスレッドを (従来の意味で) 同期できます。640 threads. 160 groups. 4 threads in each group
。各グループ (4 つのスレッド) は 1 つのプロセッサを使用します。これら 4 つのスレッドを (従来の意味で) 同期できます。OpenCL では、グローバル ワーク サイズをスレッドの総数で表す必要があります。基礎となる OpenCL API は、グローバル ワーク サイズを調べ、ローカル ワーク サイズで割り、スレッドの配置を計算します。
さて(これは一般的な提案です。あなたがそれをする必要がある場合があるかもしれませんが、今のところ..)
ひどい考えです。明らかに。一度に 1 つのスレッドを与えることで、プロセッサの時間を無駄にしています。これは CPU にとって世界の終わりではないかもしれませんが、最新の GPU にとってはそうです。なんで?GPU の各プロセッサには多数のコアがあるためです。すべてのアクションの準備ができています。この場合、そのうちの 1 つだけが機能します。さらに、必要が生じた場合にスレッドを同期する方法がありません。
同じこと。
同じこと。
私の記憶が正しければ、NVIDIA は、最高のパフォーマンスを得るためにグループ内に少なくとも 32 のスレッドを提案しています。