Как да използвам 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