GPUプログラミング
1つのスレッドブロックあたりのスレッドの数の上限が1024本のGPUで、blockDim.xを2048にしてCUDAのカーネルを起動した。一般にどうなるか。
- AGPUが自動で1024本ずつの2つのブロックに分けて実行する
- B最初の1024本のスレッドだけが実行され、残りは無視される
- C起動の設定が誤りとして扱われ、カーネルは実行されずにエラーが返る
答えと解説を見る
正解:C. 起動の設定が誤りとして扱われ、カーネルは実行されずにエラーが返る
スレッドブロックのスレッドは、すべてが1つのSMに同時に載り、共有メモリや__syncthreads()で協力できる必要があるため、1ブロックあたりのスレッドの数には上限があります。上限を超える設定で起動すると、カーネルは1本のスレッドも実行されず、起動の設定の誤りを示すエラーになります。カーネルの起動は値を返さないので、cudaGetLastError()などでエラーを確かめないと、結果の配列が更新されていないことに気づきにくくなります。2048本分の仕事は、1024本以下のブロックを複数起動して分担させます。
- A. 自動で分けることはしません。ブロックの数とスレッドの数はプログラムが決めます。
- B. 一部だけが実行されることはなく、起動そのものが失敗します。
- C. 正しい。起動の後にエラーを確かめる習慣が大切です。