GPUプログラミング

1つのスレッドブロックあたりのスレッドの数の上限が1024本のGPUで、blockDim.xを2048にしてCUDAのカーネルを起動した。一般にどうなるか。

  1. AGPUが自動で1024本ずつの2つのブロックに分けて実行する
  2. B最初の1024本のスレッドだけが実行され、残りは無視される
  3. C起動の設定が誤りとして扱われ、カーネルは実行されずにエラーが返る
答えと解説を見る

正解:C. 起動の設定が誤りとして扱われ、カーネルは実行されずにエラーが返る

スレッドブロックのスレッドは、すべてが1つのSMに同時に載り、共有メモリや__syncthreads()で協力できる必要があるため、1ブロックあたりのスレッドの数には上限があります。上限を超える設定で起動すると、カーネルは1本のスレッドも実行されず、起動の設定の誤りを示すエラーになります。カーネルの起動は値を返さないので、cudaGetLastError()などでエラーを確かめないと、結果の配列が更新されていないことに気づきにくくなります。2048本分の仕事は、1024本以下のブロックを複数起動して分担させます。

  • A. 自動で分けることはしません。ブロックの数とスレッドの数はプログラムが決めます。
  • B. 一部だけが実行されることはなく、起動そのものが失敗します。
  • C. 正しい。起動の後にエラーを確かめる習慣が大切です。
この分野を解く 分野ページへ

関連する計算ツール

GPUプログラミングの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

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

  1. GPUのSMに命令を出す仕組みが1つあり、1サイクルに1つのワープから命令を出せるとする。各ワープは「20サイクル分の命令を出したあと、メモリの読み込みの結果が届くまで400サイクル待つ」ことを繰り返す。ワープの切り替えに時間がかからないとき、メモリの待ちによる空き時間をなくす(レイテンシ隠蔽)のに必要なワープの数は最低いくつか。
  2. CPUとGPUの設計の考え方の違いとして正しいものはどれか。
  3. GPUで速く処理できる仕事の特徴として最も適切なものはどれか。
  4. GPUで実行すると効率が悪くなりやすい処理はどれか。
  5. CUDAなどのGPUプログラミングでいう「カーネル」の説明として正しいものはどれか。

この分野の比較