GPUプログラミング

CUDAの__syncthreads()の働きとして正しいものはどれか。

  1. AGPUのすべてのスレッドを、ブロックをまたいで待ち合わせる
  2. B同じブロックのすべてのスレッドがその地点に来るまで待ち合わせ、それまでの共有メモリへの書き込みが見えるようにする
  3. CCPUとGPUの時計を合わせる
答えと解説を見る

正解:B. 同じブロックのすべてのスレッドがその地点に来るまで待ち合わせ、それまでの共有メモリへの書き込みが見えるようにする

共有メモリを使う処理では、あるスレッドが書き込んだ値を別のスレッドが読む前に、書き込みが終わっている必要があります。__syncthreads()は、ブロックのすべてのスレッドがここに到着するまで待たせるので、例えば全員がデータを共有メモリに読み込み終えてから計算を始める、という順番を保証できます。待ち合わせられるのは同じブロックのスレッドだけです。

  • A. ブロックをまたぐ同期はできません。
  • B. 正しい。ブロックの中のバリア同期です。
  • C. 時計を合わせる機能ではありません。
この分野を解く 分野ページへ

GPUプログラミングのほかの問題

  1. CUDAで、__syncthreads()を「if (threadIdx.x < 16)」の中に書き、一部のスレッドだけが通るようにした。起こりうることとして正しいものはどれか。
  2. CUDAの共有メモリのバンク競合の説明として正しいものはどれか。
  3. 32×32のfloatの表を共有メモリに置き、ワープの32本で列の方向(縦)に読むとバンク競合が起きる。よく使われる対策はどれか。
  4. GPUで大きな行列の積を計算するとき、行列を小さなタイルに分けて共有メモリに読み込む理由として正しいものはどれか。
  5. GPUのカーネルで、1スレッドあたりのレジスタの使用量が多すぎると起こりうることとして正しいものはどれか。