Diversidade de ramificação, CUDA e Kinetic Monte Carlo
Então, eu tenho um código que usa o Kinetic Monte Carlo em uma rede para simular algo. Eu estou usando CUDA para executar este código na minha GPU (embora eu acredite que a mesma pergunta se aplica ao OpenCl também).
Isso significa que eu divido minha rede em pequenas sub-redes e cada thread opera em uma delas. Como estou fazendo o KMC, cada thread tem esse código:
While(condition == true){
*Grab a sample u from U[0,1]*
for(i = 0; i < 100;i++){
*Do some stuff here to generate A*
if(A > u){
*Do more stuff here, which could include updates to global memory*
break();
}
}
}
A é diferente para diferentes threads e, portanto, u e 100 é apenas um número aleatório. No código, isso poderia ser 1000 ou até 10000.
Então, não teremos divergência de ramificação quando chegar a hora de um thread passar por esse if? O quanto isso pode afetar o desempenho? Eu sei que a resposta depende do código dentro da cláusula if, mas como isso vai escalar conforme eu adiciono mais e mais threads?
Qualquer referência sobre como posso estimar perdas / ganhos no desempenho também seria bem-vinda.
Obrigado!