GPUプログラミング
CUDAの__syncthreads()の働きとして正しいものはどれか。
- AGPUのすべてのスレッドを、ブロックをまたいで待ち合わせる
- B同じブロックのすべてのスレッドがその地点に来るまで待ち合わせ、それまでの共有メモリへの書き込みが見えるようにする
- CCPUとGPUの時計を合わせる
答えと解説を見る
正解:B. 同じブロックのすべてのスレッドがその地点に来るまで待ち合わせ、それまでの共有メモリへの書き込みが見えるようにする
共有メモリを使う処理では、あるスレッドが書き込んだ値を別のスレッドが読む前に、書き込みが終わっている必要があります。__syncthreads()は、ブロックのすべてのスレッドがここに到着するまで待たせるので、例えば全員がデータを共有メモリに読み込み終えてから計算を始める、という順番を保証できます。待ち合わせられるのは同じブロックのスレッドだけです。
- A. ブロックをまたぐ同期はできません。
- B. 正しい。ブロックの中のバリア同期です。
- C. 時計を合わせる機能ではありません。