有没有办法为共享内存阵列设置默认值?

fsh*_*fsh 12 cuda

请考虑以下代码:

__global__ void kernel(int *something) {
extern __shared__ int shared_array[];     

// Some operations on shared_array here.

}
Run Code Online (Sandbox Code Playgroud)

是否可以将整个shared_array设置为某个值 - 例如0 - 而无需在某个线程中明确地寻址每个单元格?

har*_*ism 14

您可以像这样并行高效地初始化共享阵列

// if SHARED_SIZE == blockDim.x, eliminate this loop
for (int i = threadIdx.x; i < SHARED_SIZE; i += blockDim.x) 
    shared_array[i] = INITIAL_VALUE;
__syncthreads();
Run Code Online (Sandbox Code Playgroud)


Cyg*_*sX1 12

不.共享内存未初始化.你必须以某种方式自己初始化它,不管怎样......

从CUDA C编程指南3.2,B.2.4.2节,第2段:

__shared__ 变量不能作为声明的一部分进行初始化.

这也会丢弃共享变量的非平凡默认构造函数.