CUDA Academy · Lektion

Array av strukturer eller struktur av arrayer

Välj layouter som möjliggör samlade åtkomster.

Lektion 3 av 413 steg

Array av strukturer eller struktur av arrayer är en gratis lektion i CUDA Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för CUDA Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i CUDA Academy innehåller totalt 4 lektioner.

Två sätt att lagra poster

Anta att varje partikel har x, y och z. Ni kan lagra dem tillsammans eller separera dem, och det valet påverkar hur varje warp sammanfogas.

Array av strukturer

Den naturliga C++-layouten packar varje posts fält bredvid varandra. Detta är en array av strukturer, ofta förkortad AoS.

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

Varför AoS sprider ut värden

När en warp bara läser x från varje post ligger x-värdena 12 byte från varandra. Den inbyggda steglängden slösar då bort större delen av varje cachelinje som hämtas.

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

Struktur av arrayer

Vänd på det: lagra alla x-värden tillsammans, alla y-värden tillsammans och alla z-värden tillsammans. Detta är en struktur av arrayer, eller SoA.

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

Varför SoA sammanfogas

Nu berör läsning av x för 32 trådar 32 sammanhängande flyttal. Det blir en justerad cachelinje och en prydlig transaktion per fält.

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

Testet för fältåtkomst

Fråga Er hur kärnan läser data. Om trådarna går igenom ett fält i många poster vinner SoA nästan alltid på GPU:n.

När AoS fungerar bra

Om varje tråd använder alla fält i en post tillsammans håller AoS dem på samma cachelinje och fungerar bra med cachen.

Bandbredd, inte bara stil

Detta handlar inte om smak. Att byta från AoS till SoA kan mångdubbla den verkliga genomströmningen för samma beräkningar, helt enkelt genom att minska antalet bortkastade byte.

En hybridlösning

Ni kan gruppera några poster och sedan dela upp fälten inom varje grupp. Denna AoSoA-layout balanserar sammanfogning med lokalitet i cachen.

Utforma innan Ni optimerar

Layouten är svår att ändra sent, eftersom den påverkar varje kärna och kopiering. Välj form för SoA eller AoS tidigt, utifrån åtkomstmönstren. 🧩

Den viktigaste avbildningsregeln

Tumregel för GPU: separera fälten i arrayer så att varje warp läser ett sammanhängande område. Föredra SoA för kärnor som arbetar fältvis.

Snabb kontroll

Välj den layout som sammanfogar denna åtkomst.

Sammanfattning

Ni jämförde AoS och SoA: packa fälten tillsammans när hela poster används, men dela upp dem i arrayer när warps går igenom ett fält i taget. 🎉

Gratis att börja

Lär dig C++ med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Array av strukturer eller struktur av arrayer” gratis?

Ja – hela texten till ”Array av strukturer eller struktur av arrayer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i CUDA Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i CUDA Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Array av strukturer eller struktur av arrayer”?

Välj layouter som möjliggör samlade åtkomster. Ni övar på CUDA Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig CUDA Academy?

Du behöver inga förkunskaper. Utbildningen i CUDA Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Array av strukturer eller struktur av arrayer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här CUDA Academy-lektionen?

Ja. Varje CUDA Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Vad en minnestransaktion är
  2. Samlade eller stegvisa läsningar
  3. Array av strukturer eller struktur av arrayer
  4. Mät effektiv bandbredd
← Tillbaka till CUDA Academy