CUDA Academy · leksjon

printf inne i en kernel

Se utdata fra tråder på enheten

Leksjon 3 av 413 trinn

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 hellos

Identifiser 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 formatspe­sifikatorene, 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! 🎉

Gratis å komme i gang

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

  1. En kernels anatomi
  2. Oppstart med trippel vinkelparentes
  3. printf inne i en kernel
  4. cudaDeviceSynchronize forklart
← Tilbake til CUDA Academy