CUDA カーネルで新しい変数を宣言し、次のように複数のスレッドで使用するとします。
__global__ void kernel(float* delt, float* deltb) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
float a;
a = delt[i] + deltb[i];
a += 1;
}
カーネル呼び出しは以下のようになり、複数のスレッドとブロックが含まれます。
int threads = 200;
uint3 blocks = make_uint3(200,1,1);
kernel<<<blocks,threads>>>(d_delt, d_deltb);
- 「a」はスタックに格納されていますか?
- 初期化時にスレッドごとに新しい「a」が作成されますか?
- それとも、各スレッドが未知の時間に個別に「a」にアクセスし、アルゴリズムを台無しにする可能性がありますか?