Quando usar volátil com memória compartilhada CUDA
Em que circunstâncias você deve usar ovolatile
palavra-chave com a memória compartilhada do kernel CUDA? Eu entendi aquilovolatile
diz ao compilador para não armazenar nenhum valor, mas minha pergunta é sobre o comportamento com um array compartilhado:
__shared__ float products[THREADS_PER_ACTION];
// some computation
products[threadIdx.x] = localSum;
// wait for everyone to finish their computation
__syncthreads();
// then a (basic, ugly) reduction:
if (threadIdx.x == 0) {
float globalSum = 0.0f;
for (i = 0; i < THREADS_PER_ACTION; i++)
globalSum += products[i];
}
Eu precisoproducts
ser volátil neste caso? Cada entrada de matriz é acessada apenas por um único thread, exceto no final, onde tudo é lido pelo thread 0. É possível que o compilador possa armazenar em cache toda a matriz, e por isso eu preciso que ele sejavolatile
, ou vai apenas armazenar elementos em cache?
Obrigado!