0Pricing
CUDA Academy · Lektion

Das Skalarprodukt kacheln

Laden Sie pro Phase Teilkacheln von A und B.

Das Skalarprodukt kacheln ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Die Idee hinter Tiling

Tiling zerlegt die Matrizen in kleine quadratische Tiles, die in den schnellen On-Chip-Speicher passen. Die Threads laden ein Tile gemeinsam einmal und verwenden es anschließend vielfach.

Warum Shared Memory

Ein Tile liegt im __shared__-Speicher und ist für jeden Thread im Block sichtbar. Das Lesen daraus ist deutlich schneller, als immer wieder auf den globalen Speicher zuzugreifen. ⚡

__shared__ float As[TILE][TILE];
__shared__ float Bs[TILE][TILE];

Ein Block, ein Ausgabe-Tile

Jeder Block ist für einen TILE-mal-TILE großen Ausschnitt der Ausgabe C zuständig. Seine Threads berechnen diesen gesamten Ausschnitt gemeinsam.

Die Tile-Größe entspricht der Blockgröße

Sie wählen TILE gleich der Breite des Blocks, häufig 16 oder 32. Dadurch lädt jeder Thread genau ein Element jedes Tiles.

#define TILE 16
dim3 threads(TILE, TILE);

Thread und Tile-Position zuordnen

Innerhalb des Tiles ist die Position eines Threads einfach sein threadIdx. Seine globale Zeile und Spalte ergeben sich weiterhin aus den Block- und Thread-Indizes.

int ty = threadIdx.y, tx = threadIdx.x;
int row = blockIdx.y*TILE + ty;
int col = blockIdx.x*TILE + tx;

Ein Tile von A laden

Jeder Thread kopiert ein Element des aktuellen Tiles von A in den Shared Memory. Gemeinsam lädt der Block so einen vollständigen TILE-mal-TILE großen Block von A.

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

Ein Tile von B laden

Gleichzeitig lädt jeder Thread ein Element des Tiles von B. Nun liegen beide Tiles auf dem Chip und sind für schnelle wiederholte Lesezugriffe bereit.

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

Vor der Berechnung synchronisieren

Rufen Sie __syncthreads() auf, damit alle Threads das Laden beendet haben, bevor jemand das Tile liest. Wird dies übersprungen, entstehen falsche Ergebnisse.

__syncthreads();

Mit dem Tile berechnen

Nun führt jeder Thread eine kurze Schleife über das Tile aus und liest dabei ausschließlich aus dem Shared Memory. Diese Lesezugriffe sind wesentlich günstiger als Zugriffe auf den globalen Speicher.

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

Der Nutzen der Wiederverwendung

Jeder geladene Wert wird von TILE Threads statt nur von einem verwendet. Diese Datenwiederverwendung ist der Grund, warum Tiling bei matmul so schnell ist.

Ein Tile reicht nicht aus

Ein einzelnes Tile deckt nur einen Teil des Skalarprodukts ab. Sie wiederholen die Schritte Laden, Synchronisieren und Berechnen über viele Phasen; darum geht es in der nächsten Lektion.

Kurze Überprüfung

Rufen Sie sich die Reihenfolge der Schritte beim Arbeiten mit einem Shared-Memory-Tile ins Gedächtnis.

Zusammenfassung

Sie haben Tiles von A und B in den Shared Memory geladen, synchronisiert und anschließend mit günstigen On-Chip-Lesezugriffen berechnet. Die Wiederverwendung ist der entscheidende Vorteil. Als Nächstes folgen die Phasen. 🧱

Häufig gestellte Fragen

Ist die Lektion „Das Skalarprodukt kacheln“ kostenlos?

Ja — der vollständige Text von „Das Skalarprodukt kacheln“ 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 „Das Skalarprodukt kacheln“?

Laden Sie pro Phase Teilkacheln von A und B. 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 2 von 4.

Wie lange dauert die Lektion „Das Skalarprodukt kacheln“?

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