memesearch
C++17 accumulate versus reduce

C++17 accumulate versus reduce

Download Find similar pictures
Text on the meme
C++17: accumulate() versus reduce() std::vector<long> coll; for (long long i=0; i < 1'000; ++i) { // coll: 1 2 3 4 1 2 3 4 1 2 ... coll.insert(coll.end(), {1, 2, 3, 4}); } auto squaredSum = [](auto sum, auto val) { return sum + val * val; }; Note: 1*1 + 2*2 + 3*3 + 4*4 is 30 // use accumulate(): auto sum = std::accumulate(coll.begin(), coll.end(), 0LL, squaredSum); std::cout << "accumulate(): " << sum << '\n'; // 30000 // use reduce(): sum = std::reduce(std::execution::par, coll.begin(), coll.end(), 0LL, squaredSum); std::cout << "reduce(): " << sum << '\n'; // OOPS: 30000 or 28316430 or 900000000
What it means

A C++17 presentation slide compares `std::accumulate()` with parallel `std::reduce()` while summing squared values. The joke is that `accumulate()` gives the expected 30000, but `reduce()` may produce wildly different results because parallel reduction can combine values in an unspecified order and the operation is not safely associative. EN: A C++17 presentation slide compares `std::accumulate()` with parallel `std::reduce()` while summing squared values. The joke is that `accumulate()` gives the expected 30000, but `reduce()` may produce wildly different results because parallel reduction can combine values in an unspecified order and the operation is not safely associative.

Objects
Tags
Source
Type
image
Size
800×600 · 48.0 KiB
Mood
ironic, educational
Language
en
Added