GPUプログラミング

GPUで、条件に合う要素だけを配列から取り出して別の配列に詰めて書き出したい(各スレッドが出力する数は0か1)。各スレッドの書き込み先の番地を決めるのによく使われる並列の計算はどれか。

  1. A行列の転置
  2. Bプレフィックスサム(スキャン、前からの累積和)
  3. C高速フーリエ変換
答えと解説を見る

正解:B. プレフィックスサム(スキャン、前からの累積和)

各スレッドが出力するかどうかを0か1で表し、その前からの累積和(排他的なプレフィックスサム)を求めると、各スレッドの値は「自分より前に出力するスレッドの数」になり、それがそのまま書き込み先の番地になります。スキャンはリダクションと同じように木の形で並列に計算できます。出力の数が要素ごとに違う処理を、並列のまま詰めて書き出すための基本の道具です。

  • A. 転置では書き込み先は決まりません。
  • B. 正しい。自分より前の出力の数が書き込み先になります。
  • C. 周波数の変換とは関係ありません。
この分野を解く 分野ページへ

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

  1. GPUのカーネルを書くときに守るべき前提として正しいものはどれか。
  2. GPUで大きな行列を転置する(b[j][i] = a[i][j])とき、共有メモリを経由させる主な目的はどれか。
  3. CUDAで、CPU側のプログラムがカーネルを起動した直後の動作として一般に正しいものはどれか。
  4. CPUとGPUの設計の考え方の違いとして正しいものはどれか。
  5. GPUで速く処理できる仕事の特徴として最も適切なものはどれか。