CUDA Academy · Lezione

Memoria costante e relativa cache

Distribuisca in modo efficiente valori in sola lettura.

Lezione 3 di 413 passaggi

Memoria costante e relativa cache è 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.

Uno spazio per i valori in sola lettura

La memoria costante è una piccola regione progettata per dati che ogni thread legge, ma che nessuno modifica durante un kernel.

Dichiararla

Contrassegni un array con ambito globale usando il qualificatore __constant__. Si trova all'esterno di qualsiasi funzione ed è visibile a tutti i Suoi kernel.

__constant__ float weights[256];

È davvero piccola

La memoria costante totale è di soli 64 KB sulle GPU tipiche. È pensata per coefficienti e parametri, non per grandi dataset.

Riempirla dall'host

Scrive nella memoria costante dalla CPU usando cudaMemcpyToSymbol, poiché i kernel non possono modificarla direttamente.

cudaMemcpyToSymbol(weights, h_w,
    256 * sizeof(float));

Supportata da una cache speciale

Le letture passano attraverso una cache costante dedicata su ogni multiprocessor. Un valore presente nella cache torna quasi alla stessa velocità di un registro.

Il superpotere del broadcast

Quando un warp intero legge lo stesso indirizzo, l'hardware esegue un solo fetch e lo broadcast a tutti i 32 thread in un unico passaggio. 📡

La chiave è lo stesso indirizzo

Il vantaggio dipende dall'accesso uniforme. Se i thread di un warp leggono indirizzi costanti diversi, le letture vengono serializzate e l'accelerazione scompare.

La lettura appare normale

All'interno di un kernel, legge la memoria costante come un qualsiasi array. Il compilatore instrada silenziosamente l'accesso attraverso la veloce cache costante.

__global__ void k(float *out, int i) {
    out[i] = weights[0] * 2.0f;
}

Perfetta per i filtri

I kernel di convoluzione e le tabelle di ricerca sono ideali in questo caso, perché ogni thread riutilizza continuamente lo stesso piccolo insieme di coefficienti.

Impostarla una volta, riutilizzarla spesso

In genere carica nella memoria costante i dati una sola volta, poi lancia molti kernel che leggono tutti quei valori invariabili a basso costo.

Quando non usarla

Eviti la memoria costante se i dati sono grandi o se i thread leggono indirizzi sparsi. In questi casi, la semplice memoria globale è più adatta.

Verifica rapida

Quando la memoria costante offre la maggiore accelerazione?

Riepilogo: piccola, in cache, con broadcast

Ha imparato che la memoria costante è uno spazio minuscolo in sola lettura, la cui cache trasmette con broadcast le letture uniformi a un intero warp. La usi per valori piccoli e condivisi. ✨

Gratis per iniziare

Impara C++ con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Memoria costante e relativa cache» è gratuita?

Sì — il testo completo di «Memoria costante e relativa cache» è 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 «Memoria costante e relativa cache»?

Distribuisca in modo efficiente valori in sola lettura. 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 «Memoria costante e relativa cache»?

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. Registri e memoria locale
  2. Compromessi della memoria globale
  3. Memoria costante e relativa cache
  4. Un modello mentale della gerarchia
← Torna a CUDA Academy