Как выбрать между std :: Reduce и STD :: накопить? - PullRequest
8 голосов
/ 22 января 2020

std::accumulate и std::reduce делает почти то же самое.

Сводная информация о std::reduce говорит само за себя:

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

Во многих случаях эти функции должны давать одинаковый конечный результат и демонстрировать одинаковую общую функциональность. Очевидно, что если у вас есть вычисления с очень большой нагрузкой, et c. Вы можете поэкспериментировать с std::reduce для паррелизации. Ie. каково здесь общепринятое мнение с точки зрения птиц - следует ли вам всегда придерживаться тупого std:: накапливать, если не выполняется явная оптимизация? или просто по умолчанию использовать std::reduce?

Если std::reduce (с выбранной по умолчанию / не выбрана политика выполнения) всегда, по крайней мере, так же быстро, как std::accumulate (сохранить несколько инструкций), то я думаю, что накопление должно использоваться только при строгом заказе.

1 Ответ

7 голосов
/ 22 января 2020

Да, я всегда буду использовать std::reduce, если вы не знаете, что вам нужна гарантия от std::accumulate. Это дает компилятору большую свободу для оптимизации, и в худшем случае идентичен в любом случае.

...