18#include <hibf/misc/divide_and_ceil.hpp>
23template <
typename algorithm_t>
24void do_parallel(algorithm_t && worker,
size_t const num_records,
size_t const threads)
26 size_t const chunk_size = seqan::hibf::divide_and_ceil(num_records, threads * threads);
27 size_t const number_of_chunks = seqan::hibf::divide_and_ceil(num_records, chunk_size);
29#pragma omp parallel for schedule(dynamic) num_threads(threads)
30 for (
size_t i = 0; i < number_of_chunks; ++i)
32 size_t const start = chunk_size * i;
33 size_t const extent = i == (number_of_chunks - 1) ? num_records - i * chunk_size : chunk_size;
38template <
typename algorithm_t>
39void do_parallel(algorithm_t && worker,
size_t const num_records,
size_t const threads,
bool const output_results)
42 size_t const records_per_thread = num_records / threads;
44 for (
size_t i = 0; i < threads; ++i)
46 size_t const start = records_per_thread * i;
47 size_t const extent = i == (threads - 1) ? num_records - i * records_per_thread : records_per_thread;
48 tasks.emplace_back(
std::async(std::launch::async, worker, start, extent, output_results));
51 for (
auto && task : tasks)