GPUプログラミング

単体のGPUを使うプログラムで、CPU側のメモリとGPU側のメモリについて一般的に正しいものはどれか。

  1. A別々のメモリなので、計算の前にデータをGPUへコピーし、終わったら結果をCPUへコピーして戻す
  2. B同じメモリなので、コピーは一切必要ない
  3. CGPUは計算の結果を保存できない
答えと解説を見る

正解:A. 別々のメモリなので、計算の前にデータをGPUへコピーし、終わったら結果をCPUへコピーして戻す

単体のGPUは、カードの上にGDDRやHBMの専用のメモリを持ち、CPUのメモリとはPCI Expressなどでつながっています。そのため、CPUのメモリにあるデータをGPUのメモリへコピーしてからカーネルを起動し、終わったら結果をCPUのメモリへコピーして戻すのが基本の流れです。このコピーの時間が全体の性能を左右することがよくあります。

  • A. 正しい。cudaMemcpyなどでコピーします。
  • B. 単体のGPUは自分専用のメモリを持っています。
  • C. GPUのメモリに結果を書き込めます。
この分野を解く 分野ページへ

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

  1. 配列の要素を1回だけ足し算するような軽い処理のためにデータをGPUへ送ると、CPUで計算するより遅くなることがある。主な理由はどれか。
  2. CPUのメモリをピン留め(ページロック)してからGPUへ転送すると速くなる理由として正しいものはどれか。
  3. CUDAのストリームを複数使う主な目的はどれか。
  4. 非常に小さなカーネルを何千回も続けて起動するプログラムが遅いとき、改善の方法として最も適切なものはどれか。
  5. CUDAのユニファイドメモリ(統合メモリ)の説明として正しいものはどれか。