GPU-programmeren

Een programma dat duizenden keren achter elkaar zeer kleine kernels start is traag. Welke verbetermethode is het meest passend?

  1. AMeerdere kleine kernels samenvoegen (fuseren) om het aantal starts te verminderen
  2. BTussen de kernelstarts wachttijd inlassen
  3. CHet aantal threads per block op 1 zetten
Antwoord en toelichting tonen

Antwoord: A. Meerdere kleine kernels samenvoegen (fuseren) om het aantal starts te verminderen

Het starten van een kernel kost een vaste tijd van enkele microseconden voor verwerking aan de CPU-zijde en voorbereiding van de GPU. Als de inhoud van de kernel korter is dan dat, valt vooral de moeite van het starten op. Als meerdere bewerkingen in één kernel worden samengevoegd, neemt het aantal starts af en vervalt ook de moeite om tussenresultaten naar het geheugen te schrijven en weer te lezen. Ook worden mechanismen gebruikt die een reeks starts samen vastleggen en in één keer versturen (zoals CUDA Graphs).

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Welke uitspraak over CUDA unified memory is juist?
  2. Wat bepaalt hoofdzakelijk de prestaties wanneer op een GPU twee grote arrays elementgewijs worden opgeteld (c[i] = a[i] + b[i])?
  3. Wat is de meest passende reden waarom bij veel GPU's voor consumentengames de rekenprestatie in dubbele precisie (FP64) veel lager is dan in enkele precisie (FP32) (bijvoorbeeld tientallen keren)?
  4. Welke uitspraak over de kenmerken van de tensor cores (matrixrekeneenheden) van recente GPU's is juist?
  5. Waarom wordt bij gemengde precisie op een GPU vaak de vermenigvuldiging in lage precisie zoals FP16 uitgevoerd en de sommatie (accumulatie) in FP32?

Vergelijkingen bij dit onderwerp