我有一个关于共享变量如何工作的问题。
当我像这样在内核中声明一个共享变量时
__shared__ int array1[N]
,每个活动块的每个唯一共享内存现在都有一个大小为 N 的 array1 实例。这意味着每个活动块的每个共享内存现在都分配了 N*sizeof(int) 个字节。对于计算能力为 1.3 的 gpu,N*sizeof(int) 最多必须为 16KB。
因此,假设上述内容是正确的并使用在主机上分配的 2D 线程和 2D 块,如下所示:
dim3 block_size(22,22);
dim3 grid_size(25,25);
我将有 25x25 个 array1 实例,每个实例的大小为 N*sizeof(int),并且可以访问块的每个共享内存的最多线程是 22x22。这是我最初的问题,并得到了回答。
问:当我给array1赋值时
array1[0]=1;
那么所有活动块是否立即在自己的共享内存中分配该值?