[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