GPU-Programmierung

Bei der Summierung derselben Gleitkommadaten auf der GPU unterschied sich die letzte Stelle des Ergebnisses bei jeder Ausführung geringfügig. Was ist die wahrscheinlichste Ursache?

  1. AWeil die Recheneinheiten der GPU defekt sind
  2. BWeil die Daten innerhalb der GPU jedes Mal überschrieben werden
  3. CWeil sich z. B. bei atomaren Operationen die Reihenfolge der Addition von Ausführung zu Ausführung ändert und bei Gleitkommaaddition die Rundung von der Reihenfolge abhängt
Antwort und Erläuterung anzeigen

Antwort: C. Weil sich z. B. bei atomaren Operationen die Reihenfolge der Addition von Ausführung zu Ausführung ändert und bei Gleitkommaaddition die Rundung von der Reihenfolge abhängt

Bei Gleitkommaadditionen wird jedes Mal gerundet, sodass (a+b)+c und a+(b+c) geringfügig verschiedene Ergebnisse haben können. Bei einer parallelen Summe hängt es von der Ausführungsreihenfolge der Threads und der Ankunftsreihenfolge atomarer Operationen ab, welche Werte in welcher Reihenfolge addiert werden. Dadurch ändert sich die letzte Stelle von Ausführung zu Ausführung. Soll das Ergebnis immer gleich sein, wird eine Reduktion mit fester Additionsreihenfolge verwendet.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Was ist ein üblicher Richtwert für die Zahl der Threads pro Block in CUDA?
  2. Welchen Vorteil hat es, einen Kernel wie oben mit einer Schleife (Grid-Stride-Loop) zu schreiben?
  3. Bei welchem Zugriff arbeitet der Constant Memory von CUDA besonders schnell?
  4. Welche Aussage zu den Caches der GPU im Vergleich zur CPU ist im Allgemeinen richtig?
  5. Welches ist ein Beispiel für einen Programmiermechanismus für paralleles Rechnen auf GPUs usw., der auch auf anderen GPUs als denen von NVIDIA verwendet werden kann?

Vergleiche zu diesem Thema