0Pricing
CUDA Academy · Lezione

Iterare sulle fasi dei tile

Accumuli somme parziali tra i tile.

Iterare sulle fasi dei tile è 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.

Il prodotto scalare viene suddiviso

Moltiplicare un’intera riga per un’intera colonna è troppo per un solo tile. Si suddivide quindi la somma lunga in blocchi di larghezza TILE, uno per ogni fase.

Contare le fasi

Se le matrici hanno larghezza N e i tile hanno larghezza TILE, servono N / TILE fasi per coprire l’intera dimensione interna.

int numPhases = (N + TILE - 1) / TILE;

Il ciclo esterno sulle fasi

Racchiuda i passaggi di caricamento, sincronizzazione e calcolo in un ciclo su phase. A ogni iterazione, la finestra del tile avanza lungo la riga di A e la colonna di B.

for (int phase = 0; phase < numPhases; ++phase) {
  // load, sync, compute, sync
}

Accumulo attraverso le fasi

La variabile locale sum si trova al di fuori del ciclo, quindi continua a crescere. Ogni fase aggiunge la propria porzione del prodotto scalare al totale progressivo.

float sum = 0.0f;
for (int phase = 0; phase < numPhases; ++phase) { ... }

Offset del tile per ogni fase

Ogni fase sposta di phase * TILE la colonna letta da A e la riga letta da B. È così che avanza la finestra.

As[ty][tx] = A[row*N + phase*TILE + tx];
Bs[ty][tx] = B[(phase*TILE + ty)*N + col];

Sincronizzarsi dopo il caricamento

Come prima, chiami __syncthreads() dopo i caricamenti, in modo che il tile sia completo prima che qualcuno lo utilizzi per il calcolo.

__syncthreads();

Calcolare la porzione di questa fase

Il ciclo interno aggiunge TILE prodotti a sum, usando solo il tile appena caricato. Contribuisce a una porzione del prodotto scalare finale.

for (int k = 0; k < TILE; ++k)
  sum += As[ty][k] * Bs[k][tx];

La seconda barriera

Concluda ogni fase con un altro __syncthreads(), così nessun thread sovrascrive il tile mentre un thread più lento lo sta ancora leggendo. 🚧

__syncthreads(); // before the next phase loads

Perché servono due sincronizzazioni

Una barriera protegge le letture successive al caricamento, l’altra protegge i caricamenti successivi alle letture. Insieme mantengono ogni thread sincronizzato durante le fasi.

Scrivere la somma finale

Al termine di tutte le fasi, la sum progressiva è il prodotto scalare completo. La memorizzi in C una sola volta, dopo aver verificato i limiti.

if (row < N && col < N)
  C[row*N + col] = sum;

Gestire dimensioni non uniformi

Quando N non è un multiplo esatto di TILE, carichi zero per gli elementi fuori intervallo, così i prodotti aggiuntivi non modificano la somma.

Verifica rapida

Rifletta su dove risiede il totale progressivo durante il ciclo sulle fasi.

Riepilogo

Ha eseguito un ciclo sulle fasi, spostando i tile, sincronizzandosi due volte e accumulando le somme parziali in un unico totale. Ora misurerà quanto è più veloce. 📈

Domande Frequenti

La lezione «Iterare sulle fasi dei tile» è gratuita?

Sì — il testo completo di «Iterare sulle fasi dei tile» è 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 «Iterare sulle fasi dei tile»?

Accumuli somme parziali tra i tile. 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 «Iterare sulle fasi dei tile»?

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 matmul ingenuo
  2. Suddividere il prodotto interno in tile
  3. Iterare sulle fasi dei tile
  4. Misurare l'incremento di velocità
← Torna a CUDA Academy