<< 12345678910111213141516171819202122232425262728293031>>
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/--(--)--:-- スポンサー広告 edit
CUDA グリッド数で考える
スレッドIDをまずは参照。

次に、グリッド数で考える。
こちらもブロック数(スレッドID使用)と似たような感じ。

今度がブロック数が1、グリッド数が2次元で考える。

座標で考えると、
(x, y) = (blockIdx.x, blockIdx.y)

xの幅は、blockDim.x。

よって、配列の要素番号は
blockIdx.x + blockIdx.y*gridDim.x
(この場合、gridDim.x がxの幅となる)

次に、ブロック数とグリッド数両方が2次元となった場合を考える。

これも今まで行ってきたのと同じような感じで考えることができる。

式をそのまま使うと分かりづらいので、一旦まとめる。
x_a = threadIdx.x + threadIdx.y*blockDim.x(ブロック)
y_a = blockIdx.x + blockIdx.y*gridDim.x(グリッド)
と、こんな感じ。

※x_aの幅は1ブロックの面積と考えられるので、blockDim.x*blockDim.yとなる。

よって、配列の要素番号は
x_a + y_a*(blockDim.x*blockDim.y)
=threadIdx.x + threadIdx.y*blockDim.x
+ (blockIdx.x + blockIdx.y*gridDim.x) * (blockDim.x*blockDim.y)

と、こんな感じです。
何か最後の式は分かりづらいので、
一旦x_a、y_aを変数にして計算した方がいい。

これで1280*1024の処理も可能になるかな?
ブロック数を256*512、グリッド数を5*2でOK?
スポンサーサイト
2009/10/25(日)20:41 PC trackback:0 comment:0 edit
trackback url
http://daihouko.blog4.fc2.com/tb.php/1201-2de76c8d
trackback
comment
post a message






上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。