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 loadsPerché 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
- Il kernel matmul ingenuo
- Suddividere il prodotto interno in tile
- Iterare sulle fasi dei tile
- Misurare l'incremento di velocità