13 / 20 · Konzept
Kachelung und Auffüllen an Grenzen
Bilden Sie größere Matrizen auf ein kleineres Gitter ab und behandeln Sie Nullauffüllung und Ausgabemasken.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Zuerst den Ausgaberaum kacheln
Ein N×N-Gitter verarbeitet ein größeres M×P-Ergebnis mit ceil(M/N)×ceil(P/N) räumlichen Kacheln. Unsere Grundvariante hält die gesamte Reduktion K innerhalb jeder Kachel und löscht zwischen Ausgabekacheln. Die Hülle speichert den Kachelursprung r0,c0; das lokale PE(i,j) entspricht dem globalen C(r0+i,c0+j). Der Versatz hängt von lokalen Koordinaten ab.
Wählen Sie N=2 und M=P=K=3. Es seien A=[[1,2,3],[4,5,6],[7,8,9]] und B=[[1,0,2],[0,1,0],[2,0,1]]. Ihr Produkt lautet [[7,2,5],[16,5,14],[25,8,23]]. Die vier Kachelursprünge sind (0,0), (0,2), (2,0) und (2,2).
Operanden auffüllen, Schreibzugriffe maskieren
Liefern Sie A-Zeilen und B-Spalten außerhalb des Bereichs als gültige Nulltokens. Jedes PE verarbeitet weiterhin K Terme und erhält damit die einfachen Abschlussregeln. Werden aufgefüllte Terme stattdessen ungültig gemacht, können einige Zähler für immer unter K bleiben. Maskieren Sie Ergebnisschreibzugriffe separat, um Schreiben außerhalb der echten Matrix zu verhindern.
Die letzte Kachel verwendet A=[[7,8,9],[0,0,0]] und B=[[2,0],[0,0],[1,0]]. Ihr lokales Ergebnis ist [[23,0],[0,0]], aber nur der Wert oben links darf nach C(2,2) geschrieben werden. Eine numerische Null macht eine Adresse außerhalb des Bereichs nicht sicher.
Jede Kachel nutzt fünf advance-Flanken, insgesamt zwanzig für vier aufeinanderfolgende Kacheln, ohne Löschen, Laden und Ausgabeübertragung. Das Gitter führt achtundvierzig MACs mit Auffüllung aus; nur siebenundzwanzig gehören zum echten 3×3-Produkt.
Reduktionskachelung benötigt erhaltene Summen
Die Aufteilung von K erfordert das Zusammenführen von Teilsummen derselben Ausgabe. C(0,0)=1×1+2×0+3×2=7 zerfällt bei K=2+1 in die Teilsummen eins und sechs. Wird der endgültige Akkumulator zwischen diesen Reduktionen gelöscht, bleibt nur sechs. Erhalten Sie den Akkumulator oder kombinieren Sie breite Teilsummen anderswo. Die Quantisierung jedes Teils vor dem Kombinieren kann von der einmaligen Quantisierung der vollständigen Summe abweichen.
Das Abschlussprojekt beginnt mit räumlicher Kachelung und vollständigem K. Testen Sie Grenzen mit einem Element, durch N teilbare Dimensionen, eine letzte Kachel mit einer echten Ausgabe, gültige aufgefüllte Nullen und Ausgabemasken. Verwenden Sie globale Koordinaten als Schlüssel des Referenz-Scoreboards, damit eine veränderte Kachelreihenfolge das erwartete Ergebnis nicht verändern kann.
Selbst ausprobieren
Geben Sie für die Kachel (0,2) im 3×3-Beispiel Ausgabemaske und lokales Ergebnis an. Welche Teilsummen hat C(0,2), wenn K in 2+1 zerlegt wird?
Erklärung lesen
Das lokale Ergebnis ist [[5,0],[14,0]] und die Maske [[1,0],[1,0]]. C(0,2)=1×2+2×0+3×1 hat die Teilsummen zwei und drei, insgesamt fünf.