Starta kernels från en kernel
Rekursion och förfining på enheten
Starta kernels från en kernel är en gratis lektion i CUDA Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för CUDA Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i CUDA Academy innehåller totalt 4 lektioner.
Kernels som startar kernels
Med dynamisk parallellism kan en GPU-kernel som körs själv starta en annan kernel utan att behöva gå tillbaka till CPU:n. 🚀
Samma syntax på enheten
Starten ser identisk ut med en start från värden: de välbekanta trippelvinkelparenteserna fungerar direkt i enhetskod.
__global__ void child(int* d);
__global__ void parent(int* d) {
child<<<1, 32>>>(d);
}Beräkna framtidens beräkning
En överordnad tråd avgör vid körning hur mycket arbete som behövs och startar sedan en underordnad kernel med exakt rätt storlek.
child<<<blocks, threads>>>(buf);Byggt för oregelbundna former
Detta är särskilt användbart när arbetet beror på data: en tråd som hittar mer att göra kan starta fler trådar direkt.
Rekursion på enheten
En kernel kan till och med starta sig själv, vilket ger riktig rekursion på GPU:n för divide-and-conquer-problem.
__global__ void solve(int lo, int hi) {
if (hi - lo > 1) solve<<<1, 2>>>(lo, mid);
}Överordnade och underordnade strömmar
Varje underordnad start ansluts till en ström. Som standard använder underordnade den överordnade trådblockets ström, men du kan ange en egen ström.
child<<<g, b, 0, myStream>>>(d);Synkronisering inuti en kernel
En överordnad kernel kan vänta på sina underordnade med cudaDeviceSynchronize från enhetskod och sedan läsa deras resultat.
child<<<1, 64>>>(d);
cudaDeviceSynchronize();Implicit slutförande av underordnade
Även utan en manuell väntan garanteras att alla startade underordnade kernels är klara innan den överordnade kerneln själv returnerar.
Minne som båda kan se
Överordnad och underordnad delar globalt minne, så pekare som skickas vidare förblir giltiga. Lokala data och delade data följer däremot inte med över starten.
Kompilera för start från enheten
Du måste kompilera med relocatable device code och länka enhetens runtime för att kapslade starter faktiskt ska fungera.
nvcc -rdc=true -lcudadevrt prog.cuEn hård gräns för starter
Kapslingen har en gräns: det finns ett maximalt startdjup, och om du går djupare returneras ett fel i stället för att fler kernels startas.
Snabb kontroll
Varifrån kommer en dynamiskt startad kernel?
Sammanfattning: starter från enheten
En kernel kan starta andra kernels med samma trippelparentessyntax, även sig själv. Dela globalt minne och kompilera med -rdc=true. Bra jobbat! 🎉
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Starta kernels från en kernel” gratis?
Ja – hela texten till ”Starta kernels från en kernel” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i CUDA Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i CUDA Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Starta kernels från en kernel”?
Rekursion och förfining på enheten Ni övar på CUDA Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig CUDA Academy?
Du behöver inga förkunskaper. Utbildningen i CUDA Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Starta kernels från en kernel”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här CUDA Academy-lektionen?
Ja. Varje CUDA Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Starta kernels från en kernel
- När dynamisk parallellism lönar sig
- Fånga arbete i en graf
- Spela upp grafer för minskad overhead