Sourcemeta Core 0.0.0
Loading...
Searching...
No Matches
Parallel

Growing collection of utilities for parallel computing. More...

Functions

template<typename Iterator, typename Callback>
auto sourcemeta::core::parallel_for_each (Iterator first, Iterator last, Callback &&callback, const std::size_t parallelism=std::thread::hardware_concurrency(), const std::size_t stack_size_bytes=0) -> void

Detailed Description

Growing collection of utilities for parallel computing.

This functionality is included as follows:

#include <sourcemeta/core/parallel.h>

Function Documentation

◆ parallel_for_each()

template<typename Iterator, typename Callback>
auto sourcemeta::core::parallel_for_each ( Iterator first,
Iterator last,
Callback && callback,
const std::size_t parallelism = std::thread::hardware_concurrency(),
const std::size_t stack_size_bytes = 0 ) -> void

Process a collection in parallel. If the parallelism is set to zero, the function will run using the available number of cores. If the stack size is set to zero, the platform default applies. For example:

#include <sourcemeta/core/parallel.h>
#include <vector>
#include <mutex>
#include <iostream>
std::vector<std::size_t> input;
for (std::size_t index = 0; index < 20; index++) {
input.push_back(index);
}
std::mutex mutex;
std::vector<std::size_t> result;
input.cbegin(), input.cend(),
[&mutex, &result](const auto value,
const auto parallelism,
const auto cursor) {
std::lock_guard<std::mutex> lock{mutex};
result.push_back(value);
std::cerr << "Processing " << cursor
<< " with parallelism " << parallelism << "\n";
});
auto parallel_for_each(Iterator first, Iterator last, Callback &&callback, const std::size_t parallelism=std::thread::hardware_concurrency(), const std::size_t stack_size_bytes=0) -> void
Definition parallel_for_each.h:97