CUDA: synchronisation des threads

Presque n'importe où, j'ai lu sur la programmation avec CUDA il y a une mention de l'importance que tous les threads d'un warp faire la même chose.
Dans mon code j'ai une situation où je ne peux pas éviter une certaine condition. Il ressemble à ceci:

//some math code, calculating d1, d2
if (d1 < 0.5)
{
    buffer[x1] += 1;  //buffer is in the global memory
}
if (d2 < 0.5)
{
    buffer[x2] += 1;
}
//some more math code.

Des threads peut entrer dans une pour la des conditions, on pourrait en conclure deux et les autres peuvent ne pas entrer en soit.

Maintenant, pour faire de tous les thread revenir à "faire la même chose" de nouveau après les conditions, devrais-je synchroniser après les conditions de l'aide __syncthreads() ? Ou est-ce en quelque sorte se produit automatiquement?
Deux threads être pas faire la même chose, en raison de l'un d'eux étant une opération de derrière, donc ruiner pour tout le monde? Ou est-il derrière les coulisses effort pour les amener à faire la même chose à nouveau après une branche?

source d'informationauteur shoosh