13 / 20 · Concept
Découpage en tuiles et remplissage aux limites
Répartissez de grandes matrices sur une grille plus petite et gérez remplissage zéro et masques de sortie.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Découper d’abord l’espace de sortie
Une grille N×N traite un résultat M×P plus grand avec ceil(M/N)×ceil(P/N) tuiles spatiales. Notre base conserve la réduction entière K dans chaque tuile et efface entre les tuiles de sortie. L’enveloppe de commande stocke l’origine r0, c0 ; le PE local (i, j) correspond au C global (r0+i, c0+j). Le décalage dépend des coordonnées locales.
Prenez N=2 et M=P=K=3. Soit A=[[1, 2, 3], [4, 5, 6], [7, 8, 9]] et B=[[1, 0, 2], [0, 1, 0], [2, 0, 1]]. Leur produit est [[7, 2, 5], [16, 5, 14], [25, 8, 23]]. Les quatre origines de tuile sont (0, 0), (0, 2), (2, 0) et (2, 2).
Remplir les opérandes, masquer les écritures
Fournissez les lignes A et les colonnes B hors plage comme des jetons zéro valides. Chaque PE consomme toujours K termes, conservant le contrat simple de fin. Invalider les termes de remplissage peut au contraire laisser certains compteurs sous K indéfiniment. Masquez séparément les écritures de résultats pour empêcher les accès hors de la matrice réelle.
La dernière tuile utilise A=[[7, 8, 9], [0, 0, 0]] et B=[[2, 0], [0, 0], [1, 0]]. Son résultat local est [[23, 0], [0, 0]], mais seule la valeur supérieure gauche peut être écrite dans C(2, 2). Un zéro numérique ne rend pas sûre une adresse hors plage.
Chaque tuile utilise cinq fronts advance, soit vingt pour quatre tuiles séquentielles, hors clear, chargement et transfert de sortie. La grille exécute quarante-huit MAC avec remplissage ; seuls vingt-sept appartiennent au véritable produit 3×3.
Le découpage de réduction exige de conserver les sommes
Découper K nécessite de combiner les sommes partielles d’une même sortie. C(0, 0)=1×1+2×0+3×2=7 se décompose en un et six pour K=2+1. Effacer l’accumulateur final entre ces réductions ne laisse que six. Conservez l’accumulateur ou combinez ailleurs les sommes partielles larges. Quantifier chaque somme partielle avant combinaison peut différer d’une quantification unique de la somme complète.
Le projet final commence par le découpage spatial et K entier. Testez les limites à un élément, les dimensions divisibles par N, une dernière tuile avec une seule sortie réelle, les zéros de remplissage valides et les masques de sortie. Indexez le tableau de suivi de référence par coordonnées globales pour qu’un changement d’ordre des tuiles ne modifie pas le résultat attendu.
Essayez vous-même
Pour la tuile (0, 2) de l’exemple 3×3, donnez le masque de sortie et le résultat local. Quelles sont les sommes partielles de C(0, 2) lorsque K est découpé en 2+1 ?
Lire l’explication
Le résultat local est [[5, 0], [14, 0]] et le masque [[1, 0], [1, 0]]. C(0, 2)=1×2+2×0+3×1 a les sommes partielles deux et trois, totalisant cinq.