GPU-programmeren
In CUDA wil men halverwege een kernel wachten tot de berekeningen van alle andere blocks klaar zijn voordat men naar de volgende fase gaat. Welke methode is gebruikelijk?
- A__syncthreads() aanroepen
- BDe kernel op dat punt in tweeën splitsen en de tweede kernel starten nadat de eerste klaar is
- CIn een lus blijven wachten op een vlag die andere blocks schrijven
Antwoord en toelichting tonen
Antwoord: B. De kernel op dat punt in tweeën splitsen en de tweede kernel starten nadat de eerste klaar is
Blocks worden onafhankelijk uitgevoerd en mogen in elke volgorde worden uitgevoerd, dus niet alle blocks staan noodzakelijk tegelijk op de GPU. Als het block waarop wordt gewacht nog niet is begonnen, eindigt een lus die op een vlag wacht nooit. Daarom wordt gewoonlijk gebruikgemaakt van de eigenschap dat een kernel in dezelfde stream pas begint nadat de vorige klaar is, en wordt globale synchronisatie bereikt door de kernel te splitsen.