7#ifndef PXR_BASE_WORK_TBB_REDUCE_IMPL_H
8#define PXR_BASE_WORK_TBB_REDUCE_IMPL_H
12#include <tbb/blocked_range.h>
13#include <tbb/parallel_reduce.h>
14#include <tbb/task_group.h>
16PXR_NAMESPACE_OPEN_SCOPE
22template <
typename Fn,
typename Rn,
typename V>
24WorkImpl_ParallelReduceN(
28 Rn &&reductionCallback,
35 Work_Body_TBB(Fn &fn) : _fn(fn) { }
38 const tbb::blocked_range<size_t> &r,
39 const V &value)
const {
45 return std::forward<Fn>(_fn)(r.begin(), r.end(), value);
53 tbb::task_group_context ctx(tbb::task_group_context::isolated);
54 return tbb::parallel_reduce(tbb::blocked_range<size_t>(0,n,grainSize),
56 Work_Body_TBB(loopCallback),
57 std::forward<Rn>(reductionCallback),
58 tbb::auto_partitioner(),
62PXR_NAMESPACE_CLOSE_SCOPE