7#ifndef PXR_BASE_WORK_TBB_LOOPS_H
8#define PXR_BASE_WORK_TBB_LOOPS_H
13#include <tbb/blocked_range.h>
14#include <tbb/parallel_for.h>
15#include <tbb/parallel_for_each.h>
16#include <tbb/task_group.h>
18PXR_NAMESPACE_OPEN_SCOPE
26WorkImpl_ParallelForN(
size_t n, Fn &&callback,
size_t grainSize)
28 class Work_ParallelForN_TBB
31 Work_ParallelForN_TBB(Fn &fn) : _fn(fn) { }
33 void operator()(
const tbb::blocked_range<size_t> &r)
const {
39 std::forward<Fn>(_fn)(r.begin(), r.end());
48 tbb::task_group_context ctx(tbb::task_group_context::isolated);
49 tbb::parallel_for(tbb::blocked_range<size_t>(0,n,grainSize),
50 Work_ParallelForN_TBB(callback),
56template <
typename InputIterator,
typename Fn>
58WorkImpl_ParallelForEach(
59 InputIterator first, InputIterator last, Fn &&fn)
61 tbb::task_group_context ctx(tbb::task_group_context::isolated);
62 tbb::parallel_for_each(first, last, std::forward<Fn>(fn), ctx);
65PXR_NAMESPACE_CLOSE_SCOPE