いくつかのスレッドがあり、それらがアドレスA + 0、A + 4、A + 8、A + 12のメモリにアクセスするとします(各アクセス=次のスレッド)。そのようなアクセスは合体していますよね?
ただし、同じメモリに逆の順序でアクセスできる場合は、次のことを意味します。
thread 0 -> A+12
thread 1 -> A+8
thread 2 -> A+4
thread 3 -> A+0
ここでの合体もトリガーされますか?
はい、cc 2.0以降のGPUの場合、要求されたすべての32ビットデータ要素が同じ128バイト(および128バイト)からのものである限り、スレッドへの32ビットデータ要素のランダムな配置に対して合体が発生します。整列)グローバルメモリ内の領域。
GPUには、必要に応じて要素を分散するメモリコントローラーの「クロスバースイッチ」のようなものがあります。合体について説明し、この特定のケースを図で説明するこのGPUウェビナーに興味があるかもしれません(スライド12)。
NVIDIAウェビナーページには、他にも興味のある便利なウェビナーがあります。
cc2.0より前のデバイス の場合、詳細は計算機能によって異なりますが、計算1.0および1.1対応のデバイスには、「逆順」またはランダムな順序の読み取りを合体させるこの機能はありません。
Nvidia GPUのL2キャッシュの主な目的は、読み取りを折りたたんで書き込みを合体させることであることも注目に値します。したがって、1つのワープがアクセスしていた場合
thread 0 -> A+0
thread 1 -> A+8
thread 2 -> A+16
thread 3 -> A+24
...
そして別のワープがアクセスしていました
thread 0 -> A+4
thread 1 -> A+12
thread 2 -> A+20
thread 3 -> A+28
...
これらの2つのアクセスはSM内で合体しませんが、通常はL2キャッシュで合体するため、GPUメモリは1回だけアクセスされます。