Various CUDA demos in the CUDA SDK refer to "scattered write". What is this scattered write and why is it so great? In contrast to what does it stand?
2 に答える
ここでは CUDA の用語を使用します。
scattered write
各cudaスレッドから任意のアドレスに書き込んでいることを意味します(つまり、ワープのスレッドは連続したメモリに書き込みません)。これは、2D コヒーレントであり、ハードウェアによって結合できるフレーム バッファー書き込みとは対照的です。少し前まで、これらは GPU で使用できる唯一の書き込みでした。
これらは、gather read
分散した場所からデータを読み取り、収集されたデータに対して SIMD 方式で実行されるスレッドのワープの前にすべてのデータを収集する の反対の操作です。ただし、Gather Read は、GPU で任意のテクスチャ フェッチを介して長い間利用できます。
分散書き込みは、任意のメモリ アドレスに書き込むことができるので優れています。以前のシェーダーの実装は、通常、特定のシェーダー プログラムが書き込むことができるメモリ アドレスに制限されていました。
「グラフィックス API のフラグメント プログラムは、事前に指定された場所で 32 個のフロート (RGBA * 8 レンダー ターゲット) を出力することに制限されていますが、CUDA は分散書き込みをサポートしています。つまり、任意のアドレスへの無制限の数のストアです。これにより、これまで実現されていなかった多くの新しいアルゴリズムが可能になります。グラフィックス API を使用して CUDA を使用して効率的に実行することが可能です」
CUDA FAQ から:
基本的に、CUDA プログラムは結果を書き込める場所に制限されないため、書きやすくなります。GPU で優れたパフォーマンスを得る鍵の 1 つは、メモリの局所性を利用することです。グローバル メモリに大量に書き込むことによって分散書き込みを過度に使用すると、パフォーマンスに影響を与える可能性が高くなります。