Wat is Warp divergence?

Verschijnsel waarbij de paden van threads binnen één warp door een voorwaardelijke sprong uiteenlopen. De gesplitste paden worden na elkaar uitgevoerd, dus de efficiëntie daalt.

Japanse benaming: ワープダイバージェンス

“Warp divergence” komt voor in 1 oefenvragen uit 1 onderwerpen, bijv. GPU-programmeren.

Vakgebied: GPU-programmeren

Nu oefenen: vragen over Warp divergence

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?

  1. ABeide zijden worden tegelijk uitgevoerd, dus de snelheid verandert niet
  2. BDe threads aan de else-zijde worden niet uitgevoerd en vervallen
  3. 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.

Vragen met “Warp divergence” (1)

  1. 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?

Verwante termen

Bankconflict Constant memory CUDA Gemengde precisie (mixed precision) GPU-kernel Grid-stride loop Latentieverberging (latency hiding) Memory coalescing Occupancy OpenCL

Naar de woordenlijst