GPU-programmeren

Op een GPU met een limiet van 1024 threads per thread block wordt een CUDA-kernel gestart met blockDim.x ingesteld op 2048. Wat gebeurt er in het algemeen?

  1. ADe GPU splitst het automatisch in twee blocks van elk 1024 threads en voert die uit
  2. BAlleen de eerste 1024 threads worden uitgevoerd en de rest wordt genegeerd
  3. CDe startconfiguratie wordt als ongeldig behandeld, zodat de kernel niet wordt uitgevoerd en er een fout wordt teruggegeven
Antwoord en toelichting tonen

Antwoord: C. De startconfiguratie wordt als ongeldig behandeld, zodat de kernel niet wordt uitgevoerd en er een fout wordt teruggegeven

Alle threads van een thread block moeten tegelijk op één SM staan en moeten via shared memory en __syncthreads() kunnen samenwerken, dus het aantal threads per block is begrensd. Wordt een kernel gestart met een configuratie boven de limiet, dan wordt er geen enkele thread uitgevoerd en mislukt de start met een fout die op een ongeldige configuratie wijst. Het starten van een kernel geeft geen waarde terug, dus zonder de fout te controleren met cudaGetLastError() of iets vergelijkbaars valt het gemakkelijk niet op dat de array met de resultaten nooit is bijgewerkt. Werk voor 2048 threads wordt verdeeld over meerdere blocks van 1024 threads of minder.

Dit onderwerp oefenen Naar de onderwerppagina

Verwante rekentools

Meer vragen over GPU-programmeren

  1. Stel dat een SM van een GPU één issue-eenheid heeft die per cyclus instructies van één warp kan uitgeven. Elke warp geeft herhaaldelijk 20 cycli instructies uit en wacht dan 400 cycli op het resultaat van een geheugenlading. Hoeveel warps zijn minstens nodig om ledige tijd door het wachten op het geheugen weg te werken (latentieverberging), als het wisselen tussen warps geen tijd kost?
  2. Welke uitspraak over het verschil in ontwerpfilosofie tussen CPU en GPU is juist?
  3. Welk kenmerk van werk dat op een GPU snel kan worden verwerkt is het meest passend?
  4. Welke bewerking wordt op een GPU waarschijnlijk inefficiënt uitgevoerd?
  5. Welke uitspraak over wat in GPU-programmering zoals CUDA een 'kernel' wordt genoemd, is juist?

Vergelijkingen bij dit onderwerp