[Bf-blender-cvs] [3ecb692b433] functions: fix task scheduling

Jacques Lucke noreply at git.blender.org
Fri Nov 15 16:04:11 CET 2019


Commit: 3ecb692b4336cf6f3ca5fae1afdc9d8af3833500
Author: Jacques Lucke
Date:   Fri Nov 15 16:03:19 2019 +0100
Branches: functions
https://developer.blender.org/rB3ecb692b4336cf6f3ca5fae1afdc9d8af3833500

fix task scheduling

===================================================================

M	source/blender/blenlib/BLI_task_cxx.h
M	source/blender/simulations/bparticles/simulate.cpp

===================================================================

diff --git a/source/blender/blenlib/BLI_task_cxx.h b/source/blender/blenlib/BLI_task_cxx.h
index 045df2ebdda..d224390c21f 100644
--- a/source/blender/blenlib/BLI_task_cxx.h
+++ b/source/blender/blenlib/BLI_task_cxx.h
@@ -41,6 +41,7 @@ namespace Task {
 template<typename T, typename ProcessElement>
 static void parallel_array_elements(ArrayRef<T> array,
                                     ProcessElement process_element,
+                                    int min_iterations_per_thread,
                                     bool use_threading = true)
 {
   if (!use_threading) {
@@ -52,24 +53,26 @@ static void parallel_array_elements(ArrayRef<T> array,
 
   TaskParallelSettings settings = {0};
   BLI_parallel_range_settings_defaults(&settings);
-  settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC;
+  settings.scheduling_mode = TASK_SCHEDULING_STATIC;
+  settings.min_iter_per_thread = min_iterations_per_thread;
 
   struct ParallelData {
     ArrayRef<T> array;
     ProcessElement &process_element;
   } data = {array, process_element};
 
-  BLI_task_parallel_range(0,
-                          array.size(),
-                          (void *)&data,
-                          [](void *__restrict userdata,
-                             const int index,
-                             const TaskParallelTLS *__restrict UNUSED(tls)) {
-                            ParallelData &data = *(ParallelData *)userdata;
-                            const T &element = data.array[index];
-                            data.process_element(element);
-                          },
-                          &settings);
+  BLI_task_parallel_range(
+      0,
+      array.size(),
+      (void *)&data,
+      [](void *__restrict userdata,
+         const int index,
+         const TaskParallelTLS *__restrict UNUSED(tls)) {
+        ParallelData &data = *(ParallelData *)userdata;
+        const T &element = data.array[index];
+        data.process_element(element);
+      },
+      &settings);
 }
 
 template<typename ProcessRange>
@@ -91,17 +94,18 @@ static void parallel_range(IndexRange total_range,
     ProcessRange &process_range;
   } data = {ChunkedIndexRange(total_range, chunk_size), process_range};
 
-  BLI_task_parallel_range(0,
-                          data.chunks.chunks(),
-                          (void *)&data,
-                          [](void *__restrict userdata,
-                             const int index,
-                             const TaskParallelTLS *__restrict UNUSED(tls)) {
-                            ParallelData &data = *(ParallelData *)userdata;
-                            IndexRange range = data.chunks.chunk_range(index);
-                            data.process_range(range);
-                          },
-                          &settings);
+  BLI_task_parallel_range(
+      0,
+      data.chunks.chunks(),
+      (void *)&data,
+      [](void *__restrict userdata,
+         const int index,
+         const TaskParallelTLS *__restrict UNUSED(tls)) {
+        ParallelData &data = *(ParallelData *)userdata;
+        IndexRange range = data.chunks.chunk_range(index);
+        data.process_range(range);
+      },
+      &settings);
 }
 
 }  // namespace Task
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index d4515255a6f..85ceb9591d5 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -401,6 +401,7 @@ BLI_NOINLINE static void simulate_blocks_for_time_span(
 
         delete_tagged_particles_and_reorder(*block);
       },
+      1,
       USE_THREADING);
 }
 
@@ -434,6 +435,7 @@ BLI_NOINLINE static void simulate_blocks_from_birth_to_current_time(
 
         delete_tagged_particles_and_reorder(*block);
       },
+      1,
       USE_THREADING);
 }



More information about the Bf-blender-cvs mailing list