0Pricing
CUDA Academy · Lezione

Un puntatore, entrambi i lati

Scopra come funziona cudaMallocManaged.

Un puntatore, entrambi i lati è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Il problema dei due puntatori

Finora ha gestito due puntatori: uno per l'host e uno per il dispositivo. Unified Memory elimina questo inconveniente con un unico puntatore utilizzabile da entrambe le parti. 🙂

Conoscere cudaMallocManaged

Allochi la memoria gestita con cudaMallocManaged. La funzione restituisce un unico indirizzo che funziona sia nel codice CPU sia all'interno dei kernel.

float *data;
cudaMallocManaged(&data, n * sizeof(float));

Niente più cudaMemcpy

Il grande vantaggio è che di solito non servono più le copie manuali. Con la memoria gestita, il runtime sposta i dati al posto suo, quindi cudaMemcpy spesso scompare dal codice.

Scrivere sull'host

Può riempire il buffer con il normale codice CPU subito dopo l'allocazione. Lo stesso puntatore ricevuto è un indirizzo normale che i cicli possono utilizzare.

for (int i = 0; i < n; i++)
    data[i] = i;

Leggere sul dispositivo

Passi esattamente quel puntatore al kernel e i thread della GPU lo dereferenziano direttamente. Un solo indirizzo serve entrambi gli ambienti senza alcun passaggio di traduzione.

kernel<<<blocks, threads>>>(data, n);

Sincronizzare prima di leggere i dati

Dopo che un kernel ha scritto dati gestiti, chiami cudaDeviceSynchronize prima che la CPU li legga. In questo modo garantisce che la GPU abbia terminato e che i risultati siano visibili.

kernel<<<b, t>>>(data, n);
cudaDeviceSynchronize();

Liberarla come qualsiasi buffer

La memoria gestita è comunque memoria del dispositivo, quindi la liberi con cudaFree. Non è necessario ricordare alcuna funzione speciale per liberare la memoria gestita.

cudaFree(data);

Meno codice ripetitivo, meno bug

Eliminando la sequenza allocazione-copia-avvio-copia-liberazione, i programmi diventano più brevi. Meno copie significa meno possibilità di confondere direzioni o dimensioni.

Ottima per la prototipazione

Unified Memory è perfetta quando desidera eseguire rapidamente un kernel. Può prototipare velocemente e ottimizzare i trasferimenti in seguito, solo dove sono davvero importanti.

Non è magia gratuita

In realtà i dati devono comunque attraversare PCIe. La praticità è reale, ma le prestazioni possono essere inferiori a quelle di copie ottimizzate manualmente, finché non aggiunge in seguito opportune indicazioni.

Quando utilizzarla

Scelga la memoria gestita per semplificare il codice, gestire strutture di puntatori profonde o sovrascrivere la memoria della GPU. È ideale quando la chiarezza conta più della velocità di picco.

Verifica rapida

Verifichiamo in che modo l'allocazione gestita differisce dal flusso classico.

Riepilogo: un puntatore, entrambe le parti

Ha imparato che cudaMallocManaged fornisce un unico puntatore per host e dispositivo, eliminando la maggior parte delle copie. Sincronizzi prima di leggere e liberi la memoria con cudaFree. Ottimo lavoro! 🎉

Domande Frequenti

La lezione «Un puntatore, entrambi i lati» è gratuita?

Sì — il testo completo di «Un puntatore, entrambi i lati» è 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 «Un puntatore, entrambi i lati»?

Scopra come funziona cudaMallocManaged. 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 1 di 4.

Quanto tempo richiede la lezione «Un puntatore, entrambi i lati»?

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. Un puntatore, entrambi i lati
  2. Migrazione delle pagine su richiesta
  3. Prefetching con cudaMemPrefetchAsync
  4. Suggerimenti tramite cudaMemAdvise
← Torna a CUDA Academy