[Bf-blender-cvs] [c2737913dbe] master: BLI: Avoid invoking tbb for small parallel_reduce calls
Hans Goudey
noreply at git.blender.org
Mon May 9 18:22:22 CEST 2022
Commit: c2737913dbe7dd9b70d6fb01ef9a6487f94064f9
Author: Hans Goudey
Date: Mon May 9 18:21:37 2022 +0200
Branches: master
https://developer.blender.org/rBc2737913dbe7dd9b70d6fb01ef9a6487f94064f9
BLI: Avoid invoking tbb for small parallel_reduce calls
Apply a change similar to e1309030603980c6b2f33486 for
`parallel_reduce`, just like `parallel_for`. I measured a performance
improvement in viewport FPS of at least 10% with 1 million small
instances (one bottleneck was computing many small bounding boxes).
===================================================================
M source/blender/blenlib/BLI_task.hh
===================================================================
diff --git a/source/blender/blenlib/BLI_task.hh b/source/blender/blenlib/BLI_task.hh
index d87a86ce696..904dea66f7a 100644
--- a/source/blender/blenlib/BLI_task.hh
+++ b/source/blender/blenlib/BLI_task.hh
@@ -77,17 +77,19 @@ Value parallel_reduce(IndexRange range,
const Reduction &reduction)
{
#ifdef WITH_TBB
- return tbb::parallel_reduce(
- tbb::blocked_range<int64_t>(range.first(), range.one_after_last(), grain_size),
- identity,
- [&](const tbb::blocked_range<int64_t> &subrange, const Value &ident) {
- return function(IndexRange(subrange.begin(), subrange.size()), ident);
- },
- reduction);
+ if (range.size() >= grain_size) {
+ return tbb::parallel_reduce(
+ tbb::blocked_range<int64_t>(range.first(), range.one_after_last(), grain_size),
+ identity,
+ [&](const tbb::blocked_range<int64_t> &subrange, const Value &ident) {
+ return function(IndexRange(subrange.begin(), subrange.size()), ident);
+ },
+ reduction);
+ }
#else
UNUSED_VARS(grain_size, reduction);
- return function(range, identity);
#endif
+ return function(range, identity);
}
/**
More information about the Bf-blender-cvs
mailing list