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?
- ADie Zahl der Transpositionsberechnungen zu halbieren
- BDie Matrixwerte im Shared Memory umzuordnen und aufsteigend zu sortieren
- 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.