GPUプログラミング

GPUで実行すると効率が悪くなりやすい処理はどれか。

  1. A連結リストを先頭から1つずつたどりながら、各要素の値で次の動作を変える処理
  2. B2つの大きな配列の要素ごとの足し算
  3. C大きな画像の全画素の明るさを2倍にする処理
答えと解説を見る

正解:A. 連結リストを先頭から1つずつたどりながら、各要素の値で次の動作を変える処理

連結リストは、次の要素の場所が前の要素を読むまで分からないので、並列にたどれません。さらに値によって動作が変わると、同じ命令で動くスレッドの束の中で分岐が分かれ、効率が下がります。メモリの場所もばらばらで、まとめて読むこともできません。GPUに向くのは、要素ごとに独立で、同じ処理を続けたアドレスのデータに行う仕事です。

  • A. 正しい。並列にできず、分岐も多くなります。
  • B. 要素ごとに独立なので、GPUに向いています。
  • C. 画素ごとに独立なので、GPUに向いています。
この分野を解く 分野ページへ

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

  1. CUDAなどのGPUプログラミングでいう「カーネル」の説明として正しいものはどれか。
  2. CUDAのスレッドの階層の組み合わせとして正しいものはどれか(大きい順)。
  3. CUDAのカーネルで上の式により各スレッドの番号iを求める。blockIdx.x=2、blockDim.x=256、threadIdx.x=5のスレッドのiはいくらか。
  4. 要素数1000の配列を、1ブロック256スレッドで1スレッド1要素ずつ処理したい。起動するブロックの数として正しいものはどれか。
  5. 上のCUDAのカーネルで「if (i < n)」を入れている理由として正しいものはどれか。