Koppla ihop värdsidan
Allokera, kopiera, starta, kopiera tillbaka och frigör.
Koppla ihop värdsidan ä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.
Värddatorn har också en uppgift
Kerneln utför matematiken, men CPU:n på värddatorn förbereder allt. Dess uppgift är att allokera, kopiera in, starta, kopiera tillbaka och frigöra. 🧩
Två uppsättningar pekare
Du har värdpekare för CPU-vektorer och separata enhetspekare för GPU-buffertar. En vanlig vana är att namnge dem h_A och d_A.
float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;Fyll i datan på CPU:n
Förbered först dina data i vanligt värdminne. Här initierar du bara h_A och h_B med värden som GPU:n adderar senare.
for (int i = 0; i < n; i++) {
h_A[i] = i; h_B[i] = 2 * i;
}Allokera på enheten
GPU:n behöver egna buffertar, så anropa cudaMalloc för varje vektor. Observera att storleken anges i byte och beräknas som antalet element gånger sizeof(float).
size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);Kopiera upp indata
Flytta dina indatavektorer till GPU:n med cudaMemcpy och riktningen HostToDevice. Kerneln kan bara se data som finns på enheten.
cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);Bestäm startkonfigurationen
Välj hur många trådar varje block ska ha och beräkna sedan hur många block som täcker alla element. Avrundning uppåt garanterar att varje element får en tråd.
int threads = 256;
int blocks = (n + threads - 1) / threads;Starta kerneln
Starta nu kerneln med syntaxen triple-angle-bracket och skicka med dina enhetspekare. Anropet returnerar direkt medan GPU:n arbetar.
vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);Kopiera ner resultatet
När kerneln är klar hämtar du tillbaka C med cudaMemcpyDeviceToHost. Den här kopieringen väntar också först på att starten ska slutföras.
cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);Frigör enhetsminnet
GPU-minne samlas inte in automatiskt, så frigör varje buffer med cudaFree. Om du hoppar över detta läcker minne som finns kvar tills processen avslutas.
cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);Ordningen är helig
Följ alltid samma ordning: allokera, kopiera in, starta, kopiera tillbaka, frigör. Byter du plats på stegen läser kerneln inaktuella eller ogiltiga data.
Värdkoden är vanlig C++
Observera att värdsidan är vanlig C++ plus en handfull cuda-anrop. Det finns ingen särskild kompilatormagi utöver kernel-starten.
Snabb kontroll
Vad måste ske innan du kan starta vecAdd-kerneln?
Sammanfattning
Ni har kopplat ihop värdsidan från början till slut: två pekaruppsättningar, cudaMalloc, kopiering upp, start, kopiering tillbaka och cudaFree. Standardkoden som driver varje kernel. ✅
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 ”Koppla ihop värdsidan” gratis?
Ja – hela texten till ”Koppla ihop värdsidan” 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 ”Koppla ihop värdsidan”?
Allokera, kopiera, starta, kopiera tillbaka och frigör. 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 ”Koppla ihop värdsidan”?
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
- Vektoradditionskärnan
- Koppla ihop värdsidan
- Verifiera resultatet på CPU:n
- Mät er första prestandaökning