Я думал, что общая память устройства 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
С этой программой я ожидал создать два разных блока, инициализируйте разделяемую память в каждом блоке и получите два разных места для памяти. Я что-то неправильно понимаю? Или эти указатели действительно имеют другое физическое местоположение, но внутри блока адреса кажутся одинаковыми?