CUDA Academy · Lektion

cuBLAS GEMM på rätt sätt

Handles, column-major och leading dims

Lektion 1 av 413 steg

cuBLAS GEMM på rätt sätt ä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.

Stå på NVIDIA:s axlar

Det är svårt att skriva en snabb matrismultiplikation för hand. cuBLAS levererar en väl beprövad GEMM-implementation som redan pressar din GPU nära maximal prestanda. 🚀

Vad GEMM betyder

GEMM står för general matrix-matrix multiply. Den beräknar C = alpha * A * B + beta * C, arbetshästen bakom grafik och djupinlärning.

C = alpha * (A * B) + beta * C

Varje anrop behöver ett handtag

cuBLAS lagrar sitt tillstånd i ett handtag. Du skapar ett vid uppstart, återanvänder det för varje anrop och förstör det i slutet.

cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);

Överraskningen med kolumnordning

cuBLAS förväntar sig matriser i column-major-format, alltså Fortran-layouten. Dina C++-arrayer är vanligtvis i row-major-format, så denna skillnad ställer till problem för nästan alla.

Ledande dimension

Den ledande dimensionen anger steget mellan kolumner i minnet för cuBLAS. För en tätt packad M- gånger-N-matris i column-major-format är den helt enkelt M.

int lda = M; // rows, column-major stride

Transponeringstricket

En smidig lösning: row-major A multiplicerat med B är lika med transponeringen av column-major B multiplicerat med A. Många väljer helt enkelt att byta plats på operanderna i stället för att transponera data.

Skalärer finns i alpha och beta

Du skickar alpha och beta som pekare. Använd alpha = 1 och beta = 0 för ett vanligt C = A * B utan något tillagt.

const float alpha = 1.0f, beta = 0.0f;

Anropa cublasSgemm

cublasSgemm är GEMM för flyttal med enkel precision. Dess långa parameterlista består bara av dimensioner, transponeringsflaggor, skalärer och de tre enhetspekarna.

cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
  M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);

Pekare måste finnas på enheten

dA, dB och dC pekar på enhetsminne. Om du av misstag skickar värdpekare returnerar cuBLAS ett fel i stället för ett resultat.

Välj suffix efter precision

Bokstaven anger typen: S för float, D för double samt C och Z för komplexa tal. Välj Dgemm när du behöver dubbel precision.

cublasDgemm(...); // double precision GEMM

Kontrollera returstatusen

Varje cuBLAS-anrop returnerar en cublasStatus_t. Jämför den med CUBLAS_STATUS_SUCCESS så att ett felaktigt handtag eller en felaktig dimension aldrig passerar obemärkt.

if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }

Snabb kontroll

Tänk på den datalayout som cuBLAS förutsätter.

Sammanfattning

Du skapade ett handtag, följde column-major-layouten och de ledande dimensionerna, angav alpha och beta och anropade Sgemm med enhetspekare. 🎯

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 ”cuBLAS GEMM på rätt sätt” gratis?

Ja – hela texten till ”cuBLAS GEMM på rätt sätt” 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 ”cuBLAS GEMM på rätt sätt”?

Handles, column-major och leading dims 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 ”cuBLAS GEMM på rätt sätt”?

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. cuBLAS GEMM på rätt sätt
  2. Thrust-vektorer och transformeringar
  3. Thrust: Reduce, Scan och Sort
  4. cuDNN för deep learning
← Tillbaka till CUDA Academy