Dynamisk delt minne
Angi størrelsen på delt minne ved oppstart
Dynamisk delt minne 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.
Når størrelsen ennå ikke er kjent
Noen ganger avhenger størrelsen på shared-arrayet av en verdi ved kjøring, slik at du ikke kan hardkode den. CUDA løser dette med dynamisk shared memory.
extern-deklarasjonen
Du deklarerer den med extern __shared__ og tomme klammeparenteser. Ingen størrelse angis i koden, så kompilatoren lar den stå åpen.
extern __shared__ float sdata[];Størrelsen angis ved oppstart
Du sender antallet byte som den tredje oppstartsparameteren, mellom trådantallet og de avsluttende klammeparentesene. Dermed angis størrelsen ved kjøring.
kern<<<blocks, threads, n * sizeof(float)>>>();Det er alltid byte
En klassisk feil: Det tredje argumentet er størrelsen i byte, ikke antall elementer. Multipliser alltid antallet med sizeof for å få riktig verdi.
Standardverdien er null byte
Hvis du utelater det tredje argumentet, reserverer CUDA null dynamisk shared memory. Lesing fra sdata gir da udefinert oppførsel, så ikke glem argumentet.
Statisk og dynamisk sammen
Du kan bruke begge typene i én kernel. Statiske arrayer beholder faste størrelser, mens den dynamiske blokken tilpasses oppstartsargumentet.
Én buffer, mange arrayer
Dynamisk shared memory gir deg én flat buffer. Hvis du vil lagre flere arrayer, deler du den selv opp ved hjelp av pekerforskyvninger. 🔪
Oppdeling med forskyvninger
La et annet array begynne et stykke inn i bufferen. Pass bare på å justere hver del slik at en float aldri begynner midt i et ord.
extern __shared__ float buf[];
float* a = buf;
float* b = &buf[blockDim.x];Hvorfor bruke dynamisk minne
Det lar én kompilert kernel håndtere mange flisestørrelser. Du kan justere shared-størrelsen for hver oppstart uten å kompilere på nytt for hvert tilfelle.
Vær oppmerksom på maskinvaregrensen
Du kan fortsatt ikke overskride det maksimale per blokk. Hvis du ber om for mange byte ved oppstart, starter kernelen ganske enkelt ikke.
Aktivere store allokeringer
For å gå over standardgrensen på nyere GPU-er må du aktivere dette uttrykkelig med cudaFuncSetAttribute før oppstart. Ellers avvises store forespørsler.
Rask sjekk
La oss sjekke hvordan størrelsen på dynamisk shared memory angis.
Oppsummering
Du har lært at extern __shared__-arrayer får byte-størrelsen sin ved oppstart, kan deles opp i flere arrayer og må overholde grensen per blokk. Kurset er fullført! 🎉
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 «Dynamisk delt minne» gratis?
Ja – hele teksten i «Dynamisk delt minne» 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 «Dynamisk delt minne»?
Angi størrelsen på delt minne ved oppstart 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 «Dynamisk delt minne»?
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.