17 #ifndef QMCPLUSPLUS_PARALLELEXECUTOR_STDTHREADS_HPP 18 #define QMCPLUSPLUS_PARALLELEXECUTOR_STDTHREADS_HPP 39 template<
typename... T>
42 f(std::forward<T>(args)...);
49 template<
typename F,
typename... Args>
52 std::vector<std::thread> threads(num_tasks_);
54 for (
int task_id = 0; task_id < num_tasks; ++task_id)
56 threads[task_id] = std::thread(
TaskWrapper<F>{std::forward<F>(f)}, task_id, std::forward<Args>(args)...);
59 for (
int task_id = 0; task_id < num_tasks; ++task_id)
61 threads[task_id].join();
helper functions for EinsplineSetBuilder
TaskWrapper code from https://stackoverflow.com/questions/48268322/wrap-stdthread-call-function.
void operator()(int num_tasks, F &&f, Args &&... args)
Concurrently execute an arbitrary function/kernel with task id and arbitrary args.
void operator()(T &&... args)