[Bf-blender-cvs] [e9334c5df8b] master: Geometry Nodes: Avoid parallel_for_each with a single geometry
Hans Goudey
noreply at git.blender.org
Tue Apr 26 16:24:36 CEST 2022
Commit: e9334c5df8b9c0c22c1c0ad20a087b5a437dcd23
Author: Hans Goudey
Date: Tue Apr 26 09:24:18 2022 -0500
Branches: master
https://developer.blender.org/rBe9334c5df8b9c0c22c1c0ad20a087b5a437dcd23
Geometry Nodes: Avoid parallel_for_each with a single geometry
The large call stack can be slightly annoying, and it's possible that
invoking TBB in this case corresponds to some overhead like
e1309030603980c6b.
===================================================================
M source/blender/blenkernel/intern/geometry_set.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/geometry_set.cc b/source/blender/blenkernel/intern/geometry_set.cc
index fc758e12c70..2bd8b643899 100644
--- a/source/blender/blenkernel/intern/geometry_set.cc
+++ b/source/blender/blenkernel/intern/geometry_set.cc
@@ -548,8 +548,14 @@ void GeometrySet::modify_geometry_sets(ForeachSubGeometryCallback callback)
{
Vector<GeometrySet *> geometry_sets;
gather_mutable_geometry_sets(*this, geometry_sets);
- blender::threading::parallel_for_each(
- geometry_sets, [&](GeometrySet *geometry_set) { callback(*geometry_set); });
+ if (geometry_sets.size() == 1) {
+ /* Avoid possible overhead and a large call stack when multithreading is pointless. */
+ callback(*geometry_sets.first());
+ }
+ else {
+ blender::threading::parallel_for_each(
+ geometry_sets, [&](GeometrySet *geometry_set) { callback(*geometry_set); });
+ }
}
/** \} */
More information about the Bf-blender-cvs
mailing list