hpx::future<void> measure_task_foreach(std::size_t size) { boost::shared_ptr<std::vector<std::size_t> > data_representation( boost::make_shared<std::vector<std::size_t> >(size)); std::iota(boost::begin(*data_representation), boost::end(*data_representation), std::rand()); // invoke parallel for_each return hpx::parallel::for_each( hpx::parallel::par(hpx::parallel::task, chunk_size), boost::begin(*data_representation), boost::end(*data_representation), [](std::size_t) { worker_timed(delay); } ).then( [data_representation](hpx::future<void>) {} ); }
void measure_parallel_foreach(std::size_t size) { std::vector<std::size_t> data_representation(size); std::iota(boost::begin(data_representation), boost::end(data_representation), std::rand()); // create executor parameters object hpx::parallel::static_chunk_size cs(chunk_size); // invoke parallel for_each hpx::parallel::for_each(hpx::parallel::par.with(cs), boost::begin(data_representation), boost::end(data_representation), [](std::size_t d) { d=d+1; }); hpx::parallel::for_each(hpx::parallel::par.with(cs), boost::begin(data_representation), boost::end(data_representation), [](std::size_t d) { for(int i=0; i<10000; ++i) { d=d*2; d=d-2;} }); hpx::parallel::for_each(hpx::parallel::par.with(cs), boost::begin(data_representation), boost::end(data_representation), [](std::size_t d) { d=d+1; for(int i=0; i<1000000000; ++i) { d=d*2; d=d-2;} }); }
hpx::future<void> measure_task_foreach(std::size_t size) { std::shared_ptr<std::vector<std::size_t> > data_representation( std::make_shared<std::vector<std::size_t> >(size)); std::iota(boost::begin(*data_representation), boost::end(*data_representation), std::rand()); // create executor parameters object hpx::parallel::static_chunk_size cs(chunk_size); // invoke parallel for_each return hpx::parallel::for_each( hpx::parallel::par(hpx::parallel::task).with(cs), boost::begin(*data_representation), boost::end(*data_representation), [](std::size_t) { worker_timed(delay); } ).then( [data_representation](hpx::future<void>) {} ); }