Den naiva matmul-kärnan
En tvådimensionellt indexerad baslinje och dess begränsningar.
Den naiva matmul-kärnan är en gratis lektion i CUDA Academy på CoddyKit. Detta är lektion 1 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.
Matrismultiplikation på GPU-vis
Matrismultiplikation är central inom grafik och AI. I dag bygger du först en naiv GPU-version och lär dig sedan varför den inte utnyttjar all tillgänglig hastighet.
Matematiken på en rad
Varje utdatacell C[row][col] är en skalärprodukt: multiplicera en hel rad i A med en hel kolumn i B och summera resultaten. 🧮
C[row][col] = sum over k of A[row][k] * B[k][col]En tråd per utdata
Den enklaste planen ger varje tråd ett utdatatelement i C. Tusentals celler beräknas samtidigt över hela GPU:n.
Ett 2D-rutnät av trådar
Eftersom C är ett 2D-rutnät startar Ni trådar i två dimensioner. x-indexet motsvarar en kolumn och y-indexet motsvarar en rad.
dim3 threads(16, 16);
dim3 blocks((N+15)/16, (N+15)/16);Hitta trådens cell
Inuti kerneln beräknar varje tråd sin egen row och col utifrån block- och trådindex, precis som vid 1D-indexering men längs båda axlarna.
int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;Kontrollera gränserna
Rutnät avrundas uppåt, så vissa trådar hamnar utanför matrisen. Skydda minnesåtkomsten med if (row < N && col < N).
if (row < N && col < N) {
// safe to compute
}Den inre loopen
Varje tråd kör en loop över k och samlar produkterna i en lokal summa. Den lokala variabeln lagras i ett snabbt register.
float sum = 0.0f;
for (int k = 0; k < N; ++k)
sum += A[row*N+k] * B[k*N+col];Skriv resultatet
När loopen är klar lagrar tråden sin ackumulerade summa i C exakt en gång. En tråd, en ren skrivning.
C[row*N + col] = sum;Radvis utplattning
Matriserna är platta 1D-arrayer, så Ni indexerar dem som row*N + col. Att få denna layout rätt är halva arbetet vid matrismultiplikation.
Varför det fungerar, men långsamt
Den här kerneln är korrekt och lätt att läsa, men varje tråd läser sin rad och kolumn direkt från global memory, det långsammaste minnesområdet.
Den dolda kostnaden
Granntrådar läser om samma A-rader och B-kolumner om och om igen. Den bortkastade memory traffic är precis det som tiling kommer att lösa härnäst.
Snabb kontroll
Tänk på hur den naiva kerneln fördelar arbetet mellan trådarna.
Sammanfattning
Ni kopplade en tråd till varje utgående cell, loopade över k från global memory och såg de överflödiga läsningarna. Nu minskar Ni trafiken med tiling. 🚀
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 ”Den naiva matmul-kärnan” gratis?
Ja – hela texten till ”Den naiva matmul-kärnan” 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 ”Den naiva matmul-kärnan”?
En tvådimensionellt indexerad baslinje och dess begränsningar. 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 1 av 4.
Hur lång tid tar lektionen ”Den naiva matmul-kärnan”?
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
- Den naiva matmul-kärnan
- Dela upp skalärprodukten i block
- Loopa över blockfaser
- Mät prestandaökningen