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
は実際に行われた作業を示します)。