CUDA Academy · leksjon

Finn lekkasjer med memcheck

Grenser som overskrides og ugyldige enhetspekere

Leksjon 2 av 413 trinn

Finn lekkasjer med memcheck er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 2 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.

Hvorfor memcheck finnes

GPU-minnefeil fører sjelden til tydelige krasj, så compute-sanitizer med memcheck-verktøyet overvåker hver tilgang og rapporterer problemet for deg. 🛡️

Den moderne kommandoen

Kjør programmet under memcheck-verktøyet ved å sette compute-sanitizer foran det. Dette er den moderne erstatningen for det gamle cuda-memcheck.

compute-sanitizer --tool memcheck ./vecadd

Lesing utenfor grensene

Den klassiske feilen memcheck fanger opp, er en tilgang utenfor grensene, der en tråd leser eller skriver forbi slutten av en enhetsmatrise.

En manglende grensekontroll

Hvis du glemmer vakten, kan ekstra tråder løpe fritt, slik at denne indeksen kan gå forbi n og utløse en ugyldig global skriving.

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

Les rapporten

memcheck skriver ut feiltypen, den aktuelle adressen og tråden som forårsaket feilen, slik at du finner den problematiske tilgangen direkte.

Få linjenumre

Kompiler med -lineinfo, slik at memcheck kan knytte hver feil til den nøyaktige kildekodelinjen i stedet for en rå adresse.

nvcc -lineinfo vecadd.cu -o vecadd

Oppdag minnelekkasjer

Aktiver alternativet --leak-check, så rapporterer memcheck alt enhetsminne du har allokert, men ikke frigitt før avslutning.

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

En klassisk lekkasje

Hvis du allokerer uten en tilsvarende free, lekker bufferen, og etter mange iterasjoner tømmer dette gradvis enhetsminnet.

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

Ugyldige enhetspekere

memcheck markerer også at du sender en vertspeker når kernelen forventer en enhetspeker, en feil som stille kan ødelegge resultatene.

Feiljustert tilgang

Noen innlastinger krever justerte adresser, så memcheck advarer om en feiljustert tilgang som ellers kunne gitt søppeldata eller en feil.

Rett opp og kjør på nytt

Kjør memcheck på nytt etter hver retting, helt til det rapporterer null feil. En ren kjøring viser at minnefeilene er borte.

Hurtigsjekk

Hvilken type feil er memcheck-verktøyet først og fremst laget for å finne?

Oppsummering

Du kjørte memcheck, la til -lineinfo for kildekodelinjer, aktiverte lekkasjekontroll og lærte om de vanligste feiltypene. Rene kjøringer betyr trygt minne. ✅

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 «Finn lekkasjer med memcheck» gratis?

Ja – hele teksten i «Finn lekkasjer med memcheck» 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 «Finn lekkasjer med memcheck»?

Grenser som overskrides og ugyldige enhetspekere 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 2 av 4.

Hvor lang tid tar leksjonen «Finn lekkasjer med memcheck»?

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. Stepping gjennom kjerner i cuda-gdb
  2. Finn lekkasjer med memcheck
  3. Finn kappløp med racecheck
  4. Oppdag synkroniseringsfeil med synccheck
← Tilbake til CUDA Academy