printf inne i en kernel
Se utdata fra tråder på enheten
printf inne i en kernel er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 3 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.
Skriv ut fra GPU-en
Tro det eller ei: De kan kalle printf direkte inne i en kernel. Det er den enkleste måten å ta en titt på hva trådene gjør. 👀
__global__ void hi() {
printf("Hello from the GPU\n");
}Hver tråd skriver ut
Husk at kernel-en kjører i hver tråd, så én enkelt printf-linje kjøres én gang per tråd. Start 256 tråder, så får De 256 linjer.
hi<<<1, 256>>>(); // 256 hellosIdentifiser hver tråd
Ta med threadIdx i meldingen, slik at De kan skille trådene fra hverandre. Ellers blir resultatet bare en vegg av identiske linjer.
printf("thread %d\n", threadIdx.x);Rekkefølgen på utskriften er ikke fast
Trådene kjører parallelt, så utskriftens rekkefølge er uforutsigbar. Ikke stol på at linjene kommer i indeksrekkefølge.
Formatstrenger fungerer
Device-varianten av printf støtter de vanlige formatspesifikatorene, som %d, %f og %s. Det føles akkurat som printf på host-en.
printf("i=%d val=%f\n", i, x[i]);Utskriften går til en buffer
Utskrift fra device-en lagres først i en GPU-buffer og tømmes til konsollen senere, ikke idet printf kjører. Det er normalt.
De må vente for å se den
Siden oppstarten er asynkron, ser De ikke utskriftene før GPU-en er ferdig. Kall cudaDeviceSynchronize for å tømme bufferen.
hi<<<1, 4>>>();
cudaDeviceSynchronize();Begrens omfattende utskrift
Utskrift fra millioner av tråder fyller bufferen. Begrens den slik at bare tråd 0 skriver ut, eller slik at bare noen få tråder gjør det.
if (threadIdx.x == 0) printf("block done\n");Flott for rask feilsøking
printf er det raskeste feilsøkingsverktøyet Deres: sett inn én for å kontrollere en indeks eller verdi, bekreft feilen, og fjern den deretter.
printf("i=%d should be < n=%d\n", i, n);Det gjør kernel-er tregere
Mye utskrift skader ytelsen kraftig. Bruk det til å finne et problem, og fjern det før De måler den faktiske hastigheten.
Eldre GPU-er kan være annerledes
Utskrift fra device-en krever en relativt moderne beregningskapasitet (2.0 eller nyere). Nesten alle nåværende GPU-er støtter dette uten problemer.
Kort kontroll
Kontroller hva De kan om printf på device-en.
Oppsummering: Kernel-printf
Bruk printf til å ta en titt inne i trådene, legg til threadIdx for å skille dem fra hverandre, synkroniser for å tømme bufferen, og fjern det før De tar tiden. Et nyttig verktøy! 🎉
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 «printf inne i en kernel» gratis?
Ja – hele teksten i «printf inne i en kernel» 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 «printf inne i en kernel»?
Se utdata fra tråder 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 3 av 4.
Hvor lang tid tar leksjonen «printf inne i en kernel»?
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
- En kernels anatomi
- Oppstart med trippel vinkelparentes
- printf inne i en kernel
- cudaDeviceSynchronize forklart