cudaでプログラミングするときの合体とバンク競合の違いは何ですか?
共有メモリでバンク競合が発生している間に、グローバルメモリで合体が発生するだけですか?
>1.2 をサポートする GPU を使用している場合、合体について心配する必要がありますか? それ自体で合体を処理しますか?
3 に答える
はい、結合された読み取り/書き込みはグローバル読み取りに適用され、バンク競合は共有メモリの読み取り/書き込みに適用されます。
ここでは、コンピューティング機能デバイスが異なれば動作も異なりますが、1.2 GPU では、読み取りと書き込みを確実に結合するように注意する必要があります。作業を簡単にするための最適化がいくつかあるだけです。
CUDA ベスト プラクティスガイドを読む必要があります。これは、これら両方の問題について詳しく説明しています。
はい: 合体アクセスはグローバル メモリのみに関連し、バンク競合は共有メモリのみに関連します。
高度な CUDA C トレーニング セッションも確認してください。最初のセクションでは、1.2 以上の GPU のハードウェアがどのように役立つか、さらに考慮すべき最適化について説明します。また、共有メモリ バンクの競合についても説明します。たとえば、この録音を確認してください。
SDKのスキャンとリダクションのサンプルでは、共有メモリ バンクの競合についても、カーネルの漸進的な改善とともに非常によく説明されています。
>1.2 GPU は、256 バイトの同じメモリ アトム内に収まる同じサイズのメモリ アクセスをグループ化し、それらを 1 つのメモリ書き込みとして書き出すことができるという点で、合体に関してできる限りのことをしようとします。GPU は、アクセスの並べ替えと正しいメモリ境界への整列を処理します。(以前の GPU では、ワープ内のメモリ トランザクションは、メモリ アトムに合わせて正しい順序にする必要がありました。)
ただし、最適なパフォーマンスを得るには、これらの合体の機会が利用可能であることを確認する必要があります。ワープ内のすべてのスレッドが完全に異なるメモリ アトムへのメモリ トランザクションを持っている場合、コアレッサーができることは何もないため、カーネルのメモリ ローカリティ動作に注意することは依然として有効です。