CUDA: na redução de urdidura e palavra-chave volátil
Depois de ler a pergunta e sua resposta a partir do seguinte
LIGAÇÃO
Ainda tenho uma pergunta em mente. Da minha formação em C / C ++; Eu entendo que usandovolatile
tem seus deméritos. E também é apontado nas respostas que, no caso de CUDA, as otimizações podem substituir a matriz compartilhada por registradores para manter os dados sevolatile
palavra-chave não é usada.
Quero saber quais seriam os problemas de desempenho que podem ser encontrados ao calcular a redução (soma). por exemplo.
__device__ void sum(volatile int *s_data, int tid)
{
if (tid < 16)
{
s_data[tid] += s_data[tid + 16];
s_data[tid] += s_data[tid + 8];
s_data[tid] += s_data[tid + 4];
s_data[tid] += s_data[tid + 2];
s_data[tid] += s_data[tid + 1];
}
}
Estou usando na redução de urdidura. Como todos os threads no warp estão sincronizados, acredito que não há necessidade de usarsyncthreads()
construir.
Eu quero saber vai remover a palavra-chavevolatile
estragar minha soma (devido a otimizações de cuda)? Posso usar uma redução como essa semvolatile
palavra-chave
Desde que eu uso essa função de redução várias vezes,volatile
palavra-chave causa alguma degradação no desempenho?