Skip to content

Commit e076a07

Browse files
committed
add grainSize parameter
1 parent fad15ed commit e076a07

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

inst/include/RcppParallel.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,27 @@
1717

1818
namespace RcppParallel {
1919

20-
inline void parallelFor(std::size_t begin, std::size_t end, Worker& worker) {
20+
inline void parallelFor(std::size_t begin, std::size_t end,
21+
Worker& worker, std::size_t grainSize = 1) {
22+
2123
#if RCPP_PARALLEL_USE_TBB
22-
tbbParallelFor(begin, end, worker);
24+
tbbParallelFor(begin, end, worker, grainSize);
2325
#else
24-
ttParallelFor(begin, end, worker);
26+
ttParallelFor(begin, end, worker, grainSize);
2527
#endif
2628

2729
}
2830

2931
template <typename Reducer>
30-
inline void parallelReduce(std::size_t begin, std::size_t end, Reducer& reducer) {
32+
inline void parallelReduce(std::size_t begin, std::size_t end,
33+
Reducer& reducer, std::size_t grainSize = 1) {
34+
3135
#if RCPP_PARALLEL_USE_TBB
32-
tbbParallelReduce(begin, end, reducer);
36+
tbbParallelReduce(begin, end, reducer, grainSize);
3337
#else
34-
ttParallelReduce(begin, end, reducer);
38+
ttParallelReduce(begin, end, reducer, grainSize);
3539
#endif
40+
3641
}
3742

3843
} // namespace RcppParallel

inst/include/RcppParallel/TBB.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,23 @@ struct TBBReducer
6262
} // anonymous namespace
6363

6464

65-
inline void tbbParallelFor(std::size_t begin, std::size_t end, Worker& worker) {
65+
inline void tbbParallelFor(std::size_t begin, std::size_t end,
66+
Worker& worker, std::size_t grainSize = 1) {
67+
6668
TBBWorker tbbWorker(worker);
67-
tbb::parallel_for(tbb::blocked_range<size_t>(begin, end), tbbWorker);
69+
70+
tbb::parallel_for(tbb::blocked_range<size_t>(begin, end, grainSize),
71+
tbbWorker);
6872
}
6973

7074
template <typename Reducer>
71-
inline void tbbParallelReduce(std::size_t begin, std::size_t end, Reducer& reducer) {
75+
inline void tbbParallelReduce(std::size_t begin, std::size_t end,
76+
Reducer& reducer, std::size_t grainSize = 1) {
77+
7278
TBBReducer<Reducer> tbbReducer(reducer);
73-
tbb::parallel_reduce(tbb::blocked_range<size_t>(begin, end), tbbReducer);
79+
80+
tbb::parallel_reduce(tbb::blocked_range<size_t>(begin, end, grainSize),
81+
tbbReducer);
7482
}
7583

7684
} // namespace RcppParallel

inst/include/RcppParallel/TinyThread.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ std::vector<IndexRange> splitInputRange(const IndexRange& range) {
9494
} // anonymous namespace
9595

9696
// Execute the Worker over the IndexRange in parallel
97-
inline void ttParallelFor(std::size_t begin, std::size_t end, Worker& worker) {
97+
inline void ttParallelFor(std::size_t begin, std::size_t end,
98+
Worker& worker, std::size_t grainSize = 1) {
9899

99100
using namespace tthread;
100101

@@ -116,7 +117,8 @@ inline void ttParallelFor(std::size_t begin, std::size_t end, Worker& worker) {
116117

117118
// Execute the IWorker over the range in parallel then join results
118119
template <typename Reducer>
119-
inline void ttParallelReduce(std::size_t begin, std::size_t end, Reducer& reducer) {
120+
inline void ttParallelReduce(std::size_t begin, std::size_t end,
121+
Reducer& reducer, std::size_t grainSize = 1) {
120122

121123
using namespace tthread;
122124

0 commit comments

Comments
 (0)