GPU-Programmierung

Was ist der Hauptzweck, beim Transponieren einer großen Matrix auf der GPU (b[j][i] = a[i][j]) über den Shared Memory zu gehen?

  1. ADie Zahl der Transpositionsberechnungen zu halbieren
  2. BDie Matrixwerte im Shared Memory umzuordnen und aufsteigend zu sortieren
  3. CTiles in Zeilenrichtung mit Coalescing zu laden, im Shared Memory die Orientierung zu ändern und so auch das Schreiben mit Coalescing zu erreichen
Antwort und Erläuterung anzeigen

Antwort: C. Tiles in Zeilenrichtung mit Coalescing zu laden, im Shared Memory die Orientierung zu ändern und so auch das Schreiben mit Coalescing zu erreichen

Bei naiver Implementierung ist das Lesen von a in Zeilenrichtung ein Coalescing-Zugriff, doch das Schreiben nach b erfolgt in Spaltenrichtung, die Adressen springen, und es wird langsam. Werden die Tiles in den Shared Memory geladen und mit vertauschter Thread-Zuordnung gelesen, können sowohl Lesen als auch Schreiben im Global Memory auf aufeinanderfolgenden Adressen erfolgen. Dabei wird kombiniert, eine zusätzliche Spalte zu reservieren, damit beim spaltenweisen Lesen des Shared Memory keine Bank Conflicts auftreten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Welche Aussage zum Verhalten unmittelbar nach dem Start eines Kernels durch das CPU-seitige Programm in CUDA ist im Allgemeinen richtig?
  2. Welche Aussage zum Unterschied in der Entwurfsphilosophie von CPU und GPU ist richtig?
  3. Welches Merkmal beschreibt Aufgaben, die sich auf der GPU schnell verarbeiten lassen, am besten?
  4. Welche Verarbeitung läuft auf der GPU tendenziell ineffizient?
  5. Welche Aussage zum „Kernel“ in der GPU-Programmierung, etwa mit CUDA, ist richtig?

Vergleiche zu diesem Thema