10 #ifndef EIGEN_THREADPOOL_FORKJOIN_H
11 #define EIGEN_THREADPOOL_FORKJOIN_H
66 template <
typename DoFnType>
77 template <
typename DoFnType>
80 auto dummy_done = []() {};
82 thread_pool->
Schedule([
start,
end, granularity, thread_pool, &do_func, &dummy_done, &barrier]() {
91 template <
typename LeftType,
typename RightType>
93 std::atomic<bool> right_done(
false);
94 auto execute_right = [&right_thunk, &right_done]() {
95 std::forward<RightType>(right_thunk)();
96 right_done.store(
true, std::memory_order_release);
98 thread_pool->
Schedule(execute_right);
99 std::forward<LeftType>(left_thunk)();
101 while (!right_done.load(std::memory_order_acquire)) {
103 if (task.f) task.f();
111 std::function<void(
int,
int)> wrapped_do_func = [&do_func](
int start,
int end) {
137 [
start, mid, granularity, &do_func, &done, thread_pool]() {
140 [mid,
end, granularity, &do_func, &done, thread_pool]() {
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
void Wait()
Definition: Barrier.h:43
void Notify()
Definition: Barrier.h:28
Definition: ForkJoin.h:60
static void ParallelFor(int start, int end, int granularity, DoFnType do_func, Eigen::ThreadPool *thread_pool)
Definition: ForkJoin.h:78
static void ParallelForAsync(int start, int end, int granularity, DoFnType do_func, std::function< void()> done, Eigen::ThreadPool *thread_pool)
Definition: ForkJoin.h:67
static void RunParallelForAsync(int start, int end, int granularity, std::function< void(int, int)> &do_func, std::function< void()> &done, Eigen::ThreadPool *thread_pool)
Definition: ForkJoin.h:119
static void RunParallelForAsync(int start, int end, int granularity, std::function< void(int)> &do_func, std::function< void()> &done, Eigen::ThreadPool *thread_pool)
Definition: ForkJoin.h:109
static void ForkJoin(LeftType &&left_thunk, RightType &&right_thunk, Eigen::ThreadPool *thread_pool)
Definition: ForkJoin.h:92
Definition: NonBlockingThreadPool.h:19
Environment::Task Task
Definition: NonBlockingThreadPool.h:22
void Schedule(std::function< void()> fn) EIGEN_OVERRIDE
Definition: NonBlockingThreadPool.h:120
void MaybeGetTask(Task *t)
Definition: NonBlockingThreadPool.h:157
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_CONSTEXPR T div_ceil(T a, T b)
Definition: MathFunctions.h:1251
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.cc:243
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2