初始化器不允许为cuda的__shared__变量

时间:2011-12-24 10:07:29

标签: cuda gpgpu nvidia

我正在做以下事情:

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];

其中totalElementLessThanPivotEntireBlock是GPU上的数组。编译器抛出错误,如问题标题中所述。我真的不明白为什么这是一个问题?

1 个答案:

答案 0 :(得分:7)

共享变量的静态初始化在CUDA中是非法的。问题是编程模型中未定义每个线程应如何处理共享内存的静态初始化的语义。哪个线程应该写?如果线程之间的值不一致会发生什么?编译器应该如何为这种情况发出代码以及硬件应该如何运行呢?

在你的荒谬的例子中,你要求块中的每个线程用一个值初始化相同的共享变量 - 基本上是一个静态编译的内存竞争。