[Bf-blender-cvs] [30813d6a593] cycles-x: Cycles X: Include rebalance time into full report

Sergey Sharybin noreply at git.blender.org
Mon Jul 12 15:00:10 CEST 2021


Commit: 30813d6a593a08e411fe6da5db6ca417da3c78b4
Author: Sergey Sharybin
Date:   Mon Jul 12 13:02:00 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB30813d6a593a08e411fe6da5db6ca417da3c78b4

Cycles X: Include rebalance time into full report

Useful for investigating various balance strategies.

Differential Revision: https://developer.blender.org/D11887

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

M	intern/cycles/integrator/path_trace.cpp
M	intern/cycles/integrator/render_scheduler.cpp
M	intern/cycles/integrator/render_scheduler.h

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

diff --git a/intern/cycles/integrator/path_trace.cpp b/intern/cycles/integrator/path_trace.cpp
index 1310922ac25..34fa56691dc 100644
--- a/intern/cycles/integrator/path_trace.cpp
+++ b/intern/cycles/integrator/path_trace.cpp
@@ -529,19 +529,19 @@ void PathTrace::rebalance(const RenderWork &render_work)
 {
   static const int kLogLevel = 3;
 
-  scoped_timer timer;
-
-  const int num_works = path_trace_works_.size();
-
   if (!render_work.rebalance) {
     return;
   }
 
+  const int num_works = path_trace_works_.size();
+
   if (num_works == 1) {
     VLOG(kLogLevel) << "Ignoring rebalance work due to single device render.";
     return;
   }
 
+  const double start_time = time_dt();
+
   if (VLOG_IS_ON(kLogLevel)) {
     VLOG(kLogLevel) << "Perform rebalance work.";
     VLOG(kLogLevel) << "Per-device path tracing time (seconds):";
@@ -576,7 +576,7 @@ void PathTrace::rebalance(const RenderWork &render_work)
 
   copy_from_render_buffers(big_tile_cpu_buffers.buffers.get());
 
-  VLOG(kLogLevel) << "Rebalance time (seconds): " << timer.get_time();
+  render_scheduler_.report_rebalance_time(render_work, time_dt() - start_time);
 }
 
 void PathTrace::cancel()
diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp
index 17c90a789a9..d6da5cfabfa 100644
--- a/intern/cycles/integrator/render_scheduler.cpp
+++ b/intern/cycles/integrator/render_scheduler.cpp
@@ -135,6 +135,7 @@ void RenderScheduler::reset(const BufferParams &buffer_params, int num_samples)
   denoise_time_.reset();
   adaptive_filter_time_.reset();
   display_update_time_.reset();
+  rebalance_time_.reset();
 }
 
 bool RenderScheduler::render_work_reschedule_on_converge(RenderWork &render_work)
@@ -361,6 +362,19 @@ void RenderScheduler::report_display_update_time(const RenderWork &render_work,
   state_.last_display_update_time = time_dt();
 }
 
+void RenderScheduler::report_rebalance_time(const RenderWork &render_work, double time)
+{
+  rebalance_time_.add_wall(time);
+
+  if (work_report_reset_average(render_work)) {
+    rebalance_time_.reset_average();
+  }
+
+  rebalance_time_.add_average(time);
+
+  VLOG(4) << "Average rebalance time: " << rebalance_time_.get_average() << " seconds.";
+}
+
 string RenderScheduler::full_report() const
 {
   const double render_wall_time = state_.end_render_time - state_.start_render_time;
@@ -434,10 +448,22 @@ string RenderScheduler::full_report() const
                           display_update_time_.get_wall(),
                           display_update_time_.get_average());
 
+  const int num_rebalance_observations = rebalance_time_.get_num_observations();
+  if (num_rebalance_observations) {
+    result += string_printf("  %20s %20f %20f\n",
+                            "Rebalance",
+                            rebalance_time_.get_wall(),
+                            rebalance_time_.get_average());
+  }
+
   const double total_time = path_trace_time_.get_wall() + adaptive_filter_time_.get_wall() +
                             denoise_time_.get_wall() + display_update_time_.get_wall();
   result += "\n  Total: " + to_string(total_time) + "\n";
 
+  if (num_rebalance_observations) {
+    result += "\nNumber of performed rebalances: " + to_string(num_rebalance_observations) + "\n";
+  }
+
   result += string_printf(
       "\nRendered %d samples in %f seconds\n", num_rendered_samples, render_wall_time);
 
diff --git a/intern/cycles/integrator/render_scheduler.h b/intern/cycles/integrator/render_scheduler.h
index 097a3927e30..2c7c72ba9b6 100644
--- a/intern/cycles/integrator/render_scheduler.h
+++ b/intern/cycles/integrator/render_scheduler.h
@@ -136,6 +136,7 @@ class RenderScheduler {
   void report_adaptive_filter_time(const RenderWork &render_work, double time, bool is_cancelled);
   void report_denoise_time(const RenderWork &render_work, double time);
   void report_display_update_time(const RenderWork &render_work, double time);
+  void report_rebalance_time(const RenderWork &render_work, double time);
 
   /* Generate full multi-line report of the rendering process, including rendering parameters,
    * times, and so on. */
@@ -257,6 +258,11 @@ class RenderScheduler {
       num_average_times_ = 0;
     }
 
+    inline int get_num_observations() const
+    {
+      return num_average_times_;
+    }
+
    protected:
     double total_wall_time_ = 0.0;
 
@@ -303,6 +309,7 @@ class RenderScheduler {
   TimeWithAverage adaptive_filter_time_;
   TimeWithAverage denoise_time_;
   TimeWithAverage display_update_time_;
+  TimeWithAverage rebalance_time_;
 
   /* Path tracing work will be scheduled for samples from within
    * [start_sample_, start_sample_ + num_samples_ - 1] range, inclusively. */



More information about the Bf-blender-cvs mailing list