Il kernel di somma di vettori
Ogni thread somma una coppia di elementi.
Il kernel di somma di vettori è 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.
L’idea fondamentale
L’addizione vettoriale è il primo kernel perfetto: ogni output è semplicemente C[i] = A[i] + B[i]. Ogni elemento è indipendente, quindi possono essere elaborati tutti contemporaneamente. 🚀
Un thread, un elemento
L’idea è semplice: assegni un thread a ogni elemento. Invece di scorrere l’array con un ciclo, migliaia di thread eseguono ciascuno una singola addizione in parallelo.
Contrassegnarlo come kernel
Una funzione eseguita sulla GPU è un kernel, contrassegnato dal qualificatore __global__. Questa parola indica a nvcc che il codice viene avviato sul device.
__global__ void vecAdd(const float* A, const float* B, float* C, int n) {
// body comes next
}I kernel restituiscono void
Un kernel ha sempre tipo di ritorno void. Non esiste un valore da restituire alla CPU, quindi i risultati devono essere scritti nella memoria del device.
Trovare l’indice del thread
Ogni thread calcola il proprio indice globale per sapere quale elemento gestire. La formula classica combina le coordinate del blocco e del thread.
int i = blockIdx.x * blockDim.x + threadIdx.x;La singola operazione
Quando un thread conosce il proprio indice i, il lavoro vero e proprio consiste in una sola riga. Nessun ciclo, nessun branching: una sola addizione per thread.
C[i] = A[i] + B[i];Perché il controllo dei limiti è importante
Di solito si avviano più thread rispetto al numero di elementi, quindi aggiunga una protezione if (i < n). Senza di essa, i thread aggiuntivi leggono oltre la fine dell’array e provocano un arresto anomalo. 🛡️
if (i < n) {
C[i] = A[i] + B[i];
}Il kernel completo
Mettendo tutto insieme, l’intero kernel vecAdd è composto solo da poche righe. Il codice è breve, ma viene eseguito contemporaneamente da migliaia di thread.
__global__ void vecAdd(const float* A, const float* B, float* C, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) C[i] = A[i] + B[i];
}I puntatori risiedono sul device
I puntatori A, B e C devono puntare alla memoria del device. Passi a un kernel un normale puntatore dell’host e leggerà dati senza senso o genererà un errore.
Contrassegnare gli input come const
A e B vengono solo letti, quindi li contrassegni come const float*. Questo documenta l’intento e permette al compilatore di ottimizzare più liberamente gli input in sola lettura.
Non serve uno stato condiviso
Poiché ogni thread accede a un elemento diverso, non si verificano race condition e non servono lock. È proprio questa indipendenza a valorizzare la GPU in questo caso.
Controllo rapido
Perché il kernel di addizione vettoriale ha bisogno di una protezione if (i < n)?
Riepilogo
Ha scritto il suo primo kernel: __global__ void vecAdd, un thread per elemento, un indice globale e un controllo dei limiti. Codice semplice, parallelismo enorme. 🎉
Domande Frequenti
La lezione «Il kernel di somma di vettori» è gratuita?
Sì — il testo completo di «Il kernel di somma di vettori» è 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 «Il kernel di somma di vettori»?
Ogni thread somma una coppia di elementi. 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 «Il kernel di somma di vettori»?
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
- Il kernel di somma di vettori
- Collegare il lato host
- Verificare il risultato sulla CPU
- Misurare il primo incremento di velocità