2015年6月19日 10:00
コンピュータアーキテクチャの話 (331) 汎用の科学技術計算におけるGPUのキャッシュの必要性
○シェアードメモリ経由のスレッド間通信
また、図3-19に見られるように、各々のスレッドは自分専用のレジスタファイルだけをアクセスして処理を行う構造になっており、他のスレッドのレジスタファイルをアクセスすることはできないので、スレッド間でのデータのやり取りはできない。
このため、スレッド間でデータのやり取りを行う場合には、シェアードメモリを使う。同一グループの32スレッドは同じシェアードメモリを使うので、スレッド1がアドレスAに書いたデータを、スレッド2がアドレスAを読むことで受け取ることができる。また、同一SM(Streaming Multiprocessor)で走るすべてのスレッドは同じシェアードメモリを使うので、これらのスレッドの間でのデータのやり取りもできる。
デバイスメモリを使えば、別SMで走るスレッドとの間でデータの受け渡しをすることができるが、デバイスメモリのアクセスはシェアードメモリのアクセスより時間が掛かるので、同一SMのスレッド間ではシェアードメモリを使う方が良い。
なお、同一グループの32スレッドは同期して実行されるが、デバイスメモリのアクセスの順序がプログラム順になることは保証されていない。