[Bf-blender-cvs] [205b4c37427] temp-T96710-pbvh-pixels: Functions: parallelize materializing arrays after field evaluation
Jacques Lucke
noreply at git.blender.org
Fri Apr 8 11:07:47 CEST 2022
Commit: 205b4c374270d6be5cf599e6894b482404b75b08
Author: Jacques Lucke
Date: Thu Apr 7 09:48:07 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB205b4c374270d6be5cf599e6894b482404b75b08
Functions: parallelize materializing arrays after field evaluation
This improves performance e.g. when creating an integer attribute
based on an index field. For 4 million vertices, I measured a speedup
from 3.5 ms to 1.2 ms.
===================================================================
M source/blender/functions/intern/field.cc
===================================================================
diff --git a/source/blender/functions/intern/field.cc b/source/blender/functions/intern/field.cc
index 986d6ddc19e..944674c23a9 100644
--- a/source/blender/functions/intern/field.cc
+++ b/source/blender/functions/intern/field.cc
@@ -468,16 +468,21 @@ Vector<GVArray> evaluate_fields(ResourceScope &scope,
/* Still have to copy over the data in the destination provided by the caller. */
if (dst_varray.is_span()) {
/* Materialize into a span. */
- computed_varray.materialize_to_uninitialized(mask, dst_varray.get_internal_span().data());
+ threading::parallel_for(mask.index_range(), 2048, [&](const IndexRange range) {
+ computed_varray.materialize_to_uninitialized(mask.slice(range),
+ dst_varray.get_internal_span().data());
+ });
}
else {
/* Slower materialize into a different structure. */
const CPPType &type = computed_varray.type();
- BUFFER_FOR_CPP_TYPE_VALUE(type, buffer);
- for (const int i : mask) {
- computed_varray.get_to_uninitialized(i, buffer);
- dst_varray.set_by_relocate(i, buffer);
- }
+ threading::parallel_for(mask.index_range(), 2048, [&](const IndexRange range) {
+ BUFFER_FOR_CPP_TYPE_VALUE(type, buffer);
+ for (const int i : mask.slice(range)) {
+ computed_varray.get_to_uninitialized(i, buffer);
+ dst_varray.set_by_relocate(i, buffer);
+ }
+ });
}
r_varrays[out_index] = dst_varray;
}
More information about the Bf-blender-cvs
mailing list