GPUプログラミング
CUDAのカーネルで上の式により各スレッドの番号iを求める。blockIdx.x=2、blockDim.x=256、threadIdx.x=5のスレッドのiはいくらか。
int i = blockIdx.x * blockDim.x + threadIdx.x;
- A517
- B263
- C2565
答えと解説を見る
正解:A. 517
blockIdx.xはグリッドの中でのブロックの番号、blockDim.xはブロックあたりのスレッドの数、threadIdx.xはブロックの中でのスレッドの番号です。ブロック0が0〜255、ブロック1が256〜511を担当するので、ブロック2の5番目のスレッドは2×256+5=517になります。この式で、すべてのスレッドに重ならない通し番号を付け、担当する配列の要素を決めます。
- A. 正しい。2×256+5=517です。
- B. blockIdx.xを掛けずに足しています。
- C. 数字を並べただけで、計算になっていません。