5

たとえば、自分の金額を設定するとどうなりますか

  1. ワークグループを 5120 および localsize 1 に
  2. ワークグループを 2560 および localsize 2 に
  3. ワークグループを 640 および localsize 4 に

これは、作業項目の量とリソースへのアクセスにどのように影響しますか?

4

1 に答える 1

9
  1. あなたが持っているでしょう5120 threads. 5120 groups. 1 thread per group。各グループ (1 スレッド) は 1 つのプロセッサを使用します。それらのいずれも(従来の意味で)同期することはできません。
  2. あなたが持っているでしょう2560 threads. 1280 groups. 2 threads in each group。各グループ (2 つのスレッド) は 1 つのプロセッサを使用します。これら 2 つのスレッドを (従来の意味で) 同期できます。
  3. あなたが持っているでしょう640 threads. 160 groups. 4 threads in each group。各グループ (4 つのスレッド) は 1 つのプロセッサを使用します。これら 4 つのスレッドを (従来の意味で) 同期できます。

OpenCL では、グローバル ワーク サイズをスレッドの総数で表す必要があります。基礎となる OpenCL API は、グローバル ワーク サイズを調べ、ローカル ワーク サイズで割り、スレッドの配置を計算します。

さて(これは一般的な提案です。あなたがそれをする必要がある場合があるかもしれませんが、今のところ..)

  1. ひどい考えです。明らかに。一度に 1 つのスレッドを与えることで、プロセッサの時間を無駄にしています。これは CPU にとって世界の終わりではないかもしれませんが、最新の GPU にとってはそうです。なんで?GPU の各プロセッサには多数のコアがあるためです。すべてのアクションの準備ができています。この場合、そのうちの 1 つだけが機能します。さらに、必要が生じた場合にスレッドを同期する方法がありません。

  2. 同じこと。

  3. 同じこと。

私の記憶が正しければ、NVIDIA は、最高のパフォーマンスを得るためにグループ内に少なくとも 32 のスレッドを提案しています。

于 2013-03-09T20:58:31.850 に答える