24#ifndef PXR_BASE_WORK_LOOPS_H
25#define PXR_BASE_WORK_LOOPS_H
30#include "pxr/base/work/api.h"
32#include <tbb/blocked_range.h>
33#include <tbb/parallel_for.h>
34#include <tbb/parallel_for_each.h>
35#include <tbb/task_group.h>
37PXR_NAMESPACE_OPEN_SCOPE
55 std::forward<Fn>(fn)(0, n);
83 class Work_ParallelForN_TBB
86 Work_ParallelForN_TBB(Fn &fn) : _fn(fn) { }
88 void operator()(
const tbb::blocked_range<size_t> &r)
const {
94 std::forward<Fn>(_fn)(r.begin(), r.end());
103 tbb::task_group_context ctx(tbb::task_group_context::isolated);
104 tbb::parallel_for(tbb::blocked_range<size_t>(0,n,grainSize),
105 Work_ParallelForN_TBB(callback),
127template <
typename Fn>
147template <
typename InputIterator,
typename Fn>
150 InputIterator first, InputIterator last, Fn &&fn)
152 tbb::task_group_context ctx(tbb::task_group_context::isolated);
153 tbb::parallel_for_each(first, last, std::forward<Fn>(fn), ctx);
156PXR_NAMESPACE_CLOSE_SCOPE
void WorkParallelForEach(InputIterator first, InputIterator last, Fn &&fn)
WorkParallelForEach(Iterator first, Iterator last, CallbackType callback)
void WorkParallelForN(size_t n, Fn &&callback, size_t grainSize)
WorkParallelForN(size_t n, CallbackType callback, size_t grainSize = 1)
void WorkSerialForN(size_t n, Fn &&fn)
WorkSerialForN(size_t n, CallbackType callback)
WORK_API bool WorkHasConcurrency()
Return true if WorkGetPhysicalConcurrencyLimit() returns a number greater than 1 and PXR_WORK_THREAD_...