printf in een kernel
Bekijk uitvoer van threads op het device.
printf in een kernel is een gratis CUDA Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject CUDA Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus CUDA Academy bevat in totaal 4 lessen.
Afdrukken vanaf de GPU
Geloof het of niet: je kunt printf rechtstreeks in een kernel aanroepen. Het is de eenvoudigste manier om te bekijken wat je threads doen. 👀
__global__ void hi() {
printf("Hello from the GPU\n");
}Elke thread drukt af
Onthoud dat de kernel in elke thread draait, dus één regel met printf wordt één keer per thread uitgevoerd. Start 256 threads en je krijgt 256 regels.
hi<<<1, 256>>>(); // 256 hellosElke thread identificeren
Neem threadIdx op in je bericht, zodat je threads uit elkaar kunt houden. Anders bestaat de uitvoer uit een muur van identieke regels.
printf("thread %d\n", threadIdx.x);De uitvoervolgorde ligt niet vast
Threads draaien parallel, dus de afgedrukte volgorde is onvoorspelbaar. Reken er niet op dat regels in volgorde van hun index verschijnen.
Opmaakteksten werken
Apparaat-printf ondersteunt de gebruikelijke opmaakspecificaties, zoals %d, %f en %s. Het voelt precies als printf op de host.
printf("i=%d val=%f\n", i, x[i]);Uitvoer gaat naar een buffer
Uitvoer van het apparaat wordt tijdelijk opgeslagen in een GPU-buffer en pas later naar je console weggeschreven, niet direct wanneer printf wordt uitgevoerd. Dat is normaal.
Je moet wachten om het te zien
Omdat de start asynchroon is, zie je afdrukken pas wanneer de GPU klaar is. Roep cudaDeviceSynchronize aan om de buffer leeg te maken.
hi<<<1, 4>>>();
cudaDeviceSynchronize();Zware uitvoer beperken
Afdrukken vanuit miljoenen threads overspoelt de buffer. Beperk dit zodat alleen thread 0 afdrukt, of slechts enkele threads.
if (threadIdx.x == 0) printf("block done\n");Geweldig voor snel debuggen
printf is je snelste hulpmiddel voor debuggen: voeg er één toe om een index of waarde te controleren, bevestig de fout en verwijder hem daarna.
printf("i=%d should be < n=%d\n", i, n);Het vertraagt kernels
Veel afdrukken schaadt de prestaties sterk. Gebruik het om een probleem te vinden en verwijder het voordat je de echte snelheid meet.
Oude GPU's kunnen verschillen
Apparaat-printf vereist een redelijk moderne rekenmogelijkheid (2.0 of hoger). Bijna elke huidige GPU ondersteunt dit zonder problemen.
Snelle controle
Controleer wat je weet over printf op het apparaat.
Samenvatting: printf in een kernel
Gebruik printf om in threads te kijken, voeg threadIdx toe om ze uit elkaar te houden, synchroniseer om de uitvoer door te sturen en verwijder printf voordat je tijden meet. Handig hulpmiddel! 🎉
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “printf in een kernel” gratis?
Ja — de volledige tekst van “printf in een kernel” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus CUDA Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus CUDA Academy bevat in totaal 4 lessen.
Wat leer ik in “printf in een kernel”?
Bekijk uitvoer van threads op het device. Je oefent met CUDA Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met CUDA Academy te beginnen?
Ervaring vooraf is niet nodig. CUDA Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “printf in een kernel”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over CUDA Academy?
Ja. Elke les over CUDA Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Anatomie van een kernel
- Een kernel starten met driehoekshaakjes
- printf in een kernel
- cudaDeviceSynchronize uitgelegd