cuda的共享变量不允许使用初始值设定项

cuda的共享变量不允许使用初始值设定项,cuda,gpgpu,nvidia,Cuda,Gpgpu,Nvidia,我正在做以下工作: __shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x]; 其中TotalElementLessThanPivotEntileBlock是GPU上的一个数组。编译器正在抛出问题标题中所述的错误。我真的不明白为什么这是一个问题?在CUDA中,共享变量的静态初始化是非法的。问题在于编程模型中没有定义每个线程应该如何处理共享内存的静态初始化的语义。哪个线程应该执行写操

我正在做以下工作:

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];

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

在CUDA中,共享变量的静态初始化是非法的。问题在于编程模型中没有定义每个线程应该如何处理共享内存的静态初始化的语义。哪个线程应该执行写操作?如果线程之间的值不一致怎么办?编译器应该如何为这种情况发出代码,硬件应该如何运行它


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

请注意。在上面,我要求块中的每个线程为exForBlockLessThanp分配相同的值使用条件语句让一个线程在内核共享INTP的开头进行初始化;也面临同样的问题,因为块中的每个线程都做同样的事情不,当然不是。这只是一个声明-它不会生成任何代码。@Talonmes您对单线程条件初始化的注释是答案中最重要的部分,并隐藏在注释中。回答的语气也相当咄咄逼人和贬低。