Divergencia de ramas, CUDA y cinética de Monte Carlo.

Entonces, tengo un código que usa el Monte Carlo cinético en una celosía para simular algo. Estoy usando CUDA para ejecutar este código en mi GPU (aunque creo que la misma pregunta se aplica también a OpenCl).

Esto significa que divido mi celosía en pequeñas subrejas y cada hilo opera en una de ellas. Ya que estoy haciendo KMC, cada hilo tiene este 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 es diferente para diferentes hilos y también lo es u y 100 es solo un número aleatorio. En el código, esto podría ser 1000 o incluso 10000.

Entonces, ¿no tendremos divergencia de rama cuando llegue el momento de que un hilo pase a través de eso si? ¿Qué tanto puede afectar esto al rendimiento? Sé que la respuesta depende del código dentro de la cláusula if, pero ¿cómo se escalará a medida que añada más y más subprocesos?

Cualquier referencia sobre cómo puedo estimar las pérdidas / ganancias en el rendimiento también sería bienvenida.

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta