Task scheduler: Start with suspended pool to avoid threading overhead on push
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 22 Dec 2017 11:25:11 +0000 (12:25 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 22 Dec 2017 11:25:11 +0000 (12:25 +0100)
The idea is to avoid any threading overhead when we start pushing tasks in a
loop. Similarly to how we do it from the new dependency graph. Gives couple of
percent of speedup here, but also improves scalability.

source/blender/blenlib/intern/task.c

index eb7f186702b6dd6e19d86945251c46009e715c8c..311be1dd15154455d2687515a9c725da475f837d 100644 (file)
@@ -1101,7 +1101,7 @@ static void task_parallel_range_ex(
        }
 
        task_scheduler = BLI_task_scheduler_get();
-       task_pool = BLI_task_pool_create(task_scheduler, &state);
+       task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
        num_threads = BLI_task_scheduler_num_threads(task_scheduler);
 
        /* The idea here is to prevent creating task for each of the loop iterations
@@ -1325,7 +1325,7 @@ void BLI_task_parallel_listbase(
        }
 
        task_scheduler = BLI_task_scheduler_get();
-       task_pool = BLI_task_pool_create(task_scheduler, &state);
+       task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
        num_threads = BLI_task_scheduler_num_threads(task_scheduler);
 
        /* The idea here is to prevent creating task for each of the loop iterations
@@ -1413,7 +1413,7 @@ void BLI_task_parallel_mempool(
        }
 
        task_scheduler = BLI_task_scheduler_get();
-       task_pool = BLI_task_pool_create(task_scheduler, &state);
+       task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
        num_threads = BLI_task_scheduler_num_threads(task_scheduler);
 
        /* The idea here is to prevent creating task for each of the loop iterations