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?

  1. AEin Array von Strukturen mit x, y, z je Partikel
  2. BAlle Werte in zufälliger Reihenfolge anordnen
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Welche Aussage zum Shared Memory von CUDA ist richtig?
  2. Welche Funktion hat __syncthreads() in CUDA?
  3. In CUDA wurde __syncthreads() innerhalb von „if (threadIdx.x < 16)“ geschrieben, sodass nur ein Teil der Threads es durchläuft. Was kann geschehen?
  4. Welche Aussage zum Bank Conflict im Shared Memory von CUDA ist richtig?
  5. Eine 32×32-float-Tabelle liegt im Shared Memory, und die 32 Threads eines Warps lesen in Spaltenrichtung (vertikal), wodurch Bank Conflicts entstehen. Welche Gegenmaßnahme ist üblich?

Vergleiche zu diesem Thema