这看起来应该很简单,但是我找不到任何参考,所以我在这里问。
我有以下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/