GPU-programmeren

Wat bepaalt hoofdzakelijk de prestaties wanneer op een GPU twee grote arrays elementgewijs worden opgeteld (c[i] = a[i] + b[i])?

  1. ADe geheugenbandbreedte (omdat per element 12 bytes worden gelezen en geschreven terwijl de berekening slechts één optelling is)
  2. BHet aantal rekeneenheden
  3. CAlleen de klokfrequentie
Antwoord en toelichting tonen

Antwoord: A. De geheugenbandbreedte (omdat per element 12 bytes worden gelezen en geschreven terwijl de berekening slechts één optelling is)

Voor één float-optelling worden a en b elk 4 bytes gelezen en wordt c 4 bytes geschreven: 12 bytes overdracht voor één berekening. Een GPU kan per seconde tientallen biljoenen berekeningen uitvoeren, maar de geheugenbandbreedte bedraagt enkele TB/s, dus deze bewerking wordt naar boven begrensd door de bandbreedte. Om zulke bewerkingen te versnellen zijn effectief: het aantal lees- en schrijfacties van data verminderen en meerdere bewerkingen fuseren zodat tussenresultaten niet naar het geheugen worden geschreven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. 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)?
  2. Welke uitspraak over de kenmerken van de tensor cores (matrixrekeneenheden) van recente GPU's is juist?
  3. Waarom wordt bij gemengde precisie op een GPU vaak de vermenigvuldiging in lage precisie zoals FP16 uitgevoerd en de sommatie (accumulatie) in FP32?
  4. Bij het berekenen van de som van drijvende-kommagetallen van dezelfde data op een GPU week het laatste cijfer van het resultaat bij elke uitvoering lichtjes af. Wat is de meest waarschijnlijke oorzaak?
  5. Welke algemene richtlijn voor het bepalen van het aantal threads per block in CUDA is juist?

Vergelijkingen bij dit onderwerp