GPU-programmeren

Wat is het belangrijkste doel van het laten lopen via shared memory bij het transponeren van een grote matrix op een GPU (b[j][i] = a[i][j])?

  1. AHet aantal transpositieberekeningen halveren
  2. BDe waarden van de matrix in shared memory herordenen, zodat ze van klein naar groot staan
  3. CEen tile met coalesced toegang in de rijrichting laden, de richting in shared memory omdraaien en ook het schrijven coalesced maken
Antwoord en toelichting tonen

Antwoord: C. Een tile met coalesced toegang in de rijrichting laden, de richting in shared memory omdraaien en ook het schrijven coalesced maken

Bij een naïeve implementatie is het lezen van a in de rijrichting coalesced, maar het schrijven naar b gebeurt in de kolomrichting, met verspreide adressen en dus traag. Als de tile eerst in shared memory wordt geladen en daarna met verwisselde verantwoordelijkheid van de threads wordt uitgelezen, kunnen zowel het lezen als het schrijven in global memory op opeenvolgende adressen plaatsvinden. Daarbij wordt ook de maatregel gecombineerd om één kolom extra te reserveren, zodat bij uitlezen in de kolomrichting van shared memory geen bank conflicts optreden.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Welke uitspraak is in het algemeen juist over wat er in CUDA gebeurt direct nadat het programma aan de CPU-zijde een kernel start?
  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