Raptor 4.0.0-rc.1
A fast and space-efficient pre-filter
Loading...
Searching...
No Matches
do_parallel.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2026 Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2026 Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
12#include <algorithm>
13#include <functional>
14#include <omp.h>
15#include <vector>
16
17#include <hibf/misc/divide_and_ceil.hpp>
18
19namespace raptor
20{
21
22template <typename algorithm_t>
23void do_parallel(algorithm_t && worker, size_t const num_records, size_t const threads)
24{
25 size_t const chunk_size = seqan::hibf::divide_and_ceil(num_records, threads * threads);
26 size_t const number_of_chunks = seqan::hibf::divide_and_ceil(num_records, chunk_size);
27
28#pragma omp parallel for schedule(dynamic) num_threads(threads)
29 for (size_t i = 0; i < number_of_chunks; ++i)
30 {
31 size_t const start = chunk_size * i;
32 size_t const extent = i == (number_of_chunks - 1) ? num_records - i * chunk_size : chunk_size;
33 std::invoke(worker, start, extent);
34 }
35}
36
37} // namespace raptor
T invoke(T... args)
Hide me