Caricamenti vettorializzati con float4
Transazioni più ampie per una maggiore larghezza di banda
Caricamenti vettorializzati con float4 è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 3 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.
Spostare più dati per istruzione
Un caricamento normale recupera un valore alla volta. Un vectorized load recupera diversi valori adiacenti con un'unica istruzione più ampia, svolgendo più lavoro per richiesta.
Conoscere float4
CUDA include tipi vettoriali integrati. Un float4 raggruppa quattro float in un blocco da 16 byte che può essere caricato o memorizzato insieme.
float4 v = make_float4(1, 2, 3, 4);
float first = v.x; // also .y .z .wUn caricamento, quattro float
Leggere un float4 dalla memoria recupera quattro float con una singola transazione. Questo riduce di quattro volte il numero di memory instructions che un thread deve emettere.
float4 a = reinterpret_cast<float4*>(in)[i];Reinterpretare il puntatore
Per usare i caricamenti vettoriali su un normale array di float, si esegue il cast del puntatore. reinterpret_cast consente di leggere gli stessi byte come elementi float4.
float4* in4 = reinterpret_cast<float4*>(in);
float4 chunk = in4[idx];È necessario l'allineamento
Un float4 deve trovarsi su un limite di 16 byte. Se i dati non sono correttamente aligned, il caricamento non è valido e il kernel può terminare in errore o leggere dati spazzatura.
cudaMalloc esegue l'allineamento
Buone notizie: i buffer ottenuti da cudaMalloc sono allineati ad almeno 256 byte. Pertanto, gli array del dispositivo appena allocati possono essere letti come float4 fin dall'inizio.
Meno richieste, più banda
I caricamenti più ampi comportano meno richieste in sospeso per gli stessi dati. Questo può aumentare la bandwidth effettiva quando il kernel è limitato dalla memoria e non dai calcoli.
Indicizzare per vettori, non per float
Con float4 ogni thread ora copre quattro elementi. L'index globale avanza tra gli slot float4, quindi il numero totale di thread si riduce di quattro.
int i = blockIdx.x * blockDim.x + threadIdx.x;
float4 d = in4[i]; // covers 4 floatsAltre ampiezze vettoriali
float4 non è l'unica scelta. Tipi come float2 e int4 consentono caricamenti da 8 o 16 byte, quindi può scegliere una larghezza adatta ai Suoi dati.
Gestire gli elementi residui
Se la lunghezza dell'array non è un multiplo di quattro, gestisca gli elementi di remainder con un normale ciclo scalare dopo la parte vettorializzata.
Il costo in registri
Un float4 contiene quattro valori, quindi usa più registri per thread. Come sempre, verifichi che il guadagno in larghezza di banda compensi l'eventuale riduzione dell'occupancy.
Controllo rapido
Lei reinterpreta un array di float come float4, ma il kernel va in crash. Perché?
Riepilogo: più ampiezza, maggiore velocità
Ha imparato che i caricamenti float4 leggono quattro float alla volta, riducendo le istruzioni e aumentando la larghezza di banda. Mantenga i dati allineati e gestisca gli elementi residui. 📦
Domande Frequenti
La lezione «Caricamenti vettorializzati con float4» è gratuita?
Sì — il testo completo di «Caricamenti vettorializzati con float4» è 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 «Caricamenti vettorializzati con float4»?
Transazioni più ampie per una maggiore larghezza di banda 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 3 di 4.
Quanto tempo richiede la lezione «Caricamenti vettorializzati con float4»?
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
- Parallelismo a livello di istruzione
- Srotolare i cicli con #pragma unroll
- Caricamenti vettorializzati con float4
- Pressione sui registri e spill