17 template <
typename algorithm_t>
18 void do_parallel(algorithm_t && worker,
size_t const num_records,
size_t const threads,
double & compute_time)
20 auto start = std::chrono::high_resolution_clock::now();
21 std::vector<decltype(std::async(std::launch::async, worker,
size_t{},
size_t{}))> tasks;
22 size_t const records_per_thread = num_records / threads;
24 for (
size_t i = 0; i < threads; ++i)
26 size_t const start = records_per_thread * i;
27 size_t const end = i == (threads - 1) ? num_records : records_per_thread * (i + 1);
28 tasks.emplace_back(std::async(std::launch::async, worker, start, end));
31 for (
auto && task : tasks)
34 auto end = std::chrono::high_resolution_clock::now();
35 compute_time += std::chrono::duration_cast<std::chrono::duration<double>>(end - start).count();
Definition: adjust_seed.hpp:13
void do_parallel(algorithm_t &&worker, size_t const num_records, size_t const threads, double &compute_time)
Definition: do_parallel.hpp:18