[Bf-blender-cvs] [de92947768d] tmp-task-foreach-pool: Pool range iter: compute 'static' scheduler chunk size from smallest range.

Bastien Montagne noreply at git.blender.org
Tue Nov 12 12:09:47 CET 2019


Commit: de92947768df68a4b5fc5b0ed33467bcdd9066d1
Author: Bastien Montagne
Date:   Mon Nov 11 15:29:31 2019 +0100
Branches: tmp-task-foreach-pool
https://developer.blender.org/rBde92947768df68a4b5fc5b0ed33467bcdd9066d1

Pool range iter: compute 'static' scheduler chunk size from smallest range.

Computing it from sum of all the ranges is rather stupid and meaning
less, pooled range iterator needs to be at least somewhat dynamic in any
case...

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

M	source/blender/blenlib/intern/task.c

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

diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c
index 0088fd55648..68f340fc86e 100644
--- a/source/blender/blenlib/intern/task.c
+++ b/source/blender/blenlib/intern/task.c
@@ -1150,13 +1150,21 @@ BLI_INLINE void task_parallel_calc_chunk_size(const TaskParallelSettings *settin
 BLI_INLINE void task_parallel_range_calc_chunk_size(TaskParallelRangePool *range_pool)
 {
   int num_iters = 0;
+  int min_num_iters = INT_MAX;
   for (TaskParallelRangeState *state = range_pool->parallel_range_tasks; state != NULL;
        state = state->next) {
-    num_iters += state->stop - state->start;
+    const int ni = state->stop - state->start;
+    num_iters += ni;
+    if (min_num_iters > ni) {
+      min_num_iters = ni;
+    }
   }
   range_pool->num_iters = num_iters;
+  /* Note: Paasing min_num_iter here instead of num_iters kind of partially breaks the 'static'
+   * scheduling, but pooled range iterator is inherently non-static anyway, so adding a small level
+   * of dynamic scheduling here should be fine. */
   task_parallel_calc_chunk_size(
-      range_pool->settings, num_iters, range_pool->num_tasks, &range_pool->chunk_size);
+      range_pool->settings, min_num_iters, range_pool->num_tasks, &range_pool->chunk_size);
 }
 
 BLI_INLINE bool parallel_range_next_iter_get(TaskParallelRangePool *__restrict range_pool,



More information about the Bf-blender-cvs mailing list