GPU-programmeren

Welke uitspraak over de werking van __syncthreads() in CUDA is juist?

  1. AAlle threads van de GPU wachten op elkaar, ook over blocks heen
  2. BAlle threads van hetzelfde block wachten op elkaar tot ze dit punt hebben bereikt, zodat eerdere schrijfacties naar shared memory zichtbaar zijn
  3. CDe klokken van CPU en GPU worden gelijkgezet
Antwoord en toelichting tonen

Antwoord: B. Alle threads van hetzelfde block wachten op elkaar tot ze dit punt hebben bereikt, zodat eerdere schrijfacties naar shared memory zichtbaar zijn

Bij verwerking met shared memory moet de schrijfactie van een thread zijn voltooid voordat een andere thread de geschreven waarde leest. __syncthreads() laat alle threads van het block wachten tot ze allemaal hier zijn aangekomen, en garandeert zo bijvoorbeeld de volgorde dat eerst iedereen de data in shared memory heeft geladen en daarna met rekenen wordt begonnen. Alleen threads van hetzelfde block kunnen op elkaar wachten.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. In CUDA wordt __syncthreads() binnen 'if (threadIdx.x < 16)' geplaatst, zodat alleen een deel van de threads er doorheen komt. Wat kan er juist gebeuren?
  2. Welke uitspraak over bank conflicts van CUDA shared memory is juist?
  3. Een tabel van 32×32 floats staat in shared memory en de 32 threads van een warp lezen in de kolomrichting (verticaal), waardoor een bank conflict ontstaat. Welke maatregel wordt veel toegepast?
  4. Waarom worden bij het berekenen van een product van grote matrices op een GPU de matrices in kleine tiles verdeeld en in shared memory geladen?
  5. Wat kan er gebeuren in een GPU-kernel als het registergebruik per thread te hoog is?

Vergelijkingen bij dit onderwerp