GPUプログラミング
要素数1000の配列を、1ブロック256スレッドで1スレッド1要素ずつ処理したい。起動するブロックの数として正しいものはどれか。
- A3
- B4
- C1000
答えと解説を見る
正解:B. 4
1000÷256≒3.9なので、切り捨てて3ブロックにすると256×3=768要素までしか処理できず、残りが漏れます。切り上げて4ブロック(1024スレッド)を起動し、余った24スレッドは何もしないようにします。一般に「(n + 256 - 1) / 256」のように計算して切り上げます。余ったスレッドが配列の外を読み書きしないよう、カーネルの中で番号を確かめる必要があります。
- A. 3ブロックでは768要素しか処理できません。
- B. 正しい。1000÷256を切り上げると4です。
- C. ブロックの数とスレッドの数を取り違えています。