Programmation GPU
Dans un warp, un branchement conditionnel envoie la moitié des threads dans la branche if et l'autre moitié dans la branche else (divergence de warp). Comment l'exécution se déroule-t-elle généralement ?
- ALes deux branches sont exécutées simultanément, la vitesse est inchangée
- BLes threads de la branche else ne sont pas exécutés et sont abandonnés
- CLes branches if et else sont exécutées successivement, les threads non concernés restant inactifs pendant chacune, ce qui réduit l'efficacité
Afficher la réponse et l'explication
Réponse : C. Les branches if et else sont exécutées successivement, les threads non concernés restant inactifs pendant chacune, ce qui réduit l'efficacité
Les 32 threads d'un warp exécutant la même instruction, en cas de divergence, les instructions de la branche if sont d'abord exécutées avec seuls les threads concernés actifs, puis la branche else avec les threads restants. Le résultat est correct, mais pendant chaque phase la moitié des threads ne fait rien, et le temps est la somme des deux chemins. Organiser les données et les threads pour que les branchements soient uniformes au sein d'un warp améliore l'efficacité.