21 size_t min_chunk_size,
23 UnaryFunction mutator)
25 const size_t chunk_size =
max(min_chunk_size, values.size()/std::thread::hardware_concurrency());
26 const size_t num_tasks = values.size()/chunk_size;
29 std::vector<std::future<void>> tasks;
30 tasks.reserve(num_tasks);
32 for (
size_t i = 0; i < num_tasks-1; ++i) {
33 const size_t chunk_begin = i * chunk_size;
34 const size_t chunk_end = (i+1) * chunk_size;
35 tasks.push_back(std::async(std::launch::async, [values, mutator, chunk_begin, chunk_end]()
37 for (
size_t j = chunk_begin; j < chunk_end; ++j) {
45 const size_t chunk_begin = (num_tasks-1) * chunk_size;
46 const size_t chunk_end = values.size();
47 tasks.push_back(std::async(std::launch::async, [values, mutator, chunk_begin, chunk_end]()
49 for (
size_t i = chunk_begin; i < chunk_end; ++i) {
55 for (std::future<void>& task : tasks) {
61 for (
T& value : values) {
constexpr auto max(Angle< Rep1, Units1 > x, Angle< Rep2, Units2 > y) -> std::common_type_t< decltype(x), decltype(y)>
Definition angle.h:300
void for_each_parallel_unsequenced(size_t min_chunk_size, std::span< T > values, UnaryFunction mutator)
Definition paralellization_helpers.h:20