GPU-Programmierung

Ein Programm, das tausende Male hintereinander sehr kleine Kernel startet, ist langsam. Welche Verbesserung ist am besten geeignet?

  1. ADie Zahl der Starts verringern, z. B. indem mehrere kleine Kernel zu einem zusammengefasst (fusioniert) werden
  2. BZwischen den Kernel-Starts Wartezeiten einfügen
  3. CDie Zahl der Threads pro Block auf 1 setzen
Antwort und Erläuterung anzeigen

Antwort: A. Die Zahl der Starts verringern, z. B. indem mehrere kleine Kernel zu einem zusammengefasst (fusioniert) werden

Ein Kernel-Start kostet durch die Verarbeitung auf der CPU-Seite und die Vorbereitung der GPU eine feste Zeit von einigen Mikrosekunden. Ist der Inhalt des Kernels kürzer, fällt nur noch der Startaufwand ins Gewicht. Werden mehrere Verarbeitungen in einem Kernel zusammengefasst, sinkt die Zahl der Starts, und der Aufwand, Zwischenergebnisse in den Speicher zu schreiben und wieder zu lesen, entfällt. Auch Mechanismen, die eine Folge von Starts gesammelt aufzeichnen und auf einmal absenden (z. B. CUDA Graphs), werden genutzt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Welche Aussage zu Unified Memory von CUDA ist richtig?
  2. Was bestimmt hauptsächlich die Leistung bei der elementweisen Addition zweier großer Arrays auf der GPU (c[i] = a[i] + b[i])?
  3. Was ist der wahrscheinlichste Grund, weshalb bei vielen GPUs für Heimspiele die Rechenleistung in doppelter Genauigkeit (FP64) viel niedriger ist als in einfacher Genauigkeit (FP32), z. B. um ein Vielfaches von zehn?
  4. Welche Aussage zu Tensor Cores (Matrixrecheneinheiten) in neueren GPUs ist richtig?
  5. Warum wird bei gemischter Genauigkeit auf der GPU häufig die Multiplikation in niedriger Genauigkeit wie FP16 und die Aufsummierung (Akkumulation) in FP32 ausgeführt?

Vergleiche zu diesem Thema