FC2ブログ
<< 12345678910111213141516171819202122232425262728293031>>
CUDA スレッドID
スレッドIDの使い方が分からなかったけど、
よく考えてみたら初歩的なことで悩んでいたようだ。

GPU関数呼び出すときに、
ブロック数とグリッド数を指定するが、まずはグリッド数を1のときのみ考える。

ブロック数を2次元x,yで考える。

座標で考えると、
(x,y)=(threadIdx.x, threadIdx.y)
となる。

1次元配列で考えると、
2行目は「threadIdx.xの最終列の次」からとなる。

そのため、ブロック数を2次元で指定している場合、
1次元配列の要素番号は
x + y*(xの大きさ)
となる。

1次元配列を2次元配列風に考えると、
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15

こんな感じに並んでいるわけです。

ブロック数を2次元にし、
GPU側で1次元配列として使用する場合は、
Array[threadIdx.x + threadIdx.y*blockDim.x] = 代入したい値
と、こんな感じになる(blockDim.xはXのブロック幅)
→もしかして、blockDim.xの部分違ってる?

グリッド数も指定した場合の例は、後ほど。
(この記事が合っていることを確認できたらw)
スポンサーサイト



2009/10/25(日)19:08 PC trackback:0 comment:0 edit
trackback url
http://daihouko.blog4.fc2.com/tb.php/1200-c21c5651
trackback
comment
post a message