Как использовать volatile с общей памятью 2D?

Мне было интересно, как объявить изменчивый указатель на двумерную разделяемую память и будет ли это иметь тот же эффект, что и для одномерных массивов.

__shared__ float 2d_array[32][32];
// not working: volatile T ** smem = sdata; 

person diver_182    schedule 18.07.2012    source источник


Ответы (1)


Обратите внимание, что ваш «двумерный» массив общей памяти на самом деле является только одномерным. Что-то вроде этого:

__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 хранится в основном порядке строк, и к нему можно получить доступ, как я показал.

person talonmies    schedule 18.07.2012
comment
Попробовал ваше предложение и получил следующую ошибку: значение типа volatile float (*) [32U] не может использоваться для инициализации объекта типа volatile float *. - person diver_182; 18.07.2012
comment
@diver_182: извините, я напортачил с кодом, когда публиковал его. Посмотрите на правку. - person talonmies; 18.07.2012