GPU-Programmierung

Welche Aussage zum Verhältnis von Block und SM (Streaming Multiprocessor) in CUDA ist richtig?

  1. ADie Threads eines Blocks werden auf alle SMs verteilt ausgeführt
  2. BDie Zahl der SMs und die Zahl der Blöcke müssen stets gleich sein
  3. CJeder Block wird einem SM zugewiesen und dort bis zum Ende ausgeführt; auf einem SM können mehrere Blöcke gleichzeitig platziert sein
Antwort und Erläuterung anzeigen

Antwort: C. Jeder Block wird einem SM zugewiesen und dort bis zum Ende ausgeführt; auf einem SM können mehrere Blöcke gleichzeitig platziert sein

Die GPU besitzt viele SMs und weist die Blöcke des Kernels der Reihe nach freien SMs zu. Ein Block wird auf einem SM ausgeführt, sodass die Threads des Blocks den Shared Memory dieses SM nutzen und sich synchronisieren können. Ist die Zahl der Blöcke deutlich größer als die Zahl der SMs, erhalten bei unterschiedlich großen GPUs alle SMs Arbeit, und einem fertigen SM wird der nächste Block zugewiesen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. In CUDA soll mitten im Kernel gewartet werden, bis die Berechnung aller anderen Blöcke abgeschlossen ist, bevor die nächste Phase beginnt. Welche Methode ist üblich?
  2. Beim Erstellen eines Histogramms von Pixelwerten auf der GPU kann es langsam sein, wenn alle Threads direkt mit atomicAdd auf die 256 Bins im Global Memory addieren. Welche Verbesserung ist richtig?
  3. Warum wird beim Berechnen der Summe vieler Werte auf der GPU eine baumförmige Reduktion verwendet (wiederholtes Addieren benachbarter Werte, wobei sich die Zahl halbiert)?
  4. Wie viele Stufen sind nötig, wenn 1024 Werte mit einer baumförmigen Reduktion summiert werden?
  5. Was gilt im Allgemeinen für CPU-seitigen und GPU-seitigen Speicher bei einem Programm, das eine einzelne diskrete GPU nutzt?

Vergleiche zu diesem Thema