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. */ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
