Rozbieżność gałęzi, CUDA i Kinetic Monte Carlo

Mam więc kod, który wykorzystuje Kinetic Monte Carlo na siatce w celu symulacji czegoś. Używam CUDA do uruchomienia tego kodu na moim GPU (chociaż uważam, że to samo pytanie dotyczy także OpenCl).

Oznacza to, że dzielę sieć na małe podsieci i każdy wątek działa na jednym z nich. Ponieważ wykonuję KMC, każdy wątek ma ten kod:

   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 różni się dla różnych wątków, podobnie jak u i 100 to tylko liczba losowa. W kodzie może to być 1000 lub nawet 10000.

Więc, czy nie będziemy mieli rozbieżności gałęzi, gdy nadejdzie czas, aby wątek przeszedł przez to, jeśli? Jak bardzo może to wpłynąć na wydajność? Wiem, że odpowiedź zależy od kodu zawartego w klauzuli if, ale jak ta skala będzie dodawana do coraz większej liczby wątków?

Wszelkie odniesienia do tego, jak mogę oszacować straty / zyski w wydajności, byłyby również mile widziane.

Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion