0Pricing
CUDA Academy · Lezione

Collegare il lato host

Allochi, copi, avvii, ricopi e liberi la memoria.

Collegare il lato host è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CUDA Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CUDA Academy include 4 lezioni in totale.

Anche l’host ha un compito

Il kernel esegue i calcoli, ma la CPU dell’host prepara tutto. Il suo compito è allocare, copiare i dati in ingresso, avviare il kernel, copiare i risultati indietro e liberare la memoria. 🧩

Due serie di puntatori

Si usano puntatori dell’host per gli array della CPU e puntatori del device separati per i buffer della GPU. Un’abitudine comune è chiamarli h_A e d_A.

float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;

Riempire l’input sulla CPU

Per prima cosa prepari i dati nella normale memoria dell’host. In questo caso inizializzi semplicemente h_A e h_B con i valori che la GPU sommerà in seguito.

for (int i = 0; i < n; i++) {
    h_A[i] = i; h_B[i] = 2 * i;
}

Allocare sul device

La GPU ha bisogno dei propri buffer, quindi chiami cudaMalloc per ogni array. Noti che la dimensione è espressa in byte, calcolata come numero di elementi moltiplicato per sizeof(float).

size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);

Copiare gli input sulla GPU

Sposti gli array di input sulla GPU con cudaMemcpy e la direzione HostToDevice. Il kernel può vedere solo i dati che risiedono sul device.

cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);

Decidere la configurazione di avvio

Scelga il numero di thread per blocco, poi calcoli quanti blocchi servono per coprire tutti gli elementi. Arrotondare per eccesso garantisce che ogni elemento riceva un thread.

int threads = 256;
int blocks = (n + threads - 1) / threads;

Avviare il kernel

Ora avvii il kernel con la sintassi delle triple parentesi angolari, passando i puntatori del device. Questa chiamata restituisce immediatamente il controllo mentre la GPU lavora.

vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);

Copiare indietro il risultato

Quando il kernel termina, riporti C sulla CPU con cudaMemcpyDeviceToHost. Anche questa copia attende prima il completamento dell’avvio.

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

Liberare la memoria del device

La memoria della GPU non viene raccolta automaticamente, quindi liberi ogni buffer con cudaFree. Saltare questo passaggio provoca una perdita di memoria che dura fino alla terminazione del processo.

cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);

L’ordine è fondamentale

Segua sempre la stessa sequenza: allocare, copiare i dati in ingresso, avviare, copiare indietro, liberare. Se scambia i passaggi, il kernel legge dati obsoleti o non validi.

Il codice dell’host è semplice C++

Noti che il lato host è costituito da normale C++ e da alcune chiamate cuda. Non c’è alcuna magia speciale del compilatore oltre all’avvio del kernel.

Controllo rapido

Che cosa deve accadere prima di poter avviare il kernel vecAdd?

Riepilogo

Ha collegato il lato host dall’inizio alla fine: due insiemi di puntatori, cudaMalloc, copia verso il device, avvio, copia indietro e cudaFree. Il codice ripetitivo alla base di ogni kernel. ✅

Domande Frequenti

La lezione «Collegare il lato host» è gratuita?

Sì — il testo completo di «Collegare il lato host» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CUDA Academy, passa a CoddyKit PRO. Il corso CUDA Academy include 4 lezioni in totale.

Cosa imparerò in «Collegare il lato host»?

Allochi, copi, avvii, ricopi e liberi la memoria. Eserciti CUDA Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare CUDA Academy?

Non è richiesta alcuna esperienza precedente. CUDA Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Collegare il lato host»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione CUDA Academy?

Sì. Ogni lezione CUDA Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Il kernel di somma di vettori
  2. Collegare il lato host
  3. Verificare il risultato sulla CPU
  4. Misurare il primo incremento di velocità
← Torna a CUDA Academy