GPU-programmeren
Welke uitspraak over een uitgangspunt dat bij het schrijven van GPU-kernels moet worden aangehouden, is juist?
- AThreads worden altijd een voor een in volgorde van klein nummer uitgevoerd
- BBlock 1 begint pas nadat block 0 klaar is
- CDe volgorde waarin threads en blocks worden uitgevoerd staat niet vast, dus men schrijft zo dat het resultaat niet van de uitvoeringsvolgorde afhangt
Antwoord en toelichting tonen
Antwoord: C. De volgorde waarin threads en blocks worden uitgevoerd staat niet vast, dus men schrijft zo dat het resultaat niet van de uitvoeringsvolgorde afhangt
Een GPU wijst threads en blocks achtereenvolgens toe aan vrije middelen, dus de uitvoeringsvolgorde verandert met het GPU-model en de belasting. Als een thread op een waarde rekent die door een andere thread is geschreven, kan dat toevallig goed werken maar in een andere omgeving fout gaan. Als een volgorde nodig is, gebruikt men __syncthreads() binnen een block, het splitsen van de kernel tussen blocks en atomaire bewerkingen of reductie voor sommatie.