High-Performance FP16 General Matrix Multiplication on NVIDIA Ada Lovelace via CUTLASS and WMMA: A Benchmark and Pipeline-Depth Analysis
Questo articolo esamina le prestazioni delle operazioni GEMM in FP16 sulla GPU NVIDIA Ada Lovelace RTX 4060 attraverso cuBLAS, CUTLASS e implementazioni WMMA personalizzate, rivelando che una profondità di pipeline di tre con una specifica geometria dei tile raggiunge il 52,7% del throughput di picco, dimostrando al contempo che la pressione sulla memoria condivisa, piuttosto che la profondità della pipeline, è il collo di bottiglia principale che limita un'ulteriore ottimizzazione.
Articolo originale sotto licenza CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
Immagina di avere una cucina superveloce (una GPU) con un team di chef specializzati chiamati Tensor Core. Questi chef sono incredibilmente veloci a tritare e mescolare gli ingredienti (moltiplicazione di matrici) per un banchetto gigante (deep learning). La cucina sulla nuova fornella "Ada Lovelace" (una scheda grafica RTX 4060) è teoricamente capace di servire 60,55 TFLOPS (ovvero 60,55 trilioni di operazioni matematiche al secondo).
Ma ecco il problema: solo perché gli chef possono tritare così velocemente, non significa che lo stiano facendo davvero a quella velocità. Spesso devono aspettare che gli ingredienti vengano consegnati dalla dispensa.
Il Grande Esperimento: Come Tenere Occupati gli Chef
I ricercatori volevano capire il modo migliore per organizzare la cucina in modo che gli chef non smettano mai di tritare. Hanno testato tre modi diversi per gestire la cucina:
- La Scatola Nera (cuBLAS): Una ricetta pre-confezionata e a codice chiuso di NVIDIA che di solito funziona molto bene, ma che non permette di modificarne i dettagli.
- Il Progetto Aperto (CUTLASS): Un toolkit flessibile e open-source che ti permette di costruire la tua configurazione di cucina da zero.
- L'Approccio Fai-da-Te (WMMA): Una cucina costruita su misura dove controlli ogni singolo movimento degli chef, ma è molto più difficile da costruire.
Hanno allestito una massiccia sfida culinaria con ingredienti di dimensioni 8192 × 8192 e hanno provato diversi "profondità di pipeline". Pensa alla profondità di pipeline come al numero di vassoi di ingredienti che la cucina tiene pronti.
- Profondità di Pipeline 2: Solo 2 vassoi pronti.
- Profondità di Pipeline 3: 3 vassoi pronti.
- Profondità di Pipeline 4: 4 vassoi pronti.
La saggezza comune (e un semplice modello matematico) suggeriva che più vassoi = più velocità. La logica era: "Se abbiamo più vassoi, gli chef non rimarranno mai senza ingredienti, quindi lavoreranno più velocemente".
La Sorpresa: Più Non è Sempre Meglio
I ricercatori hanno misurato la velocità e hanno scoperto quanto segue:
- Profondità 2: La cucina girava a 25,6 TFLOPS. Gli chef stavano aspettando troppo tempo.
- Profondità 3: La cucina è accelerata a 31,9 TFLOPS (che è il 52,7% del massimo teorico). Questo era il punto di equilibrio perfetto!
- Profondità 4: La cucina è in realtà rallentata a 31,1 TFLOPS.
Questa è la scoperta principale: Aggiungere un quarto vassoio non ha aiutato; ha peggiorato le cose. Il semplice modello matematico prevedeva che la velocità sarebbe salita a 35,4 TFLOPS, ma non è successo. Il modello era sbagliato del 13,8%.
Perché Aggiungere un Vassoio è Tornato Controproducente?
Il documento spiega che la cucina ha uno spazio limitato. Quando hanno aggiunto il 4° vassoio (aumentando l'uso della "Shared Memory" a 96 KB), ciò ha costretto la cucina a ridurre il numero di squadre di cucina (threadblock) che potevano lavorare contemporaneamente.
- Con 3 vassoi, la cucina poteva ospitare 2 squadre di chef su ogni fornello.
- Con 4 vassoi, la cucina poteva ospitare solo 1 squadra.
Anche se la singola squadra aveva più ingredienti, doveva aspettare più a lungo perché c'erano meno squadre pronte a subentrare quando una si bloccava. La cucina è diventata "affollata" di ingredienti ma "vuota" di lavoratori. I ricercatori hanno misurato che l'occupancy (quante squadre sono al lavoro) è scesa, e gli chef hanno dovuto usare più "register" (i loro taccuini personali), il che ha rallentato ulteriormente il processo.
Vincitori e Perdenti
- Il Vincitore: Il toolkit CUTLASS con 3 vassoi e una dimensione specifica di tile di 256 × 128. Ha raggiunto i 31,9 TFLOPS. È stato così buono da battere il "Black Box" standard (cuBLAS) di una piccola quantità, quasi impercettibile, dell'1,3% (che gli autori dicono essere probabilmente solo rumore, ma dimostra che il progetto aperto può eguagliare quello chiuso).
- Il Secondo Classificato Fai-da-Te: Il kernel WMMA personalizzato (la cucina completamente fai-da-te) ha gestito 25,1 TFLOPS su un test leggermente più piccolo. Era più lento perché non utilizzava i trucchi del "double buffering" per sovrapporre la consegna degli ingredienti con la cottura.
- Il Perdente: L'idea che "una maggiore profondità di pipeline sia sempre meglio". Il documento esclude esplicitamente questa ipotesi per questo specifico hardware.
Quanto Sono Sicuri?
Gli autori sono molto sicuri di questi numeri perché li hanno misurati direttamente sull'hardware, eseguendo il test 10 volte e facendone la media. Hanno anche controllato i loro calcoli rispetto a uno strumento integrato di NVIDIA (il profiler) e hanno scoperto che il loro codice personalizzato corrispondeva perfettamente.
Tuttavia, ammettono alcune cose che non hanno dimostrato:
- Hanno testato solo una specifica dimensione del problema (8192). Non sanno se la regola "3 vassoi è il meglio" valga per problemi più piccoli o con forme insolite.
- Non hanno potuto testare profondità di pipeline superiori a 4 perché la cucina semplicemente è finita con lo spazio (memoria).
- Hanno dovuto eseguire i loro test su Windows, dove un glitch del driver ha impedito loro di confrontare il proprio codice personalizzato e il codice standard nello stesso identico run (sebbene l'abbiano fatto in run separati).
Il Punto Chiave
Se stai cercando di ottenere il massimo da una scheda grafica consumer come la RTX 4060 per compiti pesanti dal punto di vista matematico, non aggiungere semplicemente più buffer. Esiste una zona "Goldilocks" (né troppo calda, né troppo fredda). In questo caso, 3 stadi di preparazione erano perfetti. Passare a 4 stadi ha reso la cucina troppo affollata, rallentando tutti.
I ricercatori hanno rilasciato tutto il loro codice come open-source, quindi chiunque può provare a costruire la propria cucina e vedere se può battere il record dei 31,9 TFLOPS. Suggeriscono che il lavoro futuro dovrebbe guardare a diverse dimensioni dei problemi e utilizzare Linux per ottenere dati ancora più puliti, ma per ora, hanno dimostrato che 31,9 TFLOPS è il picco attuale per questa configurazione e che 31,1 TFLOPS è ciò che accade quando si cerca di essere troppo avidi con la memoria.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.