CUDA Academy · Lektion

Et CUDA-programs liv

Allokér, kopiér, start, kopiér tilbage, frigiv.

Lektion 4 af 413 trin

Et CUDA-programs liv er en gratis CUDA Academy-lektion på CoddyKit. Dette er lektion 4 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.

En gentagen rytme

Næsten alle CUDA-programmer følger den samme dans i fem trin. Lær rytmen én gang, så kan du læse al GPU-kode. 🕺

Trin 1: Allokér

Reservér først enhedshukommelse til dine input- og outputdata med cudaMalloc, fordi GPU'en ikke kan bruge værtsbuffere direkte.

cudaMalloc(&d_a, bytes);
cudaMalloc(&d_b, bytes);

Trin 2: Kopiér ind

Upload derefter dine inputdata fra vært til enhed med cudaMemcpy. GPU'en har nu sin egen kopi at arbejde på.

cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);

Trin 3: Start

Start nu din kernel på tværs af mange tråde. Det er her, det parallelle arbejde faktisk udføres på enheden. 🚀

myKernel<<<blocks, threads>>>(d_a, d_b, n);

Trin 4: Kopiér tilbage

Når beregningen er færdig, skal du downloade resultaterne fra enhed til vært, så CPU'en kan læse og bruge dem.

cudaMemcpy(h_b, d_b, bytes, cudaMemcpyDeviceToHost);

Trin 5: Frigiv

Frigiv til sidst alle enhedsbufferne med cudaFree. Hvis du springer det over, lækker du GPU-hukommelse, som andet arbejde kunne bruge.

cudaFree(d_a);
cudaFree(d_b);

Glem ikke at synkronisere

Da starter er asynkrone, skal du kalde cudaDeviceSynchronize, før du læser resultaterne, for at sikre at GPU'en faktisk er færdig.

cudaDeviceSynchronize();

Kopiering tager tid

Kopieringstrinnene går gennem den langsomme PCIe-bus, så dataoverførsel er ofte den egentlige flaskehals, ikke selve kernelen.

Genbrug buffere

Det er bedre at allokere én gang og genbruge buffere på tværs af mange starter end at allokere ny hukommelse ved hver iteration i en løkke.

Mønsterets symmetri

Bemærk symmetrien: hver cudaMalloc har en tilsvarende cudaFree, og hver kopiering ind har til sidst en tilsvarende kopiering ud.

Livscyklussen i én sætning

Sig det som et mantra: allokér, kopiér, start, kopiér tilbage, frigiv. Den ene linje er skelettet i næsten alle kernelprogrammer.

Hurtigt tjek

Lad os gennemgå den almindelige CUDA-programlivscyklus.

Opsummering

Du har lært CUDA-livscyklussen i fem trin: allokér, kopiér ind, start, kopiér tilbage, frigiv samt synkronisering, før du læser resultaterne. 🎉

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 “Et CUDA-programs liv” gratis?

Ja — hele teksten til “Et CUDA-programs liv” 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 “Et CUDA-programs liv”?

Allokér, kopiér, start, kopiér tilbage, frigiv. 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 4 af 4.

Hvor lang tid tager lektionen “Et CUDA-programs liv”?

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. Funktionskvalifikatoren __global__
  2. Funktioner med __device__ og __host__
  3. Separate adresseområder
  4. Et CUDA-programs liv
← Tilbage til CUDA Academy