13 / 20 · Concetto
Suddivisione in blocchi e riempimento ai confini
Associa matrici più grandi a una griglia più piccola e gestisci riempimento con zeri e maschere di uscita.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Suddividi prima lo spazio di uscita
Una griglia N×N gestisce un risultato M×P più grande usando ceil(M/N)×ceil(P/N) blocchi spaziali. La configurazione di base mantiene l'intera riduzione K in ciascun blocco e azzera tra i blocchi di uscita. Il wrapper memorizza l'origine del blocco r0,c0; il PE locale (i,j) corrisponde al C globale (r0+i,c0+j). Lo sfasamento dipende dalle coordinate locali.
Prendi N=2 e M=P=K=3. Siano A=[[1,2,3],[4,5,6],[7,8,9]] e B=[[1,0,2],[0,1,0],[2,0,1]]. Il loro prodotto è [[7,2,5],[16,5,14],[25,8,23]]. Le quattro origini dei blocchi sono (0,0), (0,2), (2,0) e (2,2).
Riempi gli operandi, maschera le scritture
Fornisci le righe A e le colonne B fuori intervallo come token zero validi. Ogni PE consuma ancora K termini, conservando il semplice contratto di completamento. Rendere invece non validi i termini di riempimento può lasciare alcuni conteggi sotto K per sempre. Maschera separatamente le scritture dei risultati per impedire scritture fuori dalla matrice reale.
Il blocco finale usa A=[[7,8,9],[0,0,0]] e B=[[2,0],[0,0],[1,0]]. Il risultato locale è [[23,0],[0,0]], ma soltanto il valore in alto a sinistra può essere scritto in C(2,2). Uno zero numerico non rende sicuro un indirizzo fuori intervallo.
Ogni blocco usa cinque fronti di avanzamento, per un totale di venti su quattro blocchi sequenziali, escludendo clear, caricamento e trasferimento di uscita. La griglia esegue quarantotto MAC con riempimento; soltanto ventisette appartengono al vero prodotto 3×3.
Suddividere la riduzione richiede somme conservate
Suddividere K richiede di combinare somme parziali per la stessa uscita. C(0,0)=1×1+2×0+3×2=7 si divide nei parziali uno e sei per K=2+1. Azzerare l'accumulatore finale tra quelle riduzioni lascia soltanto sei. Mantieni l'accumulatore oppure combina altrove somme parziali estese. Quantizzare ogni parziale prima della combinazione può differire dal quantizzare una sola volta la somma completa.
Il progetto finale inizia con blocchi spaziali e K completo. Prova confini con un solo elemento, dimensioni divisibili per N, un blocco finale con una sola uscita reale, zeri validi di riempimento e maschere di uscita. Usa le coordinate globali come chiave dello scoreboard di riferimento affinché cambiare l'ordine dei blocchi non cambi il risultato atteso.
Prova tu
Per il blocco (0,2) nell'esempio 3×3, indica maschera di uscita e risultato locale. Quali sono le somme parziali di C(0,2) quando K si divide in 2+1?
Leggi la spiegazione
Il risultato locale è [[5,0],[14,0]] e la maschera [[1,0],[1,0]]. C(0,2)=1×2+2×0+3×1 ha somme parziali due e tre, per un totale di cinque.