blockDim
ブロック内のスレッドの総数である が、CUDA プログラムのグリッド内のすべてのブロックで同じなのはなぜですか? ブロックサイズがすべてのブロックで同じであれば、インデックス作成は非常に簡単ですが、ブロックのサイズが 32 の倍数 (ワープ用) であるが、昇順である場合、AP または GP インデックス作成は非常に簡単です。
グリッドのすべてのブロックを同じサイズにする理由は何ですか?
blockDim
ブロック内のスレッドの総数である が、CUDA プログラムのグリッド内のすべてのブロックで同じなのはなぜですか? ブロックサイズがすべてのブロックで同じであれば、インデックス作成は非常に簡単ですが、ブロックのサイズが 32 の倍数 (ワープ用) であるが、昇順である場合、AP または GP インデックス作成は非常に簡単です。
グリッドのすべてのブロックを同じサイズにする理由は何ですか?
サイズの異なる複数のブロックがすべて同じカーネルで実行されている場合、大きなブロックは小さなブロックよりも SM で時間がかかる可能性が高くなります。これにより、作業負荷が均等に分散されている場合と比較して、コードが大幅に遅くなります。ある意味で、彼らはあなたが自分の足を撃つことを防いでいます。
また、メモリ管理が大幅に簡素化されると推測することもできます-均一なブロックサイズでは、各ブロックには一定量の共有メモリ/レジスタなどがSMに割り当てられる必要があります。
可変ブロックサイズは可能に思えますが、不当です。ブロックで無駄な作業を行うことを心配している場合でも、気にしないでください。グリッドの外にいる場合は、ブロックから早めに退出してください。パフォーマンスへの影響はごくわずかです。