GPU-Programmierung

Welche Funktion hat __syncthreads() in CUDA?

  1. AEs lässt alle Threads der GPU über Blockgrenzen hinweg aufeinander warten
  2. BEs lässt alle Threads desselben Blocks an dieser Stelle aufeinander warten und macht die bis dahin erfolgten Schreibzugriffe auf den Shared Memory sichtbar
  3. CEs gleicht die Uhren von CPU und GPU ab
Antwort und Erläuterung anzeigen

Antwort: B. Es lässt alle Threads desselben Blocks an dieser Stelle aufeinander warten und macht die bis dahin erfolgten Schreibzugriffe auf den Shared Memory sichtbar

Bei Verarbeitungen mit Shared Memory muss ein von einem Thread geschriebener Wert fertig geschrieben sein, bevor ihn ein anderer Thread liest. __syncthreads() lässt warten, bis alle Threads des Blocks hier angekommen sind, und garantiert so z. B. die Reihenfolge, dass alle erst die Daten in den Shared Memory geladen haben, bevor die Berechnung beginnt. Aufeinander warten lassen sich nur Threads desselben Blocks.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. In CUDA wurde __syncthreads() innerhalb von „if (threadIdx.x < 16)“ geschrieben, sodass nur ein Teil der Threads es durchläuft. Was kann geschehen?
  2. Welche Aussage zum Bank Conflict im Shared Memory von CUDA ist richtig?
  3. 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?
  4. Warum wird beim Berechnen eines großen Matrixprodukts auf der GPU die Matrix in kleine Tiles unterteilt und in den Shared Memory geladen?
  5. Was kann in einem GPU-Kernel geschehen, wenn jeder Thread zu viele Register verwendet?

Vergleiche zu diesem Thema