Anatomia di un kernel
Firma, tipo restituito e regola di void.
Anatomia di un kernel è 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.
Che cos’è un kernel
Un kernel è una singola funzione C++ eseguita sulla GPU da migliaia di thread contemporaneamente. La scrivete una volta e l’hardware la distribuisce tra i thread. 🚀
Il qualificatore __global__
Indicate un kernel con il qualificatore __global__. Questo comunica a nvcc che la funzione viene chiamata dalla CPU, ma viene eseguita effettivamente sul device.
__global__ void myKernel() {
// runs on the GPU
}I kernel restituiscono void
Ogni kernel deve restituire void. Non c’è un valore di ritorno da restituire, quindi i risultati vengono trasferiti tramite puntatori alla memoria del device.
__global__ void k() { /* void only */ }Perché non restituire un valore?
Migliaia di thread eseguono insieme il kernel, quindi un singolo valore di ritorno non avrebbe senso. Ogni thread scrive nella propria posizione di un array di output.
I parametri vengono passati per valore
I parametri del kernel vengono copiati in ogni thread, quindi passate elementi piccoli: interi, dimensioni e puntatori. Non passate mai oggetti grandi per valore.
__global__ void add(float* out, float* a, int n) {}Passate puntatori, non array
Per fornire un array a un kernel, passate un puntatore al device. Il kernel legge e scrive nella memoria della GPU indirizzata da quel puntatore.
__global__ void scale(float* data, float k) {}Ogni thread sceglie il proprio lavoro
Lo stesso codice viene eseguito in ogni thread, quindi ciascuno usa il proprio indice per decidere quale elemento modificare. È così che una funzione copre un intero array.
int i = threadIdx.x; // who am I?Un piccolo kernel completo
Ecco un kernel completo: raddoppia un elemento per thread. Notate insieme il qualificatore __global__, il valore di ritorno void e il parametro puntatore.
__global__ void doubleIt(float* x) {
int i = threadIdx.x;
x[i] = x[i] * 2.0f;
}Il codice dell’host resta separato
La normale funzione della CPU, spesso main, fa parte del codice dell’host. Prepara l’ambiente e poi chiede alla GPU di eseguire il kernel.
int main() {
// host side: prepare and launch
}Niente ricorsione né sorprese con l’I/O
Un kernel viene eseguito su un hardware con regole rigide, quindi mantenetelo semplice: evitate la ricorsione profonda e le chiamate pesanti alla libreria standard al suo interno.
Assegnare un nome ai kernel
Trattate un kernel come qualsiasi funzione: assegnategli un nome chiaro, basato su un verbo, come vectorAdd. I nomi descrittivi rendono gli avvii molto più facili da leggere.
__global__ void vectorAdd(float* c, float* a, float* b);Verifica rapida
Verifichiamo le regole per la firma di un kernel.
Riepilogo: anatomia di un kernel
Un kernel è una funzione __global__ void eseguita da numerosi thread. Passate puntatori e valori piccoli e lasciate che ogni thread utilizzi il proprio indice. Ottimo lavoro! 🎉
Impara C++ con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Anatomia di un kernel» è gratuita?
Sì — il testo completo di «Anatomia di un kernel» è 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 «Anatomia di un kernel»?
Firma, tipo restituito e regola di void. 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 «Anatomia di un kernel»?
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
- Anatomia di un kernel
- L'avvio con tripla parentesi angolare
- printf dentro un kernel
- Spiegazione di cudaDeviceSynchronize