Starte kjerner fra en kjerne
Rekursjon og raffinering på enheten
Starte kjerner fra en kjerne er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i CUDA Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i CUDA Academy inneholder totalt 4 leksjoner.
Kerner som starter kerner
Med dynamisk parallellitet kan en GPU-kernel som kjører, starte en annen kernel selv, uten å gå tilbake til CPU-en. 🚀
Samme syntaks på enheten
Oppstarten ser identisk ut med en oppstart fra verten: de velkjente trippelvinkelparentesene fungerer direkte i enhetskode.
__global__ void child(int* d);
__global__ void parent(int* d) {
child<<<1, 32>>>(d);
}Beregn fremtidens beregning
En overordnet tråd avgjør ved kjøring hvor mye arbeid som trengs, og oppretter deretter en underordnet kernel med nøyaktig riktig størrelse.
child<<<blocks, threads>>>(buf);Utviklet for uregelmessige former
Dette er spesielt nyttig når arbeidet avhenger av dataene: En tråd som finner mer arbeid, kan starte flere tråder på stedet.
Rekursjon på enheten
En kernel kan til og med starte seg selv, slik at De får ekte rekursjon på GPU-en for del-og-hersk-problemer.
__global__ void solve(int lo, int hi) {
if (hi - lo > 1) solve<<<1, 2>>>(lo, mid);
}Overordnede og underordnede strømmer
Hver underordnet oppstart kobles til en strøm. Som standard bruker underordnede oppstarter strømmen til den overordnede trådblokken, men De kan navngi en egen stream.
child<<<g, b, 0, myStream>>>(d);Synkronisering inne i en kernel
En overordnet kernel kan vente på de underordnede med cudaDeviceSynchronize kalt fra enhetskode, og deretter lese resultatene deres.
child<<<1, 64>>>(d);
cudaDeviceSynchronize();Underordnede fullføres implisitt
Selv uten en manuell venting garanteres det at alle startede underordnede kerner er ferdige før den overordnede kernelen selv returnerer.
Minne som begge kan se
Overordnet og underordnet deler globalt minne, så pekere som sendes videre, forblir gyldige. Lokale data og delt data krysser derimot ikke oppstartsgrensen.
Kompiler for oppstart på enheten
De må kompilere med relocatable device code og lenke enhetskjøringen, slik at nestede oppstarter faktisk fungerer.
nvcc -rdc=true -lcudadevrt prog.cuEn fast grense for oppstarter
Nesting har en grense: Det finnes en maksimal oppstartsdypde, og hvis De går dypere, returneres en feil i stedet for at flere kerner startes.
Hurtigsjekk
Hvor oppstår en dynamisk startet kernel?
Oppsummering: Oppstarter på enheten
En kernel kan starte andre kerner med den samme trippelparentes-syntaksen, til og med seg selv. Del globalt minne og kompiler med -rdc=true. Godt jobbet! 🎉
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Starte kjerner fra en kjerne» gratis?
Ja – hele teksten i «Starte kjerner fra en kjerne» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av CUDA Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i CUDA Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Starte kjerner fra en kjerne»?
Rekursjon og raffinering på enheten Du øver på CUDA Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med CUDA Academy?
Ingen tidligere erfaring er nødvendig. CUDA Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Starte kjerner fra en kjerne»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne CUDA Academy-leksjonen?
Ja. Alle CUDA Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Starte kjerner fra en kjerne
- Når dynamisk parallellisme lønner seg
- Fange arbeid i en graf
- Spill av grafer for å redusere overhead