[Bf-blender-cvs] [b37c40a5756] master: Fix Cycles unnecessary overhead cancelling finished task pool

Brecht Van Lommel noreply at git.blender.org
Sat Oct 24 20:07:17 CEST 2020


Commit: b37c40a575663ea42d397d57d3ef902b4d9777ec
Author: Brecht Van Lommel
Date:   Fri Oct 23 18:54:45 2020 +0200
Branches: master
https://developer.blender.org/rBb37c40a575663ea42d397d57d3ef902b4d9777ec

Fix Cycles unnecessary overhead cancelling finished task pool

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

M	intern/cycles/util/util_task.cpp
M	intern/cycles/util/util_task.h

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

diff --git a/intern/cycles/util/util_task.cpp b/intern/cycles/util/util_task.cpp
index 4fb61392e92..50c236ac968 100644
--- a/intern/cycles/util/util_task.cpp
+++ b/intern/cycles/util/util_task.cpp
@@ -24,7 +24,7 @@ CCL_NAMESPACE_BEGIN
 
 /* Task Pool */
 
-TaskPool::TaskPool() : start_time(time_dt()), num_tasks_handled(0)
+TaskPool::TaskPool() : start_time(time_dt()), num_tasks_pushed(0)
 {
 }
 
@@ -36,7 +36,7 @@ TaskPool::~TaskPool()
 void TaskPool::push(TaskRunFunction &&task)
 {
   tbb_group.run(std::move(task));
-  num_tasks_handled++;
+  num_tasks_pushed++;
 }
 
 void TaskPool::wait_work(Summary *stats)
@@ -45,14 +45,19 @@ void TaskPool::wait_work(Summary *stats)
 
   if (stats != NULL) {
     stats->time_total = time_dt() - start_time;
-    stats->num_tasks_handled = num_tasks_handled;
+    stats->num_tasks_handled = num_tasks_pushed;
   }
+
+  num_tasks_pushed = 0;
 }
 
 void TaskPool::cancel()
 {
-  tbb_group.cancel();
-  tbb_group.wait();
+  if (num_tasks_pushed > 0) {
+    tbb_group.cancel();
+    tbb_group.wait();
+    num_tasks_pushed = 0;
+  }
 }
 
 bool TaskPool::canceled()
diff --git a/intern/cycles/util/util_task.h b/intern/cycles/util/util_task.h
index d3c3c11f8e2..f2718600f30 100644
--- a/intern/cycles/util/util_task.h
+++ b/intern/cycles/util/util_task.h
@@ -71,8 +71,8 @@ class TaskPool {
   /* Time time stamp of first task pushed. */
   double start_time;
 
-  /* Number of all tasks handled by this pool. */
-  int num_tasks_handled;
+  /* Number of all tasks pushed to the pool. Cleared after wait_work() and cancel(). */
+  int num_tasks_pushed;
 };
 
 /* Task Scheduler



More information about the Bf-blender-cvs mailing list