GPU-programmeren

Welke bewerking wordt op een GPU waarschijnlijk inefficiënt uitgevoerd?

  1. AEen gelinkte lijst van het begin af één voor één doorlopen, waarbij de volgende actie van de waarde van elk element afhangt
  2. BElementgewijze optelling van twee grote arrays
  3. CDe helderheid van alle pixels van een groot beeld verdubbelen
Antwoord en toelichting tonen

Antwoord: A. Een gelinkte lijst van het begin af één voor één doorlopen, waarbij de volgende actie van de waarde van elk element afhangt

Bij een gelinkte lijst is de plaats van het volgende element pas bekend nadat het vorige is gelezen, dus de lijst kan niet parallel worden doorlopen. Als de actie bovendien van de waarde afhangt, splitsen de sprongen zich binnen een bundel threads die met dezelfde instructie werken, waardoor de efficiëntie daalt. Ook liggen de geheugenplaatsen verspreid en kunnen ze niet gebundeld worden gelezen. Een GPU is geschikt voor werk waarbij elk element onafhankelijk is en dezelfde bewerking op data op opeenvolgende adressen wordt uitgevoerd.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Welke uitspraak over wat in GPU-programmering zoals CUDA een 'kernel' wordt genoemd, is juist?
  2. Welke combinatie van de hiërarchie van CUDA-threads is juist (van groot naar klein)?
  3. In een CUDA-kernel wordt met bovenstaande formule het nummer i van elke thread bepaald. Wat is i voor de thread met blockIdx.x=2, blockDim.x=256 en threadIdx.x=5?
  4. Een array van 1000 elementen moet worden verwerkt met 256 threads per block en één element per thread. Welk aantal blocks dat moet worden gestart is juist?
  5. Waarom wordt in de bovenstaande CUDA-kernel 'if (i < n)' opgenomen?

Vergelijkingen bij dit onderwerp