From ccea0e2386fe40f52ae9a486bdb283549ea1f944 Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Wed, 27 Apr 2022 19:09:05 +0800 Subject: [PATCH] fix(dnn/rdnn): add warmup before profile GitOrigin-RevId: 7962525e90d80a717b4682f2f666462d49c95b80 --- src/rdnn/impl/algo_chooser.cpp | 2 +- src/rdnn/impl/profiler.cpp | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/rdnn/impl/algo_chooser.cpp b/src/rdnn/impl/algo_chooser.cpp index 0226af20..fae3aea9 100644 --- a/src/rdnn/impl/algo_chooser.cpp +++ b/src/rdnn/impl/algo_chooser.cpp @@ -961,7 +961,7 @@ void AlgoChooser::AlgoChooserHelper::profile( continue; }) if (!cur_rst.valid()) { - mgb_log_warn( + mgb_log_debug( "timeout when %s; timeout setting: %.3fsec", msg.c_str(), cur_timeout); continue; diff --git a/src/rdnn/impl/profiler.cpp b/src/rdnn/impl/profiler.cpp index 12303b5c..670de872 100644 --- a/src/rdnn/impl/profiler.cpp +++ b/src/rdnn/impl/profiler.cpp @@ -304,6 +304,21 @@ typename TimedProfiler::TResult TimedProfiler::prof_impl( RealTimer timer; auto ev_start = cn.create_event(CompNode::Event::NEED_TIMER), ev_end = cn.create_event(CompNode::Event::NEED_TIMER); + for (int i = 0; i < 5; ++i) { + if_constexpr()>( + [&](auto _) { + auto&& opr = _(megdnn_opr); + PreprocessFilter* pf = + preprocessed_layout.empty() ? nullptr : &prep_flt; + APPLY(opr->exec(args.as_megdnn()..., pf, mdn_workspace), inp_val, + out_val); + }, + /* else */ + [&](auto _) { + APPLY(_(megdnn_opr)->exec(args.as_megdnn()..., mdn_workspace), + inp_val, out_val); + }); + } ev_start->record(); if_constexpr()>( [&](auto _) { @@ -327,12 +342,12 @@ typename TimedProfiler::TResult TimedProfiler::prof_impl( while (!ev_end->finished()) { if (timer.get_secs() >= next_report_time) { #if MGB_ENABLE_GETENV - mgb_log_warn( + mgb_log_debug( "profiling conv algo %s already took %.3f/%.3f secs" " (limit can be set by MGB_CONV_PROFILING_TIMEOUT) ", algo->name(), timer.get_secs(), param.actual_timeout); #else - mgb_log_warn( + mgb_log_debug( "profiling conv algo %s already took %.3f/%.3f secs", algo->name(), timer.get_secs(), param.actual_timeout); #endif