这看起来应该很简单,但是我找不到任何参考,所以我在这里问。

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

__global__ void kernel(){

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

    // Do more stuff
}


尝试编译时,出现错误“共享变量不允许初始化”

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

谢谢!

最佳答案

改为这样做:

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

    // Do more stuff
}


__shared___变量的声明必须与操纵它的代码分开。

关于cuda - 为什么不能使用单个线程来初始化共享内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21485114/

10-12 17:24