Överföringar från enhet till värd
Ladda ned resultaten till CPU:n.
Ö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. 🎉
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
- Överföringar från värd till enhet
- Överföringar från enhet till värd
- Uppräkningstypen för kopieringsriktning
- PCIe-överföringens flaskhals