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!

questionAnswers(1)

yourAnswerToTheQuestion