前文:CUDAでNVIDIAGTX480カードを使用していると仮定します。このカードの理論上のピークグローバルメモリ帯域幅は177.4GB/ sです:384 * 2 * 1848/8 * 1E9 = 177.4 GB / s
384はメモリインターフェイスの幅に由来し、2はメモリのDDRの性質を形成し、1848はメモリクロック周波数(MHz)であり、8はバイト単位で答えを取得したいという事実に由来します。
共有メモリについても同様の計算が可能です。バンクあたり4バイト*32バンク*サイクルあたり0.5バンク*1400MHz* 15 SM = 1,344 GB / s
上記の数は、SMの数、つまり15を考慮に入れています。したがって、この最大共有メモリ帯域幅に到達するには、15個のSMすべてに共有メモリを読み取らせる必要があります。
私の質問:グローバルメモリの最大帯域幅に到達するには、グローバルメモリから1つのSMのみを読み取るだけで十分ですか、それともすべてのSMが同時にグローバルメモリからの読み取りを試みる必要がありますか?具体的には、32スレッドの1ブロックでカーネルを起動するとします。次に、SM-0で唯一のワープがあり、カーネルで行うすべての処理がグローバルメモリから合体してノンストップで読み取られる場合、177.4 GB / sに達しますか?または、SM-0からSM-14の15個のワープが同時に読み取ろうとするように、それぞれ32個のスレッドを持つ少なくとも15個のブロックを起動する必要がありますか?
すぐにやるべきことは、おそらくこれを理解するためにベンチマークテストを実行することでしょう。なぜ何が起こるのかを理解したいと思います。