2
  • N0要素を持つ非常に大きな配列があります。
  • 各スレッドはループしてm要素を処理します。
  • ブロックごとに固定TBPスレッドがあります。
  • CUDA はグリッドごとにブロックを制約しますBPG < 65535 =: BPG_max

N0 = 90では、要素の配列を縮小して考えてみましょうTBP = 32

  • 3 blocks of 32 threads each looping once (m = 1)つまり3 x 32 x 1 = 96、要素が操作された可能性があります-つまり、6の無駄です
  • または、要素が操作された可能性が2 blocks of 32 with m = 2あることを意味する発砲する可能性があり、これは38 の無駄です2 x 32 x 2 = 128

大規模な配列 (100MB 以上) と多数のループ (10,000 以上) では、要素が大きくなり、無駄が非常に大きくなる可能性があります。つまり、最適化する手順が必要です (Nは実際に行われた作業を示します)。

ここに画像の説明を入力

4

3 に答える 3

2

「無駄な」スレッドについて心配する必要はありません。GPU スレッドは軽量です。

GPU の占有率が高くなる可能性があるため、実際にはブロック サイズを大きくすることをお勧めします。SMX (GeForce 6xx ライン) は 16 個の同時ブロックしか実行できないことに注意してください。ブロックを大きくすると、より多くのスレッドをスケジュールしてメモリ アクセスのレイテンシを隠すことができます。

于 2013-05-09T00:51:29.880 に答える