GPU-Programmierung
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)?
- AWeil die Zahl der Additionen gegenüber einem einzelnen, der Reihe nach addierenden Thread stark sinkt
- BWeil in jeder Stufe viele Threads gleichzeitig addieren können und n Werte in log2 n Stufen summiert werden
- CWeil der Gleitkommafehler stets 0 wird
Antwort und Erläuterung anzeigen
Antwort: B. Weil in jeder Stufe viele Threads gleichzeitig addieren können und n Werte in log2 n Stufen summiert werden
Addiert ein einzelner Thread der Reihe nach, sind n-1 Schritte nötig; in Baumform addieren in der ersten Stufe n/2 Threads benachbarte Werte, in der zweiten n/4 usw., und nach log2 n Stufen ist die Summe fertig. Die Gesamtzahl der Additionen bleibt gleich, doch wegen der wenigen Stufen lässt sich parallel schnell rechnen. Innerhalb eines Blocks wird stufenweise im Shared Memory gerechnet, und die Ergebnisse der Blöcke werden zum Schluss zusammengefasst.