GPU-programmeren
Binnen één warp splitst een voorwaardelijke sprong de helft van de threads naar de if-zijde en de rest naar de else-zijde (warp divergence). Hoe wordt dit over het algemeen uitgevoerd?
- ABeide zijden worden tegelijk uitgevoerd, dus de snelheid verandert niet
- BDe threads aan de else-zijde worden niet uitgevoerd en vervallen
- CDe if-zijde en de else-zijde worden na elkaar uitgevoerd, waarbij de niet-betrokken threads telkens wachten, zodat de efficiëntie daalt
Antwoord en toelichting tonen
Antwoord: C. De if-zijde en de else-zijde worden na elkaar uitgevoerd, waarbij de niet-betrokken threads telkens wachten, zodat de efficiëntie daalt
De 32 threads van een warp voeren dezelfde instructie uit. Als de sprong zich splitst, wordt eerst de instructie van de if-zijde uitgevoerd met alleen de threads van de if-zijde actief en daarna de else-zijde met de overige threads. Het resultaat is juist, maar omdat telkens de helft van de threads niets doet, is de tijd de som van beide paden. De efficiëntie neemt toe als data of threads zo worden gerangschikt dat sprongen binnen een warp gelijk zijn.