18 / 24 · Konzept
Kacheln, Randbereiche und Teilsummen
Berechnen Sie für Th=Tw=2,Tc=1,Tm=2, einen 3×3-Kernel, Schrittweite zwei und Dilatation eins die Bytes eines einzelnen Puffers für Eingabe/Gewichte/32-Bit-Summen/Bias.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Tensoren aufteilen, damit sie in den Speicher passen
Wählen Sie Ausgabehöhe Th,Breite Tw,Eingabekanalanzahl Tc und Ausgabekanalanzahl Tm für eine Kachel. Ein Eingaberandbereich reicht über die Ausgabekachel hinaus. Für Schrittweite S,Dilatation D und Kernel R ist die benötigte Eingabehöhe (Th−1)S+(R−1)D+1; wenden Sie das horizontale Gegenstück für die Breite an. Auffüllung an Grenzen kann erzeugt statt geladen werden.
Aufteilung der Eingabekanäle erfordert die Erhaltung jeder Ausgabeteilsumme über alle Kanalkacheln hinweg. Frühzeitige Rundung jeder Kachel verändert die Operation. Addieren Sie Bias einmal in der ersten Kanalkachel und führen Sie dieselbe Summe fort. Eine Änderung der Ausgabekanalkachel verändert auch Gewichte und Biaswerte.
Durchgerechnetes Speicherbudget
Für eine 3×3-Operation mit Schrittweite und Dilatation eins sei Th=Tw=2,Tc=2,Tm=2. Der Randbereich ist 4×4 und benötigt 32 int8-Eingabebytes. Gewichte benötigen 2×2×3×3=36 Bytes. Acht 32-Bit-Teilsummen benötigen 32 Bytes und zwei 32-Bit-Biaswerte acht. Insgesamt:108 Bytes. Skalierungen, Adressen, Gültigkeit und Steuerungsspeicher sind ausgeschlossen und benötigen eine separate Reserve.
Doppelpufferung von Eingabe und Gewichten benötigt 2×(32+36)+32+8=176 Bytes und übersteigt ein 128-Byte-Budget. Tc auf eins zu reduzieren ergibt sechzehn Eingabe- und achtzehn Gewichtsbytes. Der doppelt gepufferte Speicher wird 2×34+32+8=108 Bytes. Erhalten Sie Teilsummen über die beiden Eingabekanalkacheln hinweg. Passende Puffer beweisen nicht, dass Übertragungen und Berechnung überlappen können; prüfen Sie den Ablauf separat.
Schrittweite zwei vergrößert die Eingabespanne derselben 2×2-Ausgabekachel auf 5×5. Benachbarte Kacheln können Randwerte teilen, unabhängiges Nachladen verdoppelt aber weiterhin Verkehr. Unterscheiden Sie eindeutige Tensorbytes als Untergrenze von tatsächlichen Kachelübertragungen.
Bei M=5 und Tm=2 enthält die letzte Kachel einen gültigen Ausgabekanal. Maskieren Sie den zusätzlichen Gewichts- und Ausgabezugriff. Wenden Sie entsprechende Masken auf letzte Raum- und Eingabekanalkacheln an. Die NVIDIA-CUTLASS-Dokumentation beschreibt einen realen impliziten GEMM-Ansatz, der Kacheln ohne vollständig erweiterte Matrix erzeugt. Hier berechnen wir Speicher und Teilsummen, statt diese CUDA-Implementierung auszuführen.
Selbst ausprobieren
Berechnen Sie für Th=Tw=2,Tc=1,Tm=2, einen 3×3-Kernel, Schrittweite zwei und Dilatation eins die Bytes eines einzelnen Puffers für Eingabe/Gewichte/32-Bit-Summen/Bias.
Erklärung lesen
Die 5×5-Eingabe benötigt 25 Bytes. Ergänzen Sie achtzehn Gewichtsbytes,32 Summenbytes und acht Biasbytes:83 Bytes ohne Steuerung und Skalierungen.