【发布时间】:2012-01-27 06:36:51
【问题描述】:
我正在做以下事情:
__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];
其中 totalElementLessThanPivotEntireBlock 是 GPU 上的一个数组。如问题标题中所述,编译器正在抛出错误。我真的不明白为什么这是一个问题?
【问题讨论】:
我正在做以下事情:
__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];
其中 totalElementLessThanPivotEntireBlock 是 GPU 上的一个数组。如问题标题中所述,编译器正在抛出错误。我真的不明白为什么这是一个问题?
【问题讨论】:
共享变量的静态初始化在 CUDA 中是非法的。问题是每个线程应该如何处理共享内存的静态初始化的语义在编程模型中是未定义的。哪个线程应该写?如果线程之间的值不统一会发生什么?编译器应该如何为这种情况发出代码,硬件应该如何运行它?
在您的荒谬示例中,您要求块中的每个线程用一个值初始化相同的共享变量——基本上是静态编译的内存竞争。
【讨论】: