CUDAで配列アクセス

cuda-array.png

cudaMalloc(ポインタ,割り当てるバイト数)
関数«<グリッド,スレッド»>(引数)

threadIdx.x
blockIdx.x
blockdim 3次元 blockdim.x=x方向にあるスレッドの数
griddim 2次元
イメージ

thread0 thread1
block0
block1

配列的アクセスの仕方

 tid=threadIdx.x+blockIdx.x*blockDim.x

セグメンテーション違反

GPU上で割り当てた変数をCPU上でそのまま使おうとすると現れる。
カーネルで宣言した変数と同じ名前の変数をホスト側で使おうとするときも現れるっぽい。

2次元配列の場合

int i,j,id;
i = blockDim.x*blockIdx.x + threadIdx.x;
j = blockDim.y*blockIdx.y + threadIdx.y;
id = gridDim.x * i + j

サポートサイト Wikidot.com