Registertrykk og spills
Balanser gjenbruk mot occupancy
Registertrykk og spills er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 4 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.
Registre er verdifulle
Registre er den raskeste lagringen en tråd har tilgang til, men hver SM har bare et begrenset antall. Hvor intensivt en kernel bruker dem, kalles registertrykk.
Et delt, fast lager
Alle aktive tråder henter ressurser fra én registerfil per SM. Jo flere registre hver tråd trenger, desto færre tråder kan være aktive samtidig.
Trykk reduserer occupancy
Høy registerbruk begrenser direkte hvor mange warps som får plass på en SM. Denne nedgangen i occupancy kan gi maskinvaren for lite arbeid til å skjule latenstid.
Hva en spill er
Når en tråd trenger flere registre enn det finnes, flytter kompilatoren ut ekstra verdier. Denne overflyten er en registerspill til tregere minne.
Spill havner i lokalt minne
Verdier som spills, havner i lokalt minne, som ligger i DRAM utenfor brikken. Hver spill erstatter et ledig registeroppslag med en langsom tur frem og tilbake.
Se registerantallet
Be kompilatoren rapportere bruken. Når De legger til --ptxas-options=-v i nvcc, skriver den ut antall registre per tråd og eventuelle spillbyte for hver kernel.
nvcc --ptxas-options=-v kernel.cuLes spilltallene
Rapporten viser lagringer og innlastinger for spill. Ethvert spill-antall som ikke er null, er et varselsignal om at kernelen betaler for treg trafikk til lokalt minne.
Begrens registre per tråd
De kan angi en øvre grense ved kompilering. Flagget --maxrregcount begrenser antallet registre per tråd og bytter litt hastighet mot høyere occupancy.
nvcc --maxrregcount=32 kernel.cuGi et hint med __launch_bounds__
Et hint per kernel er ofte bedre. __launch_bounds__ forteller kompilatoren blokkstørrelsen, slik at den kan budsjettere registrene for den occupancy-en De ønsker.
__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }Reduser det aktive verdisettet
Ofte kan De ganske enkelt holde færre verdier samtidig. Ved å beregne et rimelig resultat på nytt eller begrense variabelens scope reduserer De hvor mange registre som forblir aktive.
Balanser gjenbruk og occupancy
ILP og utrulling øker trykket, mens begrensninger øker occupancy. Kunsten er å finne balansen som gir høyest hastighet, og bare profilereren kan fortelle Dem hvor den ligger.
Rask kontroll
Hvor havner verdiene når en kernel går tom for registre?
Oppsummering: Hold trykket under kontroll
De har lært at høyt registertrykk reduserer occupancy og kan føre til spill til treg DRAM. Mål bruken, begrens antallet registre, og la profilereren veilede Dem. 🎯
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 «Registertrykk og spills» gratis?
Ja – hele teksten i «Registertrykk og spills» 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 «Registertrykk og spills»?
Balanser gjenbruk mot occupancy 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 4 av 4.
Hvor lang tid tar leksjonen «Registertrykk og spills»?
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
- Parallellitet på instruksjonsnivå
- Rull ut løkker med #pragma unroll
- Vektoriserte innlastinger med float4
- Registertrykk og spills