0Pricing
CUDA Academy · Lezione

Trovare le perdite con memcheck

Accessi oltre i limiti e puntatori a dispositivi non validi

Trovare le perdite con memcheck è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CUDA Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CUDA Academy include 4 lezioni in totale.

Perché esiste memcheck

I bug della memoria GPU raramente causano arresti evidenti, quindi compute-sanitizer, con lo strumento memcheck, controlla ogni accesso e segnala i problemi al posto Suo. 🛡️

Il comando moderno

Esegua il programma con lo strumento memcheck anteponendo compute-sanitizer al comando: è il sostituto moderno del precedente cuda-memcheck.

compute-sanitizer --tool memcheck ./vecadd

Letture oltre i limiti

Il bug classico rilevato da memcheck è un accesso out-of-bounds, in cui un thread legge o scrive oltre la fine di un array del device.

Un controllo dei limiti mancante

Dimenticare la guardia permette ai thread aggiuntivi di procedere senza controllo, quindi questo indice può superare n e causare una scrittura globale non valida.

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

Leggere il report

memcheck stampa il tipo di errore, l'indirizzo coinvolto e il thread che lo ha causato, indicando direttamente l'accesso errato.

Ottenere i numeri di riga

Compili con -lineinfo, così memcheck può associare ogni errore alla riga esatta del codice sorgente invece di mostrare solo un indirizzo grezzo.

nvcc -lineinfo vecadd.cu -o vecadd

Rilevare le perdite di memoria

Attivi l'opzione --leak-check e memcheck segnalerà ogni memoria del device allocata ma non rilasciata prima dell'uscita.

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

Una perdita classica

Allocare senza una free corrispondente causa una perdita del buffer e, dopo molte iterazioni, esaurisce gradualmente la memoria del device.

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

Puntatori del device non validi

memcheck segnala anche il passaggio di un puntatore host quando il kernel si aspetta un puntatore del device, un errore che corrompe silenziosamente i risultati.

Accesso non allineato

Alcuni caricamenti richiedono indirizzi allineati, quindi memcheck avvisa in caso di accesso non allineato che altrimenti potrebbe produrre dati errati o un errore.

Correggere e rieseguire

Dopo ogni correzione, esegua nuovamente memcheck finché non segnala zero errori. Un'esecuzione pulita indica che i bug di memoria sono stati eliminati.

Controllo rapido

Quale tipo di bug è progettato principalmente per trovare lo strumento memcheck?

Riepilogo

Ha eseguito memcheck, aggiunto -lineinfo per ottenere le righe del codice sorgente, attivato il controllo delle perdite e imparato a riconoscere i tipi di errore più comuni. Un'esecuzione pulita indica una memoria sicura. ✅

Domande Frequenti

La lezione «Trovare le perdite con memcheck» è gratuita?

Sì — il testo completo di «Trovare le perdite con memcheck» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CUDA Academy, passa a CoddyKit PRO. Il corso CUDA Academy include 4 lezioni in totale.

Cosa imparerò in «Trovare le perdite con memcheck»?

Accessi oltre i limiti e puntatori a dispositivi non validi Eserciti CUDA Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare CUDA Academy?

Non è richiesta alcuna esperienza precedente. CUDA Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Trovare le perdite con memcheck»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione CUDA Academy?

Sì. Ogni lezione CUDA Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Eseguire passo passo i kernel in cuda-gdb
  2. Trovare le perdite con memcheck
  3. Cercare le race con racecheck
  4. Rilevare gli errori di sincronizzazione con synccheck
← Torna a CUDA Academy