cuBLAS GEMM nel modo corretto
Handle, ordine column-major e dimensioni leading
cuBLAS GEMM nel modo corretto è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CUDA Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CUDA Academy include 4 lezioni in totale.
Sulle spalle di NVIDIA
Scrivere a mano una moltiplicazione tra matrici veloce è difficile. cuBLAS include una GEMM ampiamente collaudata, che porta già la GPU quasi alle prestazioni di picco. 🚀
Cosa significa GEMM
GEMM sta per moltiplicazione generica tra matrici. Calcola C = alpha * A * B + beta * C, il motore alla base della grafica e del deep learning.
C = alpha * (A * B) + beta * COgni chiamata richiede un handle
cuBLAS conserva il proprio stato in un handle. Ne crea uno all'avvio, lo riutilizza per ogni chiamata e lo distrugge al termine.
cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);La sorpresa del column-major
cuBLAS si aspetta matrici in formato column-major, ovvero il layout di Fortran. Gli array C++ sono solitamente in formato row-major, quindi questa differenza trae in inganno quasi tutti.
Leading dimension
La leading dimension indica a cuBLAS lo stride tra le colonne in memoria. Per una matrice column-major M per N memorizzata in modo compatto, è semplicemente M.
int lda = M; // rows, column-major strideIl trucco della trasposizione
Una soluzione elegante: A per B in formato row-major equivale alla trasposta di B per A in formato column-major. Molti preferiscono semplicemente scambiare gli operandi invece di trasporre i dati.
Gli scalari vivono in alpha e beta
Passi alpha e beta come puntatori. Usi alpha = 1 e beta = 0 per ottenere un semplice C = A * B senza aggiungere altro.
const float alpha = 1.0f, beta = 0.0f;Chiamare cublasSgemm
cublasSgemm è la GEMM a virgola mobile a precisione singola. La sua lunga lista di argomenti contiene soltanto dimensioni, flag di trasposizione, scalari e i tre puntatori alla memoria del device.
cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);I puntatori devono trovarsi sul device
dA, dB e dC puntano alla memoria del device. Se passi per errore puntatori all'host, cuBLAS restituisce un errore invece del risultato.
Scegli il suffisso della precisione
La lettera codifica il tipo: S per float, D per double, C e Z per i tipi complessi. Scegli Dgemm quando ti serve la doppia precisione.
cublasDgemm(...); // double precision GEMMControlla lo stato restituito
Ogni chiamata cuBLAS restituisce un cublasStatus_t. Confrontalo con CUBLAS_STATUS_SUCCESS, così un handle o una dimensione errati non passano inosservati.
if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }Verifica rapida
Rifletti sul layout dei dati assunto da cuBLAS.
Riepilogo
Hai creato un handle, rispettato il layout column-major e le leading dimension, impostato alpha e beta e chiamato Sgemm con puntatori alla memoria del device. 🎯
Domande Frequenti
La lezione «cuBLAS GEMM nel modo corretto» è gratuita?
Sì — il testo completo di «cuBLAS GEMM nel modo corretto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CUDA Academy, passa a CoddyKit PRO. Il corso CUDA Academy include 4 lezioni in totale.
Cosa imparerò in «cuBLAS GEMM nel modo corretto»?
Handle, ordine column-major e dimensioni leading Eserciti CUDA Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare CUDA Academy?
Non è richiesta alcuna esperienza precedente. CUDA Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «cuBLAS GEMM nel modo corretto»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione CUDA Academy?
Sì. Ogni lezione CUDA Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- cuBLAS GEMM nel modo corretto
- Vettori e trasformazioni Thrust
- Reduce, Scan e Sort con Thrust
- cuDNN per il deep learning