Мне было интересно, как объявить изменчивый указатель на двумерную разделяемую память и будет ли это иметь тот же эффект, что и для одномерных массивов.
__shared__ float 2d_array[32][32];
// not working: volatile T ** smem = sdata;
Мне было интересно, как объявить изменчивый указатель на двумерную разделяемую память и будет ли это иметь тот же эффект, что и для одномерных массивов.
__shared__ float 2d_array[32][32];
// not working: volatile T ** smem = sdata;
Обратите внимание, что ваш «двумерный» массив общей памяти на самом деле является только одномерным. Что-то вроде этого:
__shared__ volatile float array_2d[32][32];
volatile float *smem = &array_2d[0][0];
float val = *(smem + y + 32*x) // address of s2_array[x][y]
это то, что вы хотите. Статический массив array_2d
хранится в основном порядке строк, и к нему можно получить доступ, как я показал.