CUDA Academy · Les

De naïeve matmul-kernel

Een basisimplementatie met 2D-indexering en de beperkingen ervan.

Les 1 van 413 stappen

De naïeve matmul-kernel is een gratis CUDA Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject CUDA Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus CUDA Academy bevat in totaal 4 lessen.

Matrixvermenigvuldiging in GPU-stijl

Matrixvermenigvuldiging vormt het hart van grafische toepassingen en AI. Vandaag bouw je eerst een naïeve GPU-versie en leer je daarna waarom deze snelheid laat liggen.

De berekening in één regel

Elke uitvoercel C[row][col] is een inwendig product: vermenigvuldig een volledige rij van A met een volledige kolom van B en tel de resultaten op. 🧮

C[row][col] = sum over k of A[row][k] * B[k][col]

Eén thread per uitvoerwaarde

Bij het eenvoudigste plan krijgt elke thread één uitvoerelement van C. Duizenden cellen worden tegelijkertijd berekend verspreid over de GPU.

Een 2D-raster van threads

Omdat C een 2D-raster is, start je threads in twee dimensies. De x-index verwijst naar een kolom en de y-index naar een rij.

dim3 threads(16, 16);
dim3 blocks((N+15)/16, (N+15)/16);

De cel van deze thread vinden

Binnen de kernel berekent elke thread zijn eigen rij en kolom op basis van zijn blok- en threadindexen, net als bij 1D-indexering maar dan op beide assen.

int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;

De grenscontrole

Rasters worden naar boven afgerond, waardoor sommige threads buiten de matrix vallen. Gebruik if (row < N && col < N) als beveiliging voordat je geheugen benadert.

if (row < N && col < N) {
  // safe to compute
}

De binnenste lus

Elke thread doorloopt een lus over k en telt producten op in een lokale som. Die lokale variabele staat in een snel register.

float sum = 0.0f;
for (int k = 0; k < N; ++k)
  sum += A[row*N+k] * B[k*N+col];

Het resultaat schrijven

Wanneer de lus klaar is, slaat de thread zijn opgetelde som precies één keer op in C. Eén thread, één duidelijke schrijfactie.

C[row*N + col] = sum;

Rijgewijs afvlakken

De matrix is een platte 1D-array, dus je indexeert deze als row*N + col. De juiste indeling gebruiken is bij matmul het halve werk.

Waarom het werkt, maar langzaam

Deze kernel is correct en goed leesbaar, maar elke thread leest zijn rij en kolom rechtstreeks uit het globale geheugen, de langzaamste geheugenruimte.

De verborgen kosten

Naburige threads lezen steeds opnieuw dezelfde rijen van A en kolommen van B. Dat verspilde geheugenverkeer is precies wat tegels straks oplossen.

Korte controle

Denk na over hoe de eenvoudige kernel het werk aan threads toewijst.

Samenvatting

Je hebt één thread aan één uitvoercel gekoppeld, over k geloopt met gegevens uit het globale geheugen en de overbodige leesacties gezien. Vervolgens verminder je dat verkeer met tegels. 🚀

Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “De naïeve matmul-kernel” gratis?

Ja — de volledige tekst van “De naïeve matmul-kernel” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus CUDA Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus CUDA Academy bevat in totaal 4 lessen.

Wat leer ik in “De naïeve matmul-kernel”?

Een basisimplementatie met 2D-indexering en de beperkingen ervan. Je oefent met CUDA Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met CUDA Academy te beginnen?

Ervaring vooraf is niet nodig. CUDA Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “De naïeve matmul-kernel”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over CUDA Academy?

Ja. Elke les over CUDA Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De naïeve matmul-kernel
  2. Het inwendig product tilen
  3. Door tilefasen loopen
  4. De snelheidswinst meten
← Terug naar CUDA Academy