0Pricing
CUDA Academy · Lezione

La trappola dello stream predefinito

Scopra come lo stream 0 serializza ogni operazione.

La trappola dello stream predefinito è 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.

Che cos'è uno stream?

Uno stream è una coda ordinata di lavori per la GPU. Le operazioni nello stesso stream vengono eseguite una dopo l'altra, nell'ordine in cui sono state inviate. ⏳

Lo stream predefinito

Se non specifica mai uno stream, ogni chiamata finisce nello stream predefinito, chiamato anche stream 0. È qui che tutto il lavoro viene eseguito in modo implicito.

Perché è un'insidia

Lo stream predefinito è sincronizzante: aspetta che gli altri stream terminino e gli altri stream aspettano lui. Nulla viene eseguito in sovrapposizione, quindi la GPU rimane inattiva tra un passaggio e l'altro.

Tutto viene serializzato

Se invia una copia, un kernel e poi un'altra copia nello stream 0, vengono eseguiti rigorosamente uno dopo l'altro. La GPU non può mai iniziare il secondo passaggio prima che termini il primo.

cudaMemcpy(d_a, h_a, n, cudaMemcpyHostToDevice);
kernel<<<grid, block>>>(d_a);
cudaMemcpy(h_a, d_a, n, cudaMemcpyDeviceToHost);

Hardware inutilizzato

Le GPU moderne hanno motori separati per il calcolo e per le copie. Nello stream predefinito, questi motori si alternano invece di lavorare insieme.

Il costo nascosto delle copie

I trasferimenti di dati tramite PCIe sono lenti. Quando le copie non possono essere eseguite in sovrapposizione con il calcolo, il loro tempo viene aggiunto direttamente al tempo totale di esecuzione.

Sincronizzazione implicita

Molte chiamate sullo stream predefinito sono anche bloccanti per l'host. cudaMemcpy restituisce il controllo solo al termine della copia, bloccando la CPU.

Il comportamento legacy

Per impostazione predefinita, il lavoro in qualsiasi stream aspetta lo stream 0, e lo stream 0 aspetta gli altri. Questa regola legacy distrugge silenziosamente la concorrenza che pensava di avere.

Un profilo rivelatore

In un profiler, l'insidia dello stream predefinito appare come un'unica corsia occupata con delle lacune, mentre i motori di copia e di calcolo rimangono inattivi in attesa l'uno dell'altro.

La soluzione

La soluzione consiste nell'inviare il lavoro indipendente su stream separati. In questo modo copie e kernel possono essere eseguiti contemporaneamente e riempire quelle lacune inattive.

Stream predefiniti per thread

Compilare con --default-stream per-thread assegna a ogni thread dell'host il proprio stream predefinito, riducendo il problema senza dover riscrivere ogni chiamata.

nvcc --default-stream per-thread app.cu -o app

Verifica rapida

Perché inserire tutto il lavoro nello stream predefinito riduce le prestazioni?

Riepilogo

Lo stream predefinito serializza il lavoro della GPU e impedisce la sovrapposizione. Per procedere più velocemente, ora sposterà le attività indipendenti nei rispettivi stream. 🚀

Domande Frequenti

La lezione «La trappola dello stream predefinito» è gratuita?

Sì — il testo completo di «La trappola dello stream predefinito» è 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 «La trappola dello stream predefinito»?

Scopra come lo stream 0 serializza ogni operazione. 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 «La trappola dello stream predefinito»?

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. La trappola dello stream predefinito
  2. Creare e utilizzare gli stream
  3. Eventi per misurazione e sincronizzazione
  4. Sovrapporre copia e calcolo
← Torna a CUDA Academy