CUDA Academy · Lektion

Structure of Arrays vs. Array of Structs

Wählen Sie Speicherlayouts, die koaleszierte Zugriffe ermöglichen.

Lektion 3 von 413 Schritte

Structure of Arrays vs. Array of Structs ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CUDA Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Zwei Möglichkeiten zum Speichern von Datensätzen

Angenommen, jedes Partikel besitzt die Werte x, y und z. Sie können diese zusammenhalten oder voneinander trennen – und diese Entscheidung beeinflusst, wie jeder Warp koalesziert.

Array of Structs

Das natürliche C++-Layout legt die Felder jedes Datensatzes direkt nebeneinander. Das ist ein array of structs, häufig als AoS abgekürzt.

struct Particle { float x, y, z; };
Particle p[N];

Warum AoS Zugriffe verteilt

Wenn ein Warp nur x aus jedem Datensatz liest, liegen die x-Werte 12 Byte auseinander. Dieser eingebaute Stride verschwendet den größten Teil jeder abgerufenen Cache-Zeile.

float xi = p[i].x; // x values are spaced by sizeof(Particle)

Structure of Arrays

Drehen Sie das Prinzip um: Speichern Sie alle x-Werte zusammen, ebenso alle y- und alle z-Werte. Das ist eine structure of arrays, kurz SoA.

float x[N];
float y[N];
float z[N];

Warum SoA koalesziert

Beim Lesen von x durch 32 Threads werden nun 32 zusammenhängende Gleitkommazahlen angesprochen. Das entspricht einer ausgerichteten Cache-Zeile und einer einzigen übersichtlichen Transaktion pro Feld.

float xi = x[i]; // neighbors land in one line

Der Test des Feldzugriffs

Fragen Sie sich, wie Ihr Kernel Daten liest. Wenn Threads ein Feld über viele Datensätze hinweg durchlaufen, gewinnt SoA auf der GPU fast immer.

Wann AoS in Ordnung ist

Wenn jeder Thread alle Felder eines Datensatzes gemeinsam verwendet, hält AoS sie in einer Cache-Zeile und ist weiterhin cachefreundlich.

Bandbreite, nicht nur Stil

Hier geht es nicht um Geschmack. Der Wechsel von AoS zu SoA kann den tatsächlichen Durchsatz bei gleicher Berechnung vervielfachen, indem einfach weniger Bytes verschwendet werden.

Ein hybrider Mittelweg

Sie können einige Datensätze gruppieren und die Felder innerhalb jeder Gruppe trennen. Dieses AoSoA-Layout bringt Koaleszierung und Cache-Lokalität ins Gleichgewicht.

Vor der Optimierung entwerfen

Das Layout lässt sich später nur schwer ändern, da es jeden Kernel und jeden Kopiervorgang betrifft. Wählen Sie Ihr SoA- oder AoS-Layout frühzeitig anhand der Zugriffsmuster. 🧩

Die wichtigste Zuordnung

GPU-Faustregel: Trennen Sie Felder in Arrays, damit jeder Warp einen zusammenhängenden Bereich liest. Bevorzugen Sie SoA für feldweise arbeitende Kernel.

Schnelltest

Wählen Sie das Layout, das diesen Zugriff koalesziert.

Zusammenfassung

Sie haben AoS und SoA verglichen: Packen Sie Felder für die Verwendung vollständiger Datensätze zusammen, trennen Sie sie jedoch in Arrays, wenn Warps jeweils ein Feld durchlaufen. 🎉

Kostenlos starten

Lerne C++ mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Structure of Arrays vs. Array of Structs“ kostenlos?

Ja — der vollständige Text von „Structure of Arrays vs. Array of Structs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CUDA Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Structure of Arrays vs. Array of Structs“?

Wählen Sie Speicherlayouts, die koaleszierte Zugriffe ermöglichen. Du übst CUDA Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CUDA Academy zu starten?

Keine Vorkenntnisse erforderlich. CUDA Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Structure of Arrays vs. Array of Structs“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CUDA Academy-Lektion Code schreiben und ausführen?

Ja. Jede CUDA Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Was eine Speichertransaktion ist
  2. Koaleszierte vs. gestridete Lesezugriffe
  3. Structure of Arrays vs. Array of Structs
  4. Die effektive Bandbreite messen
← Zurück zu CUDA Academy