GPU-Programmierung

Warum wird beim Berechnen eines großen Matrixprodukts auf der GPU die Matrix in kleine Tiles unterteilt und in den Shared Memory geladen?

  1. AUm aus dem Global Memory gelesene Daten im Shared Memory mehrfach wiederzuverwenden und die Zahl der Zugriffe auf den langsamen Speicher zu verringern
  2. BUm die Werte der Matrix zu verkleinern und Überlauf zu verhindern
  3. CUm die Zahl der Berechnungen zu verringern und das Ergebnis zu approximieren
Antwort und Erläuterung anzeigen

Antwort: A. Um aus dem Global Memory gelesene Daten im Shared Memory mehrfach wiederzuverwenden und die Zahl der Zugriffe auf den langsamen Speicher zu verringern

Beim Matrixprodukt gehen dieselben Elemente mehrfach in die Berechnung ein. Bei naiver Implementierung liest jeder Thread jedes Mal erneut aus dem Global Memory, und die Speicherbandbreite reicht nicht aus. Werden Tiles in den Shared Memory geladen, können alle Threads des Blocks das Tile mehrfach nutzen, sodass sich die aus dem Global Memory gelesene Menge proportional zur Tile-Größe verringert. Es ist derselbe Gedanke wie das Blocking bei Caches der CPU.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Was kann in einem GPU-Kernel geschehen, wenn jeder Thread zu viele Register verwendet?
  2. Welche Aussage zur Auslastung (Occupancy) der GPU ist richtig?
  3. Wie verbirgt die GPU hauptsächlich lange Speicherlatenzen (einige hundert Takte)?
  4. Welche Aussage zur Occupancy der GPU ist richtig?
  5. Welche Aussage zum Verhältnis von Block und SM (Streaming Multiprocessor) in CUDA ist richtig?

Vergleiche zu diesem Thema