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

Pro*_*mer 5 cuda gpgpu nvidia

我正在做以下事情:

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];
Run Code Online (Sandbox Code Playgroud)

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

tal*_*ies 7

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

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

  • @talonmies您对单线程条件初始化的评论是答案中最重要的部分,并隐藏在评论中.答案的基调也非常具有攻击性和贬低性. (2认同)