Расхождение в ветвях, CUDA и Kinetic Monte Carlo

Итак, у меня есть код, который использует Kinetic Monte Carlo на решетке, чтобы что-то имитировать. Я использую CUDA для запуска этого кода на моем GPU (хотя я считаю, что тот же вопрос относится и к OpenCl).

Это означает, что я делю свою решетку на маленькие подрешетки, и каждый поток воздействует на одну из них. Так как я делаю KMC, каждый поток имеет этот код:

   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 отличается для разных потоков, так же как и вы, а 100 - просто случайное число. В коде это может быть 1000 или даже 10000.

Итак, не будет ли у нас дивергенции ветвей, когда придет время для прохождения потока, если? Насколько это может повлиять на производительность? Я знаю, что ответ зависит от кода внутри предложения if, но как это масштабируется, когда я добавляю все больше и больше потоков?

Любая ссылка на то, как я могу оценить потери / выгоды в производительности, также будет приветствоваться.

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос