2016-05-03 10 views
1

私は基本的に同じ質問をin this discussionとしました。 2Dまたは3Dマッピングを使用するパフォーマンス上の利点があります多次元CUDAブロックグリッドの動機

  1. :私はこの スレッドで一緒に混合二つの異なる問題があると思い

    :特に私は、この最終的な応答を参照したいですの入出力データのスレッドへの変換あなたと他の人が記述した理由のすべてについて、答えは「絶対に」です。データまたは計算に の空間的局所性がある場合は、 のスレッドに作業を割り当てる必要があります。

  2. この作業割り当てを行うためにCUDAの多次元グリッドを使用すると、パフォーマンス上の利点はありますか?この場合、私は 以来、あなたは カーネルの先頭で自明に索引計算を行うことができるので、そうは思わない。これは少数の算術命令を焼き尽くしますが、それはカーネルの起動のオーバーヘッドと比較して無視できるほど小さいはずです( )。

私は、多次元グリッドが プログラマの利便性ではなく、パフォーマンスを改善する方法として意図していると思う理由です。 各ワープのメモリアクセスパターンについては絶対に考える必要がありますが、 です。

この状況が今でもなお成立しているかどうかを知りたい。多次元「外側」グリッドが必要な理由を知りたい。

私が理解しようとしているのは、これに重要な目的があるかどうか(例えば、空間的局所性からの実際の利益)か、それとも利便性のためであるかということです(例えば、画像処理コンテキストでは、特定のブロックが処理しているx/y "パッチ"をCUDAに認識させることができ、CUDA Visual Profilerなどに報告することができます。

第3の選択肢は、これがハードウェアインデックス制限の回避策であった以前のバージョンのCUDAのホールドオーバーに過ぎないということです。

答えて

6

多次元グリッドの使用には明らかに利点があります。異なるエントリ(tid、ctaid)は、読み取り専用の変数で、特殊レジスタとして表示されます。参照PTX ISA

PTXは、特殊レジスタとして可視およびMOV又はCVT命令を介してアクセスされる予め定義された、読み取り専用変数の数を含みます。 特殊レジスタは、次のとおり、このデータの一部は、さらに処理せずに使用することができる場合、未だけが算術命令を得てもよい

%tid 
%ntid 
%laneid 
%warpid 
%nwarpid 
%ctaid 
%nctaid 

- より重要な潜在的多次元データの各割り出しステップで、しかし任意のハードウェア上の非常に乏しいリソースであるレジスタを節約しています。