Den naive matmul-kjernen
En grunnimplementasjon med 2D-indekser og dens begrensninger
Den naive matmul-kjernen er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i CUDA Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i CUDA Academy inneholder totalt 4 leksjoner.
Matriseprodukt på GPU-måten
Matriseprodukt er kjernen i grafikk og kunstig intelligens. I dag bygger du først en naiv GPU-versjon, og lærer deretter hvorfor den ikke utnytter all tilgjengelig hastighet.
Matematikken på én linje
Hver utgangscelle C[row][col] er et skalarprodukt: multipliser en hel rad i A med en hel kolonne i B, og summer resultatene. 🧮
C[row][col] = sum over k of A[row][k] * B[k][col]Én tråd per utgang
Den enkleste planen gir hver tråd ett utgangselement i C. Tusenvis av celler beregnes samtidig på tvers av GPU-en.
Et 2D-rutenett med tråder
Siden C er et 2D-rutenett, starter De tråder i to dimensjoner. x-indeksen tilsvarer en kolonne, og y-indeksen tilsvarer en rad.
dim3 threads(16, 16);
dim3 blocks((N+15)/16, (N+15)/16);Finne cellen til denne tråden
Inne i kernelen beregner hver tråd sin egen rad og kolonne ut fra blokk- og trådindeksene, akkurat som ved 1D-indeksering, men langs begge aksene.
int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;Sjekk av grensene
Rutenett rundes opp, så noen tråder havner utenfor matrisen. Bruk if (row < N && col < N) som beskyttelse før De får tilgang til minnet.
if (row < N && col < N) {
// safe to compute
}Den indre løkken
Hver tråd kjører en løkke over k og summerer produkter i en lokal sum. Denne lokale variabelen ligger i et raskt register.
float sum = 0.0f;
for (int k = 0; k < N; ++k)
sum += A[row*N+k] * B[k*N+col];Skrive resultatet
Når løkken er ferdig, lagrer tråden den akkumulerte summen i C nøyaktig én gang. Én tråd, én ryddig skriving.
C[row*N + col] = sum;Radvis utflating
Matrise er en flat 1D-tabell, så De indekserer den som row*N + col. Å få dette oppsettet riktig er halve jobben ved matrisemultiplikasjon.
Hvorfor det fungerer, men går sakte
Denne kernelen er korrekt og lett å lese, men hver tråd leser raden og kolonnen sin direkte fra globalt minne, det tregeste minneområdet.
Den skjulte kostnaden
Nabotråder leser de samme A-radene og B-kolonnene på nytt om og om igjen. Denne bortkastede minnetrafikken er nettopp det flislegging skal løse nå.
Rask kontroll
Tenk over hvordan den naive kernelen fordeler arbeidet på trådene.
Oppsummering
De koblet én tråd til én ut-celle, gikk gjennom k fra globalt minne og så de overflødige lesingene. Nå reduserer De denne trafikken med flislegging. 🚀
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Den naive matmul-kjernen» gratis?
Ja – hele teksten i «Den naive matmul-kjernen» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av CUDA Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i CUDA Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Den naive matmul-kjernen»?
En grunnimplementasjon med 2D-indekser og dens begrensninger Du øver på CUDA Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med CUDA Academy?
Ingen tidligere erfaring er nødvendig. CUDA Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Den naive matmul-kjernen»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne CUDA Academy-leksjonen?
Ja. Alle CUDA Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Den naive matmul-kjernen
- Delpryd den indre multiplikasjonen i fliser
- Iterer gjennom flisfasene
- Mål ytelsesforbedringen