C++ AMPを用いたGPUプログラミングwiki
首都大学東京 田川研究室
C++ AMP 目次へ

共有メモリを使おう

GPUにはキャッシュメモリが搭載されています。L1とL2がありますが、今回話すのはL1キャッシュについてです。
CPUに搭載されているキャッシュメモリは自動で利用されます。前回利用したメモリのコピーを保存して置いたり、次に利用するだろうメモリを先読みしてコピーをキャッシュに記憶しておいたりします。キャッシュメモリにちょうどよいタイミングでデータが見つかった場合、メインメモリへのアクセスを回避でき高速に動作します。
近年のCPUの性能向上の大部分を担っているのがこのキャッシュメモリによる低速なメインメモリへのアクセス隠ぺいです。メインメモリが[TB/s]級のアクセス速度を持っていれば本来キャッシュメモリなんて必要ないのですがどうもメインメモリはあまり高速化しないようで各プロセッサメーカーはキャッシュメモリに多大なコストをかけています。

GPUにもキャッシュメモリが搭載されています。GPUに接続されるメモリはCPUに比べ10倍ほど高速なのですが、GPUの演算速度と比べると、停止しているかのように遅いです。よってキャッシュメモリによるアクセスの隠ぺいを図るのですが・・・
GPUのL1キャッシュは大容量です。
そしてベクタユニットというまとまりの中で、各演算コアから共有することがでるshared memoryが用意されています。明示的にどのデータを読み込むかを指定できる柔軟性の高いL1キャッシュのようなものです。処理の高速化効率化が図れます。
共有メモリの利用にはtileを用います。
準備中