43 std::vector<double> v(1<<30, 0.5);
47 return std::reduce(std::execution::seq, v.begin(), v.end(), 0.0);
52 return std::accumulate(v.begin(), v.end(), 0.0);
57 return std::reduce(std::execution::seq, v.begin(), v.end(), 0.0);
62 return std::reduce(std::execution::par, v.begin(), v.end(), 0.0);
67 return std::reduce(std::execution::par_unseq, v.begin(), v.end(), 0.0);
72 auto res = std::find(std::execution::seq, std::begin(v), std::end(v), 0.6);
73 return res == std::end(v) ? 0.0 : 1.0;
78 auto res = std::find(std::execution::par, std::begin(v), std::end(v), 0.6);
79 return res == std::end(v) ? 0.0 : 1.0;
82 cout <<
"------------------------------------------------\n";
83 const size_t VecSize=10*20000000;
84 cout <<
"N = " << VecSize << endl;
85 vector<double> vec(VecSize);
86 iota(begin(vec),end(vec),0.1);
88 vector<double> out(VecSize);
90 auto heavy_fkt = [](
double a){
return std::sin(a)*std::cos(a);};
91 auto light_fkt = [](
double a){
return 1.0/a;};
94 RunAndMeasure(
"heavy std::transform seq", [&vec, &out, heavy_fkt]
96 auto res = std::transform(std::execution::seq, cbegin(vec), cend(vec), begin(out),
100 return res == std::end(vec) ? 0.0 : 1.0;
103 RunAndMeasure(
"heavy std::transform par", [&vec, &out, heavy_fkt]
105 auto res = std::transform(std::execution::par, cbegin(vec), cend(vec), begin(out),
108 return res == std::end(vec) ? 0.0 : 1.0;
112 RunAndMeasure(
"light std::transform seq", [&vec, &out, light_fkt]
114 auto res = std::transform(std::execution::seq, cbegin(vec), cend(vec), begin(out),
117 return res == std::end(vec) ? 0.0 : 1.0;
120 RunAndMeasure(
"light std::transform par", [&vec, &out, light_fkt]
122 auto res = std::transform(std::execution::par, cbegin(vec), cend(vec), begin(out),
125 return res == std::end(vec) ? 0.0 : 1.0;
void RunAndMeasure(const char *title, TFunc func)