Wie wähle ich zwischen std :: redu und std :: accumulate?


8

std::accumulateund std::reducemacht fast das gleiche.

Zusammenfassung von std::reducesagt alles:

similar to `std::accumulate`, except out of order 

In vielen Fällen sollten diese Funktionen das gleiche Endergebnis liefern und die gleiche Gesamtfunktionalität aufweisen. Es ist offensichtlich, dass Sie mit einer sehr hohen Lastberechnung usw. experimentieren können, std::reduceum eine Parrelisierung durchzuführen. Dh. Was ist die konventionelle Weisheit hier aus der Vogelperspektive - sollten Sie sich immer an die stumpfe std :: accumulate halten, wenn Sie nicht explizit optimieren? oder sollte nur standardmäßig verwendet werden std::reduce?

Wenn std::reduce(mit Standard / keine Ausführungsrichtlinie gewählt) immer mindestens so schnell ist wie std::accumulate(außer ein paar Anweisungen), dann sollte Akkumulieren meiner Meinung nach nur verwendet werden, wenn die Reihenfolge streng ist.

Antworten:


7

Ja, ich würde immer verwenden, es std::reducesei denn, Sie wissen, dass Sie die Garantie für die Bestellung von benötigen std::accumulate. Dies gibt dem Compiler mehr Freiheit bei der Optimierung und ist im schlimmsten Fall sowieso identisch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.