0

すべて、「NVIDIA CUDA プログラミング ガイド 2.0」セクション 5.1.2.1 から: 「Compute Capability 1.2 以降のデバイスでの結合」

最小番号のアクティブなスレッドによって要求されたアドレスを含むメモリ セグメントを見つけます。セグメント サイズは、8 ビット データの場合は 32 バイト、16 ビット データの場合は 64 バイト、32、64、および 128 ビット データの場合は 128 バイトです。 "

ここで疑問があります。各ハーフ ワープには 16 のスレッドがあるため、すべてのスレッドが 8 ビット データにアクセスする場合、ハーフ ワープごとの合計サイズは 16 * 8 ビット = 128 ビット = 16 バイトになります。「ガイド」には「8ビットデータの場合は32バイト」と記載されています。半分の帯域幅が無駄になっているようです。私は正しく理解していますか?

ありがとうデリック

4

1 に答える 1

2

はい。メモリ アクセスは、そのメモリ ラインから実際に必要な量に関係なく、常に 32、64、または 128 バイトのチャンクになります。


アップデート:

質問: 16 ビット データの 64 バイトをどのように説明しますか?

値: 1 バイト ワードの場合は 32 バイト、2 バイト ワードの場合は 64 バイト、上位バイト ワードの場合は 128 バイトが、アクセスされるセグメントの最大サイズです。たとえば、各スレッドが 2 バイトのワードをフェッチし、アクセスが完全にアライメントされている場合、メモリ アクセスは削減され、32 バイトのライン フェッチのみが使用されます。

「CUDA プログラミング ガイド (v3.2)」のセクション G.3.2.2「Compute Capability 1.2 および 1.3 のデバイス」を確認してください。

CUDA PG v. 2.0 (およびおそらく CUDA 2.0 コンパイラ) を使用していたようです。それ以来、多くの改善 (特に: バグ修正) がありました。

于 2011-03-17T21:10:46.150 に答える