CUDA Academy · Lektion

Über die Kachelphasen iterieren

Akkumulieren Sie Teilsummen über mehrere Kacheln hinweg.

Lektion 3 von 413 Schritte

Über die Kachelphasen iterieren ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CUDA Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Skalarprodukt wird aufgeteilt

Eine vollständige Zeile mal eine vollständige Spalte ist zu groß für ein Tile. Daher teilen Sie die lange Summe in Abschnitte der Breite TILE auf – einen Abschnitt pro Phase.

Die Phasen zählen

Sind die Matrizen N Elemente breit und die Tiles TILE Elemente breit, benötigen Sie N / TILE Phasen, um die gesamte innere Dimension abzudecken.

int numPhases = (N + TILE - 1) / TILE;

Die äußere Phasenschleife

Fassen Sie die Schritte Laden, Synchronisieren und Berechnen in einer Schleife über phase zusammen. Jeder Durchlauf verschiebt das Tile-Fenster weiter entlang der Zeile von A und der Spalte von B.

for (int phase = 0; phase < numPhases; ++phase) {
  // load, sync, compute, sync
}

Über die Phasen hinweg akkumulieren

Die lokale Variable sum befindet sich außerhalb der Schleife und wächst daher weiter. Jede Phase addiert ihren Anteil am Skalarprodukt zur laufenden Summe.

float sum = 0.0f;
for (int phase = 0; phase < numPhases; ++phase) { ... }

Tile-Offset pro Phase

Jede Phase verschiebt die aus A gelesene Spalte und die aus B gelesene Zeile um phase * TILE. So bewegt sich das Fenster weiter.

As[ty][tx] = A[row*N + phase*TILE + tx];
Bs[ty][tx] = B[(phase*TILE + ty)*N + col];

Nach dem Laden synchronisieren

Rufen Sie wie zuvor nach dem Laden __syncthreads() auf, damit das Tile vollständig ist, bevor jemand damit rechnet.

__syncthreads();

Den Anteil dieser Phase berechnen

Die innere Schleife addiert TILE Produkte zu sum und verwendet dabei ausschließlich das frisch geladene Tile. Sie liefert einen Abschnitt des endgültigen Skalarprodukts.

for (int k = 0; k < TILE; ++k)
  sum += As[ty][k] * Bs[k][tx];

Die zweite Synchronisationsbarriere

Beenden Sie jede Phase mit einem weiteren __syncthreads(), damit kein Thread das Tile überschreibt, während ein langsamerer Thread noch daraus liest. 🚧

__syncthreads(); // before the next phase loads

Warum zwei Synchronisationen wichtig sind

Eine Barriere schützt Lesezugriffe nach dem Laden, die andere schützt Ladevorgänge nach dem Lesen. Gemeinsam halten sie jeden Thread über die Phasen hinweg im Gleichschritt.

Die endgültige Summe schreiben

Nach Abschluss aller Phasen ist die laufende sum das vollständige Skalarprodukt. Speichern Sie sie genau einmal in C und sichern Sie den Zugriff durch eine Bereichsprüfung ab.

if (row < N && col < N)
  C[row*N + col] = sum;

Nicht passenden Größen begegnen

Wenn N kein ganzzahliges Vielfaches von TILE ist, laden Sie für Elemente außerhalb des gültigen Bereichs zero, damit die zusätzlichen Produkte nichts zur Summe beitragen.

Kurze Überprüfung

Überlegen Sie, wo die laufende Summe während der Phasenschleife gespeichert wird.

Zusammenfassung

Sie haben über phases iteriert, Tiles verschoben, zweimal synchronisiert und Teilsummen zu einer Gesamtsumme akkumuliert. Nun messen wir, wie viel schneller das ist. 📈

Kostenlos starten

Lerne C++ mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Über die Kachelphasen iterieren“ kostenlos?

Ja — der vollständige Text von „Über die Kachelphasen iterieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CUDA Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Über die Kachelphasen iterieren“?

Akkumulieren Sie Teilsummen über mehrere Kacheln hinweg. Du übst CUDA Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CUDA Academy zu starten?

Keine Vorkenntnisse erforderlich. CUDA Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Über die Kachelphasen iterieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CUDA Academy-Lektion Code schreiben und ausführen?

Ja. Jede CUDA Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Der naive Matmul-Kernel
  2. Das Skalarprodukt kacheln
  3. Über die Kachelphasen iterieren
  4. Die Beschleunigung messen
← Zurück zu CUDA Academy