GPUプログラミング
非常に小さなカーネルを何千回も続けて起動するプログラムが遅いとき、改善の方法として最も適切なものはどれか。
- A複数の小さなカーネルを1つにまとめる(融合する)などして、起動の回数を減らす
- Bカーネルの起動の間に待ち時間を入れる
- Cブロックあたりのスレッド数を1にする
答えと解説を見る
正解:A. 複数の小さなカーネルを1つにまとめる(融合する)などして、起動の回数を減らす
カーネルの起動には、CPU側の処理とGPUの準備で数マイクロ秒ほどの固定の時間がかかります。カーネルの中身がそれより短いと、起動の手間ばかりが目立ちます。複数の処理を1つのカーネルにまとめると、起動の回数が減るうえ、途中の結果をメモリに書いて読み直す手間も省けます。起動の並びをまとめて記録して一度に送る仕組み(CUDA Graphsなど)も使われます。
- A. 正しい。起動ごとの固定の手間を減らします。
- B. 待ち時間を入れると、さらに遅くなります。
- C. GPUの並列性を捨てることになります。