0Pricing
CUDA Academy · Lezione

Pressione sui registri e spill

Bilanciare il riutilizzo con l'occupancy

Pressione sui registri e spill è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 4 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.

I registri sono preziosi

I registri sono la memoria più veloce a disposizione di un thread, ma ogni SM ne contiene un numero limitato. L'intensità con cui un kernel li utilizza si chiama pressione sui registri.

Un pool condiviso e fisso

Ogni thread residente attinge a un unico file di registri per SM. Più registri richiede ogni thread, meno thread possono rimanere residenti contemporaneamente.

La pressione riduce l'occupancy

Un uso elevato dei registri limita direttamente il numero di warp che possono entrare in un SM. Questa riduzione dell'occupancy può lasciare all'hardware troppo poco lavoro per nascondere la latenza.

Che cos'è uno spill

Quando un thread necessita di più registri di quanti ne siano disponibili, il compilatore sposta all'esterno i valori aggiuntivi. Questo overflow è un register spill nella memoria più lenta.

Gli spill finiscono nella memoria locale

I valori soggetti a spill vengono trasferiti nella memoria locale, che risiede nella DRAM off-chip. Ogni spill sostituisce l'accesso a un registro libero con un lento viaggio di andata e ritorno.

Visualizzare il conteggio dei registri

Chieda al compilatore di riportare l'utilizzo. Aggiungendo --ptxas-options=-v a nvcc vengono stampati i registri per thread e gli eventuali byte soggetti a spill per ogni kernel.

nvcc --ptxas-options=-v kernel.cu

Leggere i numeri degli spill

Il report elenca gli store e i load degli spill. Qualsiasi conteggio spill diverso da zero indica che il kernel sta pagando il costo del traffico lento verso la memoria locale.

Limitare i registri per thread

Può impostare un limite in fase di compilazione. Il flag --maxrregcount limita i registri per thread, scambiando un po' di velocità con una maggiore occupancy.

nvcc --maxrregcount=32 kernel.cu

Suggerire il limite con __launch_bounds__

Spesso è preferibile un suggerimento specifico per kernel. __launch_bounds__ comunica al compilatore la dimensione del blocco, così può allocare i registri in funzione dell'occupancy desiderata.

__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }

Ridurre l'insieme dei valori attivi

Spesso può semplicemente mantenere meno valori contemporaneamente. Ricalcolare un risultato poco costoso o restringere lo scope di una variabile riduce il numero di registri che rimangono attivi.

Bilanciare riutilizzo e occupancy

ILP e unrolling aumentano la pressione, mentre i limiti aumentano l'occupancy. La difficoltà consiste nel trovare il bilanciamento che offre le prestazioni migliori, e solo il profiler può indicare qual è.

Controllo rapido

Dove finiscono i valori quando un kernel esaurisce i registri?

Riepilogo: tenere sotto controllo la pressione

Ha imparato che un'elevata pressione sui registri riduce l'occupancy e può causare spill verso la lenta DRAM. Misuri l'utilizzo, limiti i registri e lasci che sia il profiler a guidarLa. 🎯

Domande Frequenti

La lezione «Pressione sui registri e spill» è gratuita?

Sì — il testo completo di «Pressione sui registri e spill» è 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 «Pressione sui registri e spill»?

Bilanciare il riutilizzo con l'occupancy 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 4 di 4.

Quanto tempo richiede la lezione «Pressione sui registri e spill»?

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

  1. Parallelismo a livello di istruzione
  2. Srotolare i cicli con #pragma unroll
  3. Caricamenti vettorializzati con float4
  4. Pressione sui registri e spill
← Torna a CUDA Academy