【发布时间】:2020-05-21 17:38:55
【问题描述】:
我认为 cuda 设备的共享内存是块私有的。但是,在我看来,跨两个块的共享内存指针是相同的:
#include <stdio.h>
__global__ void foo() {
__shared__ int ar[8];
printf("shared memory pointer %p at blockidx %i\n", ar, blockIdx.x);
}
int main() {
dim3 blockDim(1);
dim3 gridDim(2);
foo<<<gridDim, blockDim>>>();
cudaDeviceSynchronize();
}
运行上面的代码会产生:
shared memory pointer 0x7f88f5000000 at blockidx 0
shared memory pointer 0x7f88f5000000 at blockidx 1
使用这个程序,我希望创建两个不同的块,在每个块上初始化共享内存并获得两个不同的内存位置。我是不是误会了什么?还是这些指针确实具有不同的物理位置,但在一个块内地址似乎相同?
【问题讨论】: