Я пишу код ядра CUDA, который использует разделяемую память, но имеет проблемы с объявлением переменных общей памяти.Невозможно выделить общую память CUDA
Это происходит, когда я пытаюсь распределить несколько разделяемой памяти статически следующим образом.
__global__
void kernel_func(float *global_matrix) {
__shared__ float sm_mat1[4][4];
__shared__ float sm_mat2[6][6];
__shared__ float sm_mat3[3][3][3];
if (blockIdx.x==0 && blockIdx.y==0 && theradIdx.x==0 && threadIdx.y==0)
printf("sizeof(sm_mat1)=%d, sizeof(sm_mat2)=%d, sizeof(sm_mat3)=%d.\n",
sizeof(sm_mat1), sizeof(sm_mat2), sizeof(sm_mat3));
...
}
Однако, когда я выполняю, он выводит странное сообщение следующим образом. sizeof (sm_mat1) = 64, sizeof (sm_mat2) = 0, sizeof (sm_mat3) = 128
Кажется, что вторая матрица не выделена, а 3-я матрица выделена как 2-й. Фактически, доступ к второй матрице работает неправильно. (не может читать/записывать данные).
Я использую GTX 480 и cuda2.0. (Я печатаю сообщение, используя параметр компиляции -arch = sm_20).
У вас есть мысли?
Хорошая точка. Это правильный ответ. Ошибка выполняется только на 64-битных платформах, так как 'sizeof (size_t)' is '8' и интерпретируется как 2 отдельных значения int спецификатором формата'% d'. – sgarizvi