GPU-Programmierung
Innerhalb eines Warps teilt sich durch eine bedingte Verzweigung eine Hälfte der Threads auf die if-Seite und die andere Hälfte auf die else-Seite auf (Warp Divergence). Wie wird dies im Allgemeinen ausgeführt?
- ABeide Seiten werden gleichzeitig ausgeführt, die Geschwindigkeit ändert sich nicht
- BDie Threads der else-Seite werden nicht ausgeführt und verworfen
- Cif-Seite und else-Seite werden nacheinander ausgeführt, wobei die jeweils nicht betroffenen Threads pausieren, sodass die Effizienz sinkt
Antwort und Erläuterung anzeigen
Antwort: C. if-Seite und else-Seite werden nacheinander ausgeführt, wobei die jeweils nicht betroffenen Threads pausieren, sodass die Effizienz sinkt
Die 32 Threads eines Warps führen dieselbe Anweisung aus; bei einer Verzweigung werden zunächst die Anweisungen der if-Seite nur für die Threads der if-Seite aktiv ausgeführt und dann die else-Seite für die übrigen Threads. Das Ergebnis ist korrekt, doch da jeweils die Hälfte der Threads nichts tut, ergibt sich als Zeit die Summe beider Pfade. Die Effizienz steigt, wenn Daten und Thread-Anordnung so gewählt werden, dass die Verzweigungen innerhalb eines Warps übereinstimmen.