Lanciare kernel da un kernel
Ricorsione e raffinamento lato dispositivo
Lanciare kernel da 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.
Kernel che avviano kernel
Con il dynamic parallelism, un kernel GPU in esecuzione può avviare autonomamente un altro kernel, senza dover tornare alla CPU. 🚀
Stessa sintassi, lato device
Il launch ha lo stesso aspetto di quello dall'host: le familiari triple parentesi angolari funzionano direttamente nel codice del device.
__global__ void child(int* d);
__global__ void parent(int* d) {
child<<<1, 32>>>(d);
}Calcola il calcolo futuro
Un thread padre decide a runtime quanto lavoro è necessario, quindi crea un kernel figlio dimensionato esattamente per quel lavoro.
child<<<blocks, threads>>>(buf);Progettato per forme irregolari
Questa tecnica è ideale quando il lavoro dipende dai dati: un thread che rileva altro lavoro da svolgere può avviare altri thread sul momento.
Ricorsione lato device
Un kernel può persino avviare sé stesso, offrendo una vera ricorsione sulla GPU per i problemi divide et impera.
__global__ void solve(int lo, int hi) {
if (hi - lo > 1) solve<<<1, 2>>>(lo, mid);
}Stream padre e figlio
Ogni launch figlio entra in uno stream. Per impostazione predefinita, i figli usano lo stream del blocco di thread padre, ma puoi specificare il tuo stream.
child<<<g, b, 0, myStream>>>(d);Sincronizzazione all'interno di un kernel
Un padre può attendere i propri figli con cudaDeviceSynchronize chiamato dal codice del device, quindi leggere i loro risultati.
child<<<1, 64>>>(d);
cudaDeviceSynchronize();Completamento implicito dei figli
Anche senza un'attesa manuale, tutti i figli avviati completano sicuramente l'esecuzione prima che lo stesso kernel padre restituisca il controllo.
Memoria visibile a entrambi
Padre e figlio condividono la memoria globale, quindi i puntatori passati rimangono validi. I dati locali e condivisi, invece, non attraversano il launch.
Compila per l'avvio dal device
Devi compilare con relocatable device code e collegare il runtime del device affinché i launch annidati funzionino davvero.
nvcc -rdc=true -lcudadevrt prog.cuUn limite rigido per i launch
L'annidamento è limitato: esiste una profondità massima di launch e superarla restituisce un errore invece di creare altri kernel.
Verifica rapida
Da dove viene avviato un kernel dinamico?
Riepilogo: launch dal device
Un kernel può avviare altri kernel con la stessa sintassi delle triple parentesi, persino sé stesso. Condividi la memoria globale e compila con -rdc=true. Ottimo lavoro! 🎉
Domande Frequenti
La lezione «Lanciare kernel da un kernel» è gratuita?
Sì — il testo completo di «Lanciare kernel da 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 «Lanciare kernel da un kernel»?
Ricorsione e raffinamento lato dispositivo 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 «Lanciare kernel da 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
- Lanciare kernel da un kernel
- Quando il parallelismo dinamico conviene
- Acquisire il lavoro in un grafo
- Riprodurre i grafi per ridurre l'overhead