Lekken vinden met memcheck
Buiten bereik en ongeldige device-pointers
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 ./vecaddBuiten 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 vecaddGeheugenlekken 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 ./vecaddEen 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 missingOngeldige 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. ✅
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
- Kernels stapsgewijs uitvoeren in cuda-gdb
- Lekken vinden met memcheck
- Races opsporen met racecheck
- Synchronisatiefouten onderscheppen met synccheck