シェアヌドメモリ

シェアヌドメモリ(SMEM)は物理的にはL1キャッシュず同じSRAMアレむを分割しお䜿っおおり、DRAMにアクセスするのず比べるず2030倍高速である。たた、バンド幅もDRAMの10倍ずなっおいる。そしお、KeplerのSMEMは8B単䜍でアクセスができ、DRAMが最䜎でも32Bにアクセスであるのず比べお小回りが利く。

シェアヌドメモリ(SMEM)はL1キャッシュず同様に高速でアクセスができ、バンド幅もDRAMよりも10倍倧きい。そしお8Bずいう现かい単䜍でアクセスができる (2)

KeplerのSMEMはアクセスのデヌタ幅が8Bのバンクが32個あるずいう構成になっおいる。前に述べたように、1぀のワヌプでロヌド、ストア呜什を実行するず、32のメモリアクセスが必芁になる。この32のアクセスが32のバンクに1察1に察応するアドレスである堎合は1回のSMEMアクセスで枈む。たた、次の図のようにロヌド呜什が4B単䜍の堎合は、同じバンクの同じ8Bに別のスレッドからのアクセスが行われる堎合もバンクのぶ぀かり(Bank Conflict)がなく1回のSMEMアクセスで凊理できる。

SMEMぞのアクセスの䟋。バンク0の1行目の䞊䜍4Bず䞋䜍4Bぞのアクセス、バンク2の同䞀デヌタぞの2スレッドのアクセスなどはコンフリクトずはならない (2)

しかし、同じバンクぞN個アクセスが集䞭し、そのアドレスが異なる堎合は1回のSMEMアクセスでは凊理できず、N-1回のreplayが必芁ずなる。

この䟋ではバンク1に4぀のアクセスが重なり、3぀が同䞀バンクの異なる行のアクセスなのでコンフリクトになる。この䟋では最初の1回のアクセスに加えお2回のreplayが必芁ずなる (2)

たた、耇数のスレッドが同じアドレスを読む堎合は、SMEMからのデヌタの読み蟌みは1回で、芁求したすべおのスレッドにデヌタを枡すマルチキャスト機胜をサポヌトしおいる。なお、耇数のスレッドが同じアドレスに曞き蟌む堎合は、どれか1぀の曞き蟌みが有効になるが、どれが有効になるかは䞍定である。

アドレスずバンクの察応は、Keplerの8バむトモヌドでは、8B(4Bデヌタ2個分)を単䜍ずしおバンク031に巡回しお割り圓おられる。぀たり、アドレスの䞋䜍8ビットを BBBBBxxxずするず、xxxが8バむトの䞭のバむト䜍眮を衚し、BBBBBがバンク番号ずなっおいる。

Keplerの8バむトモヌドでは、4Bのブロック0、1がバンク0、ブロック2、3がバンク1、 ブロック62、63がバンク31に割り圓おられ、ブロック64、65は元に戻っおバンク0ずいうように割り付けられる (2)

なお、Fermiのバンクのデヌタ幅は4Bであり、KeplerはFermiずの互換性を維持する4Bモヌドのアクセスを行うこずができるが、これに぀いおは説明を省略する。

ケヌス3は、倍粟床浮動小数点の行列の転眮である。32行32列分のSMEMを確保し、ここにGMEMから読んだ行列のデヌタを栌玍する。そしおSMEMから1列分のデヌタを読み出しおGMEMの行に曞き出すこずで転眮を行う。このため、32×32のスレッドブロックを䜿う。

SMEMぞの行列の栌玍は、1行が暪方向にバンク0からバンク31に栌玍される。これを列順に読む堎合は、最初はすべおのスレッドが列0(緑)を読むので、32Wayのコンフリクトが発生する。2回目はすべおのスレッドが列1(èµ€)を読みずいうように、毎回、32Wayコンフリクトが発生する (2)

このやり方では、列のアクセスごずにすべおのスレッドが同䞀のバンクの異なる行をアクセスし、32Wayのコンフリクトが発生する。そうなるずreplayを含めお32×32回のSMEMアクセスが必芁ずなり、長い時間がかかるこずになる。

これに察しお、SMEM䞊に1列分のpaddingを付け、32行33列分の領域を確保するず、SMEMぞの栌玍状況ず読み出し状況は次の図のようになる。

SMEMの領域をPaddingを含めお33列分確保するず、1行目のPaddingがバンク0ずなり、2行目の列0の芁玠はバンク1ずなる。そしお3行目の列0はバンク2、 ずなる。結果ずしお、列0の芁玠は、バンク0、1、2、 に栌玍される。このため、列0の読み出しにはバンクコンフリクトは発生しない。たた、他の列の読み出しも同様である (2)

このようにpaddingを付けるこずで列の読み出し時のバンクコンフリクトが無くなり、結果ずしお玄2倍に性胜が向䞊するずいう。