CUDA Academy · Les

Lekken vinden met memcheck

Buiten bereik en ongeldige device-pointers

Les 2 van 413 stappen

Lekken vinden met memcheck is een gratis CUDA Academy-les op CoddyKit. Dit is les 2 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.

Waarom memcheck bestaat

Geheugenfouten op de GPU veroorzaken zelden een duidelijke crash. Daarom controleert compute-sanitizer met het hulpprogramma memcheck elke toegang en meldt het de problemen voor je. 🛡️

De moderne opdracht

Voer je programma uit onder het hulpprogramma memcheck door er compute-sanitizer voor te zetten. Dit is de moderne vervanger van het oude cuda-memcheck.

compute-sanitizer --tool memcheck ./vecadd

Buiten het bereik lezen

De klassieke fout die memcheck detecteert, is een toegang buiten het bereik, waarbij een thread voorbij het einde van een apparaatarray leest of schrijft.

Een ontbrekende bereikcontrole

Als je de beveiliging vergeet, kunnen extra threads zomaar doorgaan. Daardoor kan deze index voorbij n komen en een ongeldige globale schrijfactie veroorzaken.

int i = blockIdx.x * blockDim.x + threadIdx.x;
out[i] = a[i] + b[i];

Het rapport lezen

memcheck geeft het fouttype, het betreffende adres en de thread die de fout veroorzaakte weer, zodat je rechtstreeks naar de onjuiste toegang wordt geleid.

Regelnummers verkrijgen

Compileer met -lineinfo, zodat memcheck elke fout kan koppelen aan de exacte broncoderegel in plaats van aan een onbewerkt adres.

nvcc -lineinfo vecadd.cu -o vecadd

Geheugenlekken detecteren

Schakel de optie --leak-check in. Dan meldt memcheck al het apparaatgeheugen dat je hebt toegewezen maar vóór het afsluiten nooit hebt vrijgegeven.

compute-sanitizer --leak-check full ./vecadd

Een klassiek geheugenlek

Als je geheugen toewijst zonder een bijbehorende free, lekt de buffer. Na veel herhalingen raakt daardoor het apparaatgeheugen langzaam uitgeput.

cudaMalloc(&d_a, bytes);
// ...used, but cudaFree(d_a) is missing

Ongeldige apparaatpointers

memcheck markeert ook wanneer je een hostpointer doorgeeft terwijl de kernel een apparaatpointer verwacht, een fout die resultaten stilletjes kan beschadigen.

Niet-uitgelijnde toegang

Voor sommige laadbewerkingen zijn uitgelijnde adressen vereist. Daarom waarschuwt memcheck voor een niet-uitgelijnde toegang die anders onzinnige gegevens of een fout zou opleveren.

Herstellen en opnieuw uitvoeren

Voer memcheck na elke oplossing opnieuw uit totdat het nul fouten meldt. Een foutloze uitvoering is een teken dat de geheugenfouten zijn verdwenen.

Snelle controle

Welk type fout is het hulpprogramma memcheck voornamelijk ontworpen om te vinden?

Samenvatting

Je hebt memcheck uitgevoerd, -lineinfo toegevoegd voor broncoderegels, controle op geheugenlekken ingeschakeld en de veelvoorkomende fouttypen geleerd. Foutloze uitvoeringen betekenen veilig geheugen. ✅

Gratis beginnen

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 “Lekken vinden met memcheck” gratis?

Ja — de volledige tekst van “Lekken vinden met memcheck” 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 “Lekken vinden met memcheck”?

Buiten bereik en ongeldige device-pointers 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 2 van 4.

Hoe lang duurt de les “Lekken vinden met memcheck”?

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

  1. Kernels stapsgewijs uitvoeren in cuda-gdb
  2. Lekken vinden met memcheck
  3. Races opsporen met racecheck
  4. Synchronisatiefouten onderscheppen met synccheck
← Terug naar CUDA Academy