CUDA Academy · Lektion

Överföringar från enhet till värd

Ladda ned resultaten till CPU:n.

Lektion 2 av 413 steg

Överföringar från enhet till värd är en gratis lektion i CUDA Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för CUDA Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i CUDA Academy innehåller totalt 4 lektioner.

Hämta hem resultaten

Din kernel har precis fyllt en enhetsbuffer med svar, men CPU:n kan inte läsa GPU-minne direkt. Du måste ladda ner resultaten igen. 📥

Nedladdningsriktningen

För att hämta tillbaka data använder du cudaMemcpyDeviceToHost. Nu är källan enhetsminnet och destinationen RAM på värddatorn.

cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);

Destinationen kommer fortfarande först

Regeln ändras aldrig: destinationens argument först och källan därefter. Vid en nedladdning kommer värdpekaren först.

cudaMemcpy(h_dst, d_src, bytes, cudaMemcpyDeviceToHost);

Värdbufferten måste finnas

Destinationen behöver riktigt CPU-minne som väntar på data. Allokera värdminne med malloc eller new innan du kopierar tillbaka.

float* h_c = (float*)malloc(bytes);

Vänta på kerneln

En blockerande cudaMemcpy väntar på tidigare arbete i standardströmmen, så kerneln slutförs innan några resultat läses.

myKernel<<<blocks, threads>>>(d_c, n);
cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);

Samma antal byte

Ladda ner exakt lika många byte som du laddade upp och beräknade. Storlekar som inte stämmer ger avkortade eller skräpiga resultat.

size_t bytes = n * sizeof(float);

Nu kan du läsa dem

När kopieringen är klar finns värdena i vanligt CPU-minne. Du kan skriva ut, kontrollera eller spara dem precis som vilken annan värd-vektor som helst.

printf("%f\n", h_c[0]);

Tur och retur

Ett komplett GPU-jobb är en tur och retur: ladda upp indata, starta kerneln och ladda sedan ner utdata. Varje sträcka använder cudaMemcpy.

Verifiera innan du litar på resultatet

Efter nedladdningen jämför du GPU-resultatet med en snabb CPU-referens. Verifiering upptäcker buggar innan de sprider sig. ✅

Frigör det du allokerade

När resultaten har hämtats hem frigör du båda sidorna: använd cudaFree för enhetsbufferten och free för värdbufferten så undviker du läckor.

cudaFree(d_c);
free(h_c);

Nedladdningar tar också tid

Returresan går över samma långsamma buss, så kopiera bara tillbaka de resultat du faktiskt behöver på värddatorn.

Snabb kontroll

Din kernel skrev resultaten till enhetsbufferten d_c. Hur läser du dem på CPU:n?

Sammanfattning

Du har lärt dig returresan med cudaMemcpyDeviceToHost: allokera värdminne, ange värdpekaren först, vänta på kerneln och verifiera och frigör sedan minnet. 🎉

Gratis att börja

Lär dig C++ med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Överföringar från enhet till värd” gratis?

Ja – hela texten till ”Överföringar från enhet till värd” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i CUDA Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i CUDA Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Överföringar från enhet till värd”?

Ladda ned resultaten till CPU:n. Ni övar på CUDA Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig CUDA Academy?

Du behöver inga förkunskaper. Utbildningen i CUDA Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Överföringar från enhet till värd”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här CUDA Academy-lektionen?

Ja. Varje CUDA Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Överföringar från värd till enhet
  2. Överföringar från enhet till värd
  3. Uppräkningstypen för kopieringsriktning
  4. PCIe-överföringens flaskhals
← Tillbaka till CUDA Academy