GPU-Programmierung

Welche Aussage zum Bank Conflict im Shared Memory von CUDA ist richtig?

  1. AEin Problem, wenn zwei GPUs dasselbe Bankkonto verwenden
  2. BEin Problem, bei dem die Kapazität des Shared Memory nicht ausreicht und das Programm anhält
  3. CDer Shared Memory ist in 32 Bänke unterteilt; greifen mehrere Threads eines Warps gleichzeitig auf unterschiedliche Adressen in derselben Bank zu, werden die Zugriffe nacheinander ausgeführt und verlangsamt
Antwort und Erläuterung anzeigen

Antwort: C. Der Shared Memory ist in 32 Bänke unterteilt; greifen mehrere Threads eines Warps gleichzeitig auf unterschiedliche Adressen in derselben Bank zu, werden die Zugriffe nacheinander ausgeführt und verlangsamt

Der Shared Memory besteht aus 32 Bänken, denen je 4 Byte der Reihe nach zugewiesen sind, und jede Bank kann pro Zugriff nur eine Adresse lesen oder schreiben. Verwenden die 32 Threads eines Warps verschiedene Bänke, genügt ein Zugriff, nutzen zwei Threads dieselbe Bank mit unterschiedlichen Adressen, zerfällt er in zwei Zugriffe. Wird z. B. in Abständen von 32 Elementen gelesen, treffen alle auf dieselbe Bank, und der Zugriff zerfällt in 32. Lesen alle dieselbe Adresse, wird sie an alle gleichzeitig verteilt, und es gibt keinen Konflikt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Eine 32×32-float-Tabelle liegt im Shared Memory, und die 32 Threads eines Warps lesen in Spaltenrichtung (vertikal), wodurch Bank Conflicts entstehen. Welche Gegenmaßnahme ist üblich?
  2. Warum wird beim Berechnen eines großen Matrixprodukts auf der GPU die Matrix in kleine Tiles unterteilt und in den Shared Memory geladen?
  3. Was kann in einem GPU-Kernel geschehen, wenn jeder Thread zu viele Register verwendet?
  4. Welche Aussage zur Auslastung (Occupancy) der GPU ist richtig?
  5. Wie verbirgt die GPU hauptsächlich lange Speicherlatenzen (einige hundert Takte)?

Vergleiche zu diesem Thema