GPU-Programmierung
Welche Anordnung ist unter dem Gesichtspunkt des Memory Coalescing vorteilhaft, wenn Daten mit den Partikelpositionen x, y, z auf der GPU verarbeitet werden?
- AEin Array von Strukturen mit x, y, z je Partikel
- BAlle Werte in zufälliger Reihenfolge anordnen
- CIn ein Array nur für x, ein Array nur für y und ein Array nur für z aufteilen (Struktur von Arrays statt Array von Strukturen)
Antwort und Erläuterung anzeigen
Antwort: C. In ein Array nur für x, ein Array nur für y und ein Array nur für z aufteilen (Struktur von Arrays statt Array von Strukturen)
Bei einem Array von Strukturen (AoS) liegen x, y, z von Partikel 0, dann x, y, z von Partikel 1 usw. hintereinander, sodass die Adressen beim Lesen von x durch jeden Thread jeweils 12 Byte auseinanderliegen. Bei einer Struktur von Arrays (SoA), bei der alle x hintereinanderliegen, lesen benachbarte Threads benachbarte Adressen von x, sodass Coalescing möglich ist. Aus demselben Grund ist SoA auch bei SIMD der CPU oft vorteilhaft.