假设您在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",在未知时间可能会干扰算法的情况下?