0Pricing
CUDA Academy · Lezione

cudaMemcpyAsync in uno stream

Trasferimenti non bloccanti che si sovrappongono.

cudaMemcpyAsync in uno stream è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Bloccante per impostazione predefinita

La normale cudaMemcpy blocca la CPU finché la copia non è terminata. Il thread host resta semplicemente in attesa, senza fare nulla di utile mentre i byte vengono trasferiti.

La variante asincrona

Conosca cudaMemcpyAsync. Accoda la copia e restituisce immediatamente il controllo alla CPU, così l'host può continuare a lavorare mentre avviene il trasferimento.

Richiede uno stream

La copia asincrona accetta un argomento aggiuntivo: uno stream. Lo stream è la coda ordinata in cui il trasferimento attende il proprio turno per essere eseguito.

cudaMemcpyAsync(d_data, h_data, bytes, cudaMemcpyHostToDevice, stream);

Pinned o niente

Ecco il punto: le copie asincrone sono realmente non bloccanti solo dalla memoria host pinned. Se passa un buffer paginabile, CUDA torna silenziosamente a una copia bloccante.

Restituisce il controllo, non completa la copia

Quando la chiamata restituisce il controllo, la copia è stata solo pianificata, non completata. I dati potrebbero essere ancora in trasferimento, quindi non li legga ancora.

Ordine all'interno di uno stream

Il lavoro in uno stream viene eseguito in ordine, un elemento dopo l'altro. Una copia emessa prima di un kernel nello stesso stream è quindi garantita essere completata per prima.

Attenda quando è necessario

Prima di accedere ai risultati sulla CPU, si assicuri che la coda sia stata svuotata. Chiami cudaStreamSynchronize per bloccare l'esecuzione finché il lavoro di quello stream non è terminato.

cudaStreamSynchronize(stream);

L'obiettivo: la sovrapposizione

Le copie asincrone consentono a un trasferimento in uno stream di essere eseguito mentre un kernel in un altro stream calcola. Questa concorrenza permette di nascondere il tempo di trasferimento.

Attenzione allo stream predefinito

Se passa lo stream 0, quello predefinito legacy, questo può serializzarsi con tutto il resto. Utilizzi stream creati appositamente per ottenere davvero la sovrapposizione.

Mantenga valido il buffer

Poiché la copia termina in un secondo momento, il buffer host deve restare valido fino ad allora. Se lo libera troppo presto, il trasferimento in corso leggerà dati casuali.

Uno schema tipico

Il flusso classico consiste in una copia asincrona in ingresso, nell'avvio del kernel e poi in una copia asincrona in uscita, tutto nello stesso stream. Esegua la sincronizzazione solo alla fine.

cudaMemcpyAsync(d_in, h_in, bytes, cudaMemcpyHostToDevice, stream);
kernel<<<grid, block, 0, stream>>>(d_in, d_out);

Verifica rapida

Che cosa richiede cudaMemcpyAsync per essere realmente non bloccante?

Riepilogo

cudaMemcpyAsync accoda una copia in uno stream e restituisce subito il controllo, ma richiede memoria pinned per sovrapporsi ad altre operazioni. Sincronizzi lo stream prima di leggere i risultati. ⚡

Domande Frequenti

La lezione «cudaMemcpyAsync in uno stream» è gratuita?

Sì — il testo completo di «cudaMemcpyAsync in uno stream» è 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 «cudaMemcpyAsync in uno stream»?

Trasferimenti non bloccanti che si sovrappongono. 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 3 di 4.

Quanto tempo richiede la lezione «cudaMemcpyAsync in uno stream»?

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. Perché la memoria pageable è lenta
  2. Memoria pinned con cudaMallocHost
  3. cudaMemcpyAsync in uno stream
  4. La pipeline a doppio buffer
← Torna a CUDA Academy