为什么我不能使用单个线程来初始化共享内存?

use*_*898 2 cuda gpu shared-memory

这似乎应该很简单,但我找不到任何参考,所以我在这里问.

我有以下CUDA内核,我将在2-D线程块的网格中启动:

__global__ void kernel(){

    if (threadIdx.x == 0 && threadIdx.y == 0) {
        __shared__ int test = 100;
    }
    __syncthreads();

    // Do more stuff
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我收到错误"初始化程序不允许共享变量"

我究竟做错了什么?在我看来,我只有一个线程正在进行初始化...

谢谢!

Rob*_*lla 10

改为:

__global__ void kernel(){
    __shared__ int test;
    if (threadIdx.x == 0 && threadIdx.y == 0) {
        test = 100;
    }
    __syncthreads();

    // Do more stuff
}
Run Code Online (Sandbox Code Playgroud)

__shared___变量的声明必须与操作它的代码分开.