2016年2月19日 13:00
コンピュータアーキテクチャの話 (348) 複数のデータの処理を一度に行うGPUのメモリアクセス
○SIMT実行のメモリアクセス
GPUは、Single InstructionでMultiple Thread方式であるので、複数のデータの処理を行う。入力オペランドをレジスタファイルから読み、演算を行って結果をレジスタファイルに書き込む命令の場合は、スレッドごとにレジスタがあるので、並列に実行することに問題はない。
しかし、レジスタに格納されているデータをアドレスとして使ってメモリをアクセスする場合は、一般的には、スレッドごとに異なるアドレスにアクセスする必要がでてくる。このとき、32スレッドがアクセスするアドレスがどのようになっているかでメモリアクセスの効率が変わってくる。
図3-43は、32スレッドのアクセスを1回で処理できるケースを図示したもので、一番上の図は128バイト境界から32スレッドが連続のアドレスをアクセスするというケースである。この場合は、各スレッドのデータサイズは4バイトであるので、32スレッドすべてのアクセスが128バイトの範囲に収まる。
連続アドレスでなくとも、32スレッドのアクセスが1つの128バイトのラインに収まっている場合も、1回で処理ができる。また、Loadの場合は、すべてのアクセスが同一アドレスのデータを読む場合も、全スレッドに同じデータを送ればよいので問題はない。