私は基本的に同じ質問をin this discussionとしました。 2Dまたは3Dマッピングを使用するパフォーマンス上の利点があります多次元CUDAブロックグリッドの動機
:私はこの スレッドで一緒に混合二つの異なる問題があると思い
:特に私は、この最終的な応答を参照したいですの入出力データのスレッドへの変換あなたと他の人が記述した理由のすべてについて、答えは「絶対に」です。データまたは計算に の空間的局所性がある場合は、 のスレッドに作業を割り当てる必要があります。
この作業割り当てを行うためにCUDAの多次元グリッドを使用すると、パフォーマンス上の利点はありますか?この場合、私は 以来、あなたは カーネルの先頭で自明に索引計算を行うことができるので、そうは思わない。これは少数の算術命令を焼き尽くしますが、それはカーネルの起動のオーバーヘッドと比較して無視できるほど小さいはずです( )。
私は、多次元グリッドが プログラマの利便性ではなく、パフォーマンスを改善する方法として意図していると思う理由です。 各ワープのメモリアクセスパターンについては絶対に考える必要がありますが、 です。
この状況が今でもなお成立しているかどうかを知りたい。多次元「外側」グリッドが必要な理由を知りたい。
私が理解しようとしているのは、これに重要な目的があるかどうか(例えば、空間的局所性からの実際の利益)か、それとも利便性のためであるかということです(例えば、画像処理コンテキストでは、特定のブロックが処理しているx/y "パッチ"をCUDAに認識させることができ、CUDA Visual Profilerなどに報告することができます。
第3の選択肢は、これがハードウェアインデックス制限の回避策であった以前のバージョンのCUDAのホールドオーバーに過ぎないということです。