GPUプログラミング

GPUのメモリ合体アクセス(コアレッシング)の説明として正しいものはどれか。

  1. A2つのGPUのメモリを1つにまとめて容量を2倍にする
  2. Bメモリのデータを圧縮して容量を増やす
  3. Cワープの中の隣り合うスレッドが隣り合う番地を読むと、まとめて少ない回数のメモリアクセスで済む
答えと解説を見る

正解:C. ワープの中の隣り合うスレッドが隣り合う番地を読むと、まとめて少ない回数のメモリアクセスで済む

GPUのメモリは、32バイトや128バイトなどのまとまった単位で読み書きします。ワープの32本のスレッドがそれぞれ4バイトの続いた番地を読むと、合わせて128バイトのまとまりを1〜数回のアクセスで読めます。番地がばらばらだと、スレッドごとに別のまとまりを読むことになり、使わないデータまで運ぶので、実効的な帯域が何分の一にも落ちます。

  • A. 容量をまとめる話ではありません。
  • B. 圧縮とは関係ありません。
  • C. 正しい。帯域を有効に使うための基本です。
この分野を解く 分野ページへ

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

  1. 各スレッドの番号をiとして、上のように32要素おきに配列を読むと、a[i]を読む場合に比べて遅くなる。主な理由はどれか。
  2. 粒子の位置x、y、zを持つデータをGPUで処理するとき、メモリ合体アクセスの点で有利な並べ方はどれか。
  3. CUDAの共有メモリ(シェアードメモリ)の特徴として正しいものはどれか。
  4. CUDAの__syncthreads()の働きとして正しいものはどれか。
  5. CUDAで、__syncthreads()を「if (threadIdx.x < 16)」の中に書き、一部のスレッドだけが通るようにした。起こりうることとして正しいものはどれか。