[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