Separate adresserom
Hvorfor en vertspeker er ugyldig på enheten
Separate adresserom er en gratis leksjon i CUDA Academy på CoddyKit. Dette er leksjon 3 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.
To separate minner
CPU-en og GPU-en har hvert sitt RAM. De deler ikke ett adresserom, og dette ene faktumet preger all CUDA. 🧠
Hva en adresse betyr
En peker er bare et tall som angir en plass i minnet. Plassen gir bare mening i adresserommet der den ble opprettet.
Host-pekere er lokale
En peker fra malloc angir host-minne. GPU-en har ingen slik plass, så hvis De sender den til en kjerne, peker den ikke på noe gyldig.
int* h = (int*)malloc(n * sizeof(int));Device-pekere er også lokale
En peker fra cudaMalloc angir device-minne. CPU-en kan ikke lese det direkte; dereferering av den på host-siden fører til krasj.
int* d;
cudaMalloc(&d, n * sizeof(int));Den klassiske feilen
Det går fint å kompilere når De sender en host-peker til en kjerne, men programmet feiler under kjøring. Tallet er gyldig, men minnet det angir, ligger ikke på GPU-en.
Hvorfor det likevel kompileres
Begge pekerne ser ut som samme type for C++, så kompilatoren forblir taus. Misforholdet blir først et problem når GPU-en bruker adressen.
Koble sammen med cudaMemcpy
For å flytte data mellom adresserom må De kopiere dem eksplisitt med cudaMemcpy. Det finnes ingen automatisk deling på tvers av skillet.
cudaMemcpy(d, h, bytes, cudaMemcpyHostToDevice);En navnekonvensjon hjelper
Mange programmerere setter h_ foran host-pekere og d_ foran device-pekere. Det er en vane som hindrer smertefulle forvekslinger.
float *h_a, *d_a;Kjerner ser device-rommet
Inne i en kjerne må hver peker De derefererer, ligge i device-minne. Det er det eneste minneområdet GPU-trådene kan nå.
Tips om Unified Memory
Senere vil De møte unified memory, der én peker er gyldig på begge sider. Foreløpig bør De holde host- og device-pekere strengt adskilt.
Den mentale modellen
Se for Dem to rom uten felles hyller. For å bruke data i det andre rommet må De bære en kopi over, aldri bare peke på tvers.
Rask kontroll
La oss bekrefte at De forstår separate adresserom.
Oppsummering
De har lært at host og device ligger i separate adresserom, at pekere ikke kan byttes om, og at cudaMemcpy brukes til å få data over skillet. ✅
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 «Separate adresserom» gratis?
Ja – hele teksten i «Separate adresserom» 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 «Separate adresserom»?
Hvorfor en vertspeker er ugyldig på enheten 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 3 av 4.
Hvor lang tid tar leksjonen «Separate adresserom»?
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
- Funksjonskvalifikatoren __global__
- Funksjoner med __device__ og __host__
- Separate adresserom
- Livsløpet til et CUDA-program