CUDA Academy · Lektion

Find race conditions med racecheck

Registrering af data-race conditions i shared memory

Lektion 3 af 413 trin

Find race conditions med racecheck er en gratis CUDA Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i CUDA Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. CUDA Academy-kurset indeholder 4 lektioner i alt.

Hvad en datakapløbstilstand er

En datakapløbstilstand opstår, når to tråde tilgår den samme delte hukommelse, og mindst én af dem skriver, uden at adgangen er ordnet mellem dem. 😬

Hvorfor kapløb er svære at opdage

Kapløb giver ofte det rigtige svar under test og det forkerte i produktion, fordi resultatet afhænger af uforudsigelig trådtiming.

Mød racecheck

Værktøjet racecheck i compute-sanitizer analyserer adgange til delt hukommelse og rapporterer farer, som en normal kørsel ville skjule.

compute-sanitizer --tool racecheck ./reduce

En manglende barriere

Hvis du skriver til et delt array og derefter læser naboens plads uden en barriere, opstår der et kapløb, fordi naboens plads måske ikke er skrevet endnu.

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

Løsningen: __syncthreads

Indsæt __syncthreads mellem skrivningen og læsningen, så alle tråde i blokken er færdige med at skrive, før nogen læser.

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

Farer ved skrivning efter skrivning

racecheck fanger også en fare ved skrivning efter skrivning, hvor to tråde gemmer til den samme delte plads uden nogen rækkefølge mellem dem.

Farer ved læsning efter skrivning

Den mest almindelige fare er læsning efter skrivning: En tråd læser en værdi, som en anden tråd stadig skriver, og læser derfor forældede data.

Læs fare-rapporten

racecheck angiver faretypen samt de to involverede tråde og den delte adresse, så du ved præcis, hvilken barriere der mangler.

Det overvåger delt hukommelse

racecheck fokuserer på __shared__-hukommelse i en blok. Globale kapløb kræver normalt omhyggelig logik eller atomiske operationer i stedet.

Tilføj linjeoplysninger

Ligesom memcheck lader kompilering med -lineinfo racecheck pege på den præcise kildekodelinje for hver fare.

nvcc -lineinfo reduce.cu -o reduce

Kontrollér rettelsen

Kør racecheck igen efter at have tilføjet barrieren. En rapport med nul farer betyder, at dine adgange til den delte hukommelse nu er korrekt ordnet.

Hurtig kontrol

Hvad er den sædvanlige løsning, når racecheck rapporterer en fare i delt hukommelse?

Opsummering

Du brugte racecheck til at finde farer i delt hukommelse, læste rapporterne og rettede dem med __syncthreads-barrierer. Tidsafhængige fejl er afsløret. 🎯

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Find race conditions med racecheck” gratis?

Ja — hele teksten til “Find race conditions med racecheck” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af CUDA Academy-kurset, skal du opgradere til CoddyKit PRO. CUDA Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Find race conditions med racecheck”?

Registrering af data-race conditions i shared memory Du øver dig i CUDA Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på CUDA Academy?

Der kræves ingen tidligere erfaring. CUDA Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Find race conditions med racecheck”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne CUDA Academy-lektion?

Ja. Alle CUDA Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Trinvis fejlfinding af kernels i cuda-gdb
  2. Find lækager med memcheck
  3. Find race conditions med racecheck
  4. Find synkroniseringsfejl med synccheck
← Tilbage til CUDA Academy