CUDA Academy · Lezione

Cercare le race con racecheck

Rilevare le race sui dati nella memoria condivisa

Lezione 3 di 413 passaggi

Cercare le race con racecheck è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Che cos'è una race condition

Si verifica una data race quando due thread accedono alla stessa memoria condivisa e almeno uno scrive, senza alcun ordinamento tra le operazioni. 😬

Perché le race condition sono insidiose

Le race condition spesso producono il risultato corretto nei test e quello errato in produzione, perché il risultato dipende dalla temporizzazione imprevedibile dei thread.

Presentazione di racecheck

Lo strumento racecheck di compute-sanitizer analizza gli accessi alla memoria condivisa e segnala i rischi che un'esecuzione normale nasconderebbe.

compute-sanitizer --tool racecheck ./reduce

Una barriera mancante

Scrivere in un array condiviso e poi leggere la posizione adiacente senza una barriera crea una race condition, perché la posizione vicina potrebbe non essere ancora stata scritta.

tile[tid] = in[i];
out[tid] = tile[tid + 1];

La correzione: __syncthreads

Inserisca __syncthreads tra la scrittura e la lettura, così ogni thread del blocco termina di scrivere prima che qualcuno legga.

tile[tid] = in[i];
__syncthreads();
out[tid] = tile[tid + 1];

Rischi write-after-write

racecheck rileva anche un rischio di write-after-write, in cui due thread scrivono nella stessa posizione condivisa senza un ordine tra loro.

Rischi read-after-write

Il rischio più comune è read-after-write: un thread legge un valore che un altro thread sta ancora scrivendo, quindi legge dati obsoleti.

Leggere il report dei rischi

racecheck indica il tipo di rischio, i due thread e l'indirizzo condiviso coinvolti, così può capire esattamente quale barriera manca.

Controlla la memoria condivisa

racecheck si concentra sulla memoria __shared__ all'interno di un blocco; per le race condition globali servono generalmente una logica accurata o operazioni atomiche.

Aggiungere le informazioni sulle righe

Come per memcheck, la compilazione con -lineinfo permette a racecheck di indicare la riga esatta del codice sorgente di ogni rischio.

nvcc -lineinfo reduce.cu -o reduce

Verificare la correzione

Esegua nuovamente racecheck dopo aver aggiunto la barriera. Un report con zero rischi significa che gli accessi alla memoria condivisa sono ora ordinati correttamente.

Controllo rapido

Qual è la correzione abituale quando racecheck segnala un rischio nella memoria condivisa?

Riepilogo

Ha utilizzato racecheck per trovare i rischi nella memoria condivisa, letto i relativi report e risolto i problemi con barriere __syncthreads. I bug di temporizzazione sono stati portati alla luce. 🎯

Gratis per iniziare

Impara C++ con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Cercare le race con racecheck» è gratuita?

Sì — il testo completo di «Cercare le race con racecheck» è 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 «Cercare le race con racecheck»?

Rilevare le race sui dati nella memoria condivisa 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 3 di 4.

Quanto tempo richiede la lezione «Cercare le race con racecheck»?

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