From 1113c9ab1029f272abf184b78582d03ed0396418 Mon Sep 17 00:00:00 2001 From: TolyaTalamanov Date: Tue, 4 Oct 2022 08:37:56 +0000 Subject: [PATCH 1/4] Support num_iters criteria for pipeline tool --- .../gapi/samples/pipeline_modeling_tool.cpp | 29 +++- .../pipeline_modeling_tool/pipeline.hpp | 134 +++++++++--------- .../pipeline_builder.hpp | 52 +++++++ .../samples/pipeline_modeling_tool/utils.hpp | 6 + 4 files changed, 151 insertions(+), 70 deletions(-) diff --git a/modules/gapi/samples/pipeline_modeling_tool.cpp b/modules/gapi/samples/pipeline_modeling_tool.cpp index fda1c62985..ca70515083 100644 --- a/modules/gapi/samples/pipeline_modeling_tool.cpp +++ b/modules/gapi/samples/pipeline_modeling_tool.cpp @@ -347,10 +347,14 @@ int main(int argc, char* argv[]) { std::map{{"CACHE_DIR", cached_dir}}; } - const double work_time_ms = - check_and_read(fs, "work_time", "Config"); - if (work_time_ms < 0) { - throw std::logic_error("work_time must be positive"); + auto opt_work_time_ms = readOpt(fs["work_time"]); + cv::optional opt_work_time_mcs; + if (opt_work_time_ms) { + const double work_time_ms = opt_work_time_ms.value(); + if (work_time_ms < 0) { + throw std::logic_error("work_time must be positive"); + } + opt_work_time_mcs = cv::optional(utils::ms_to_mcs(work_time_ms)); } auto pipelines_fn = check_and_get_fn(fs, "Pipelines", "Config"); @@ -369,6 +373,21 @@ int main(int argc, char* argv[]) { for (const auto& name : exec_list) { const auto& pl_fn = check_and_get_fn(pipelines_fn, name, "Pipelines"); builder.setName(name); + StopCriteria::Ptr stop_criteria; + auto opt_num_iters = readOpt(pl_fn["num_iters"]); + // NB: num_iters for specific pipeline takes priority over global work_time. + if (opt_num_iters) { + stop_criteria.reset(new NumItersCriteria(opt_num_iters.value())); + } else if (opt_work_time_mcs) { + stop_criteria.reset(new ElapsedTimeCriteria(opt_work_time_mcs.value())); + } else { + throw std::logic_error( + "Failed: Pipeline " + name + " doesn't have stop criteria!\n" + "Please specify either work_time: in the config root" + " or num_iters: for specific pipeline."); + } + builder.setStopCriteria(std::move(stop_criteria)); + // NB: Set source { const auto& src_fn = check_and_get_fn(pl_fn, "source", name); @@ -464,7 +483,7 @@ int main(int argc, char* argv[]) { for (size_t i = 0; i < pipelines.size(); ++i) { threads[i] = std::thread([&, i]() { try { - pipelines[i]->run(work_time_ms); + pipelines[i]->run(); } catch (...) { eptrs[i] = std::current_exception(); } diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp index 91107c6dad..a6c2b868b4 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp @@ -40,6 +40,16 @@ std::string PerfReport::toStr(bool expand) const { return ss.str(); } +class StopCriteria { +public: + using Ptr = std::unique_ptr; + + virtual void start() = 0; + virtual void iter() = 0; + virtual bool isOver() = 0; + virtual ~StopCriteria() = default; +}; + class Pipeline { public: using Ptr = std::shared_ptr; @@ -47,28 +57,28 @@ public: Pipeline(std::string&& name, cv::GComputation&& comp, std::shared_ptr&& src, + StopCriteria::Ptr stop_criteria, cv::GCompileArgs&& args, const size_t num_outputs); void compile(); - void run(double work_time_ms); + void run(); + const PerfReport& report() const; const std::string& name() const { return m_name;} virtual ~Pipeline() = default; protected: - struct RunPerf { - int64_t elapsed = 0; - std::vector latencies; - }; - - virtual void _compile() = 0; - virtual RunPerf _run(double work_time_ms) = 0; + virtual void _compile() = 0; + virtual int64_t run_iter() = 0; + virtual void init() {}; + virtual void deinit() {}; std::string m_name; cv::GComputation m_comp; std::shared_ptr m_src; + StopCriteria::Ptr m_stop_criteria; cv::GCompileArgs m_args; size_t m_num_outputs; PerfReport m_perf; @@ -77,11 +87,13 @@ protected: Pipeline::Pipeline(std::string&& name, cv::GComputation&& comp, std::shared_ptr&& src, + StopCriteria::Ptr stop_criteria, cv::GCompileArgs&& args, const size_t num_outputs) : m_name(std::move(name)), m_comp(std::move(comp)), m_src(std::move(src)), + m_stop_criteria(std::move(stop_criteria)), m_args(std::move(args)), m_num_outputs(num_outputs) { m_perf.name = m_name; @@ -94,11 +106,23 @@ void Pipeline::compile() { }); } -void Pipeline::run(double work_time_ms) { - auto run_perf = _run(work_time_ms); +void Pipeline::run() { + using namespace std::chrono; + + init(); + auto start = high_resolution_clock::now(); + m_stop_criteria->start(); + while (true) { + m_perf.latencies.push_back(run_iter()); + m_perf.elapsed = duration_cast(high_resolution_clock::now() - start).count(); + m_stop_criteria->iter(); + + if (m_stop_criteria->isOver()) { + deinit(); + break; + } + } - m_perf.elapsed = run_perf.elapsed; - m_perf.latencies = std::move(run_perf.latencies); m_perf.avg_latency = utils::avg(m_perf.latencies); m_perf.min_latency = utils::min(m_perf.latencies); m_perf.max_latency = utils::max(m_perf.latencies); @@ -113,7 +137,6 @@ void Pipeline::run(double work_time_ms) { m_perf.throughput = (m_perf.latencies.size() / static_cast(m_perf.elapsed)) * 1000; - } const PerfReport& Pipeline::report() const { @@ -131,39 +154,31 @@ private: cv::GCompileArgs(m_args)); } - Pipeline::RunPerf _run(double work_time_ms) override { - // NB: Setup. + virtual void init() override { using namespace std::chrono; // NB: N-1 buffers + timestamp. - std::vector out_mats(m_num_outputs - 1); - int64_t start_ts = -1; - cv::GRunArgsP pipeline_outputs; - for (auto& m : out_mats) { - pipeline_outputs += cv::gout(m); + m_out_mats.resize(m_num_outputs - 1); + for (auto& m : m_out_mats) { + m_pipeline_outputs += cv::gout(m); } - pipeline_outputs += cv::gout(start_ts); + m_pipeline_outputs += cv::gout(m_start_ts); m_compiled.setSource(m_src); - - // NB: Start execution & measure performance statistics. - Pipeline::RunPerf perf; - auto start = high_resolution_clock::now(); m_compiled.start(); - while (m_compiled.pull(cv::GRunArgsP{pipeline_outputs})) { - int64_t latency = utils::timestamp() - start_ts; - - perf.latencies.push_back(latency); - perf.elapsed = duration_cast( - high_resolution_clock::now() - start).count(); - - if (perf.elapsed >= work_time_ms) { - m_compiled.stop(); - break; - } - }; - return perf; + } + + virtual void deinit() override { + m_compiled.stop(); + } + + virtual int64_t run_iter() override { + m_compiled.pull(cv::GRunArgsP{m_pipeline_outputs}); + return utils::timestamp() - m_start_ts; } cv::GStreamingCompiled m_compiled; + cv::GRunArgsP m_pipeline_outputs; + std::vector m_out_mats; + int64_t m_start_ts; }; class RegularPipeline : public Pipeline { @@ -177,37 +192,26 @@ private: cv::GCompileArgs(m_args)); } - Pipeline::RunPerf _run(double work_time_ms) override { - // NB: Setup - using namespace std::chrono; - cv::gapi::wip::Data d; - std::vector out_mats(m_num_outputs); - cv::GRunArgsP pipeline_outputs; - for (auto& m : out_mats) { - pipeline_outputs += cv::gout(m); + virtual void init() override { + m_out_mats.resize(m_num_outputs); + for (auto& m : m_out_mats) { + m_pipeline_outputs += cv::gout(m); } + } - // NB: Start execution & measure performance statistics. - Pipeline::RunPerf perf; - auto start = high_resolution_clock::now(); - while (m_src->pull(d)) { - auto in_mat = cv::util::get(d); - int64_t latency = utils::measure([&]{ - m_compiled(cv::gin(in_mat), cv::GRunArgsP{pipeline_outputs}); - }); - - perf.latencies.push_back(latency); - perf.elapsed = duration_cast( - high_resolution_clock::now() - start).count(); - - if (perf.elapsed >= work_time_ms) { - break; - } - }; - return perf; + virtual int64_t run_iter() override { + using namespace std::chrono; + cv::gapi::wip::Data d; + m_src->pull(d); + auto in_mat = cv::util::get(d); + return utils::measure([&]{ + m_compiled(cv::gin(in_mat), cv::GRunArgsP{m_pipeline_outputs}); + }); } - cv::GCompiled m_compiled; + cv::GCompiled m_compiled; + cv::GRunArgsP m_pipeline_outputs; + std::vector m_out_mats; }; enum class PLMode { diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp index 094f4235e3..56e63ff67b 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp @@ -262,6 +262,49 @@ struct InferParams { cv::util::optional out_precision; }; +class ElapsedTimeCriteria : public StopCriteria { +public: + ElapsedTimeCriteria(int64_t work_time_mcs) : m_work_time_mcs(work_time_mcs) { }; + + void start() override { + m_start_ts = m_curr_ts = utils::timestamp(); + } + + void iter() override { + m_curr_ts = utils::timestamp(); + } + + bool isOver() override { + return (m_curr_ts - m_start_ts) >= m_work_time_mcs; + } + +private: + int64_t m_work_time_mcs; + int64_t m_start_ts = -1; + int64_t m_curr_ts = -1; +}; + +class NumItersCriteria : public StopCriteria { +public: + NumItersCriteria(int64_t num_iters) : m_num_iters(num_iters) { }; + + void start() override { + m_curr_iters = 0; + } + + void iter() override { + ++m_curr_iters; + } + + bool isOver() override { + return m_curr_iters == m_num_iters; + } + +private: + int64_t m_num_iters; + int64_t m_curr_iters = 0; +}; + class PipelineBuilder { public: PipelineBuilder(); @@ -279,6 +322,7 @@ public: void setDumpFilePath(const std::string& dump); void setQueueCapacity(const size_t qc); void setName(const std::string& name); + void setStopCriteria(StopCriteria::Ptr stop_criteria); Pipeline::Ptr build(); @@ -306,6 +350,7 @@ private: std::shared_ptr src; PLMode mode = PLMode::STREAMING; std::string name; + StopCriteria::Ptr stop_criteria; }; std::unique_ptr m_state; @@ -432,6 +477,10 @@ void PipelineBuilder::setName(const std::string& name) { m_state->name = name; } +void PipelineBuilder::setStopCriteria(StopCriteria::Ptr stop_criteria) { + m_state->stop_criteria = std::move(stop_criteria); +} + static bool visit(Node::Ptr node, std::vector& sorted, std::unordered_map& visited) { @@ -590,6 +639,7 @@ Pipeline::Ptr PipelineBuilder::construct() { } } + GAPI_Assert(m_state->stop_criteria); if (m_state->mode == PLMode::STREAMING) { GAPI_Assert(graph_inputs.size() == 1); GAPI_Assert(cv::util::holds_alternative(graph_inputs[0])); @@ -605,6 +655,7 @@ Pipeline::Ptr PipelineBuilder::construct() { cv::GProtoInputArgs{graph_inputs}, cv::GProtoOutputArgs{graph_outputs}), std::move(m_state->src), + std::move(m_state->stop_criteria), std::move(m_state->compile_args), graph_outputs.size()); } @@ -614,6 +665,7 @@ Pipeline::Ptr PipelineBuilder::construct() { cv::GProtoInputArgs{graph_inputs}, cv::GProtoOutputArgs{graph_outputs}), std::move(m_state->src), + std::move(m_state->stop_criteria), std::move(m_state->compile_args), graph_outputs.size()); } diff --git a/modules/gapi/samples/pipeline_modeling_tool/utils.hpp b/modules/gapi/samples/pipeline_modeling_tool/utils.hpp index 6eb6bb7202..c0f0897c35 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/utils.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/utils.hpp @@ -119,6 +119,12 @@ T min(const std::vector& vec) { return *std::min_element(vec.begin(), vec.end()); } +template +int64_t ms_to_mcs(T ms) { + using namespace std::chrono; + return duration_cast(duration(ms)).count(); +} + } // namespace utils #endif // OPENCV_GAPI_PIPELINE_MODELING_TOOL_UTILS_HPP From 9f88a6587386136f574abfdca87ee41f4c506311 Mon Sep 17 00:00:00 2001 From: TolyaTalamanov Date: Tue, 4 Oct 2022 12:10:49 +0000 Subject: [PATCH 2/4] Fix functional pipeline tool tests --- .../pipeline_modeling_tool/pipeline.hpp | 8 ++-- .../pipeline_builder.hpp | 4 +- .../test_pipeline_modeling_tool.py | 37 ++++++++++++++----- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp index a6c2b868b4..440f624b79 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp @@ -44,9 +44,9 @@ class StopCriteria { public: using Ptr = std::unique_ptr; - virtual void start() = 0; - virtual void iter() = 0; - virtual bool isOver() = 0; + virtual void start() = 0; + virtual void iter() = 0; + virtual bool done() = 0; virtual ~StopCriteria() = default; }; @@ -117,7 +117,7 @@ void Pipeline::run() { m_perf.elapsed = duration_cast(high_resolution_clock::now() - start).count(); m_stop_criteria->iter(); - if (m_stop_criteria->isOver()) { + if (m_stop_criteria->done()) { deinit(); break; } diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp index 56e63ff67b..3615032ead 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp @@ -274,7 +274,7 @@ public: m_curr_ts = utils::timestamp(); } - bool isOver() override { + bool done() override { return (m_curr_ts - m_start_ts) >= m_work_time_mcs; } @@ -296,7 +296,7 @@ public: ++m_curr_iters; } - bool isOver() override { + bool done() override { return m_curr_iters == m_num_iters; } diff --git a/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py b/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py index d56a0399e9..43e979ed9a 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py +++ b/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py @@ -26,14 +26,6 @@ def test_error_no_config_exists(): assert 'Failed to open config file: not_existing_cfg.yml' in out -def test_error_no_work_time(): - cfg_file = """\"%YAML:1.0\" """ - - exec_str = '{} --cfg={}'.format(pipeline_modeling_tool, cfg_file) - out = get_output(exec_str) - assert out.startswith('Config must contain field: work_time') - - def test_error_work_time_not_positive(): cfg_file = """\"%YAML:1.0 work_time: -1\" """ @@ -77,7 +69,8 @@ def test_error_no_source(): cfg_file = """\"%YAML:1.0 work_time: 1000 Pipelines: - PL1:\" """ + PL1: + queue_capacity: 1\" """ exec_str = '{} --cfg={}'.format(pipeline_modeling_tool, cfg_file) out = get_output(exec_str) @@ -982,3 +975,29 @@ Pipelines: check(cfg_file, -3) check(cfg_file, 0) + + +def test_error_no_worktime_and_num_iters(): + cfg_file = """\"%YAML:1.0 +Pipelines: + PL1: + source: + name: 'Src' + latency: 20 + output: + dims: [1,1] + precision: 'U8' + nodes: + - name: 'Node0' + type: 'Dummy' + time: 0.2 + output: + dims: [1,2,3,4] + precision: 'U8' + edges: + - from: 'Src' + to: 'Node0'\" """ + + exec_str = '{} --cfg={}'.format(pipeline_modeling_tool, cfg_file) + out = get_output(exec_str) + assert out.startswith('Failed: Pipeline PL1 doesn\'t have stop criteria!') From 839321642eb106e9bad0e38e9ddf1a8219f3cf94 Mon Sep 17 00:00:00 2001 From: TolyaTalamanov Date: Wed, 5 Oct 2022 12:01:45 +0000 Subject: [PATCH 3/4] Move impl from class --- .../pipeline_builder.hpp | 64 ++++++++++++------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp index 3615032ead..c6b8fd94b7 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp @@ -264,19 +264,11 @@ struct InferParams { class ElapsedTimeCriteria : public StopCriteria { public: - ElapsedTimeCriteria(int64_t work_time_mcs) : m_work_time_mcs(work_time_mcs) { }; + ElapsedTimeCriteria(int64_t work_time_mcs); - void start() override { - m_start_ts = m_curr_ts = utils::timestamp(); - } - - void iter() override { - m_curr_ts = utils::timestamp(); - } - - bool done() override { - return (m_curr_ts - m_start_ts) >= m_work_time_mcs; - } + void start() override; + void iter() override; + bool done() override; private: int64_t m_work_time_mcs; @@ -284,27 +276,51 @@ private: int64_t m_curr_ts = -1; }; -class NumItersCriteria : public StopCriteria { -public: - NumItersCriteria(int64_t num_iters) : m_num_iters(num_iters) { }; +ElapsedTimeCriteria::ElapsedTimeCriteria(int64_t work_time_mcs) + : m_work_time_mcs(work_time_mcs) { +}; - void start() override { - m_curr_iters = 0; - } +void ElapsedTimeCriteria::start() { + m_start_ts = m_curr_ts = utils::timestamp(); +} - void iter() override { - ++m_curr_iters; - } +void ElapsedTimeCriteria::iter() { + m_curr_ts = utils::timestamp(); +} - bool done() override { - return m_curr_iters == m_num_iters; - } +bool ElapsedTimeCriteria::done() { + return (m_curr_ts - m_start_ts) >= m_work_time_mcs; +} + +class NumItersCriteria : public StopCriteria { +public: + NumItersCriteria(int64_t num_iters); + + void start() override; + void iter() override; + bool done() override; private: int64_t m_num_iters; int64_t m_curr_iters = 0; }; +NumItersCriteria::NumItersCriteria(int64_t num_iters) + : m_num_iters(num_iters) { +} + +void NumItersCriteria::start() { + m_curr_iters = 0; +} + +void NumItersCriteria::iter() { + ++m_curr_iters; +} + +bool NumItersCriteria::done() { + return m_curr_iters == m_num_iters; +} + class PipelineBuilder { public: PipelineBuilder(); From 5f50e7bafe57152663a354f1639962becb99bd78 Mon Sep 17 00:00:00 2001 From: TolyaTalamanov Date: Thu, 6 Oct 2022 09:41:30 +0000 Subject: [PATCH 4/4] Criteria -> Criterion --- .../gapi/samples/pipeline_modeling_tool.cpp | 10 ++--- .../pipeline_modeling_tool/pipeline.hpp | 20 +++++----- .../pipeline_builder.hpp | 38 +++++++++---------- .../test_pipeline_modeling_tool.py | 2 +- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/modules/gapi/samples/pipeline_modeling_tool.cpp b/modules/gapi/samples/pipeline_modeling_tool.cpp index ca70515083..7c202642a9 100644 --- a/modules/gapi/samples/pipeline_modeling_tool.cpp +++ b/modules/gapi/samples/pipeline_modeling_tool.cpp @@ -373,20 +373,20 @@ int main(int argc, char* argv[]) { for (const auto& name : exec_list) { const auto& pl_fn = check_and_get_fn(pipelines_fn, name, "Pipelines"); builder.setName(name); - StopCriteria::Ptr stop_criteria; + StopCriterion::Ptr stop_criterion; auto opt_num_iters = readOpt(pl_fn["num_iters"]); // NB: num_iters for specific pipeline takes priority over global work_time. if (opt_num_iters) { - stop_criteria.reset(new NumItersCriteria(opt_num_iters.value())); + stop_criterion.reset(new NumItersCriterion(opt_num_iters.value())); } else if (opt_work_time_mcs) { - stop_criteria.reset(new ElapsedTimeCriteria(opt_work_time_mcs.value())); + stop_criterion.reset(new ElapsedTimeCriterion(opt_work_time_mcs.value())); } else { throw std::logic_error( - "Failed: Pipeline " + name + " doesn't have stop criteria!\n" + "Failed: Pipeline " + name + " doesn't have stop criterion!\n" "Please specify either work_time: in the config root" " or num_iters: for specific pipeline."); } - builder.setStopCriteria(std::move(stop_criteria)); + builder.setStopCriterion(std::move(stop_criterion)); // NB: Set source { diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp index 440f624b79..ac192cba52 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline.hpp @@ -40,14 +40,14 @@ std::string PerfReport::toStr(bool expand) const { return ss.str(); } -class StopCriteria { +class StopCriterion { public: - using Ptr = std::unique_ptr; + using Ptr = std::unique_ptr; virtual void start() = 0; virtual void iter() = 0; virtual bool done() = 0; - virtual ~StopCriteria() = default; + virtual ~StopCriterion() = default; }; class Pipeline { @@ -57,7 +57,7 @@ public: Pipeline(std::string&& name, cv::GComputation&& comp, std::shared_ptr&& src, - StopCriteria::Ptr stop_criteria, + StopCriterion::Ptr stop_criterion, cv::GCompileArgs&& args, const size_t num_outputs); @@ -78,7 +78,7 @@ protected: std::string m_name; cv::GComputation m_comp; std::shared_ptr m_src; - StopCriteria::Ptr m_stop_criteria; + StopCriterion::Ptr m_stop_criterion; cv::GCompileArgs m_args; size_t m_num_outputs; PerfReport m_perf; @@ -87,13 +87,13 @@ protected: Pipeline::Pipeline(std::string&& name, cv::GComputation&& comp, std::shared_ptr&& src, - StopCriteria::Ptr stop_criteria, + StopCriterion::Ptr stop_criterion, cv::GCompileArgs&& args, const size_t num_outputs) : m_name(std::move(name)), m_comp(std::move(comp)), m_src(std::move(src)), - m_stop_criteria(std::move(stop_criteria)), + m_stop_criterion(std::move(stop_criterion)), m_args(std::move(args)), m_num_outputs(num_outputs) { m_perf.name = m_name; @@ -111,13 +111,13 @@ void Pipeline::run() { init(); auto start = high_resolution_clock::now(); - m_stop_criteria->start(); + m_stop_criterion->start(); while (true) { m_perf.latencies.push_back(run_iter()); m_perf.elapsed = duration_cast(high_resolution_clock::now() - start).count(); - m_stop_criteria->iter(); + m_stop_criterion->iter(); - if (m_stop_criteria->done()) { + if (m_stop_criterion->done()) { deinit(); break; } diff --git a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp index c6b8fd94b7..6ac6374f07 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp +++ b/modules/gapi/samples/pipeline_modeling_tool/pipeline_builder.hpp @@ -262,9 +262,9 @@ struct InferParams { cv::util::optional out_precision; }; -class ElapsedTimeCriteria : public StopCriteria { +class ElapsedTimeCriterion : public StopCriterion { public: - ElapsedTimeCriteria(int64_t work_time_mcs); + ElapsedTimeCriterion(int64_t work_time_mcs); void start() override; void iter() override; @@ -276,25 +276,25 @@ private: int64_t m_curr_ts = -1; }; -ElapsedTimeCriteria::ElapsedTimeCriteria(int64_t work_time_mcs) +ElapsedTimeCriterion::ElapsedTimeCriterion(int64_t work_time_mcs) : m_work_time_mcs(work_time_mcs) { }; -void ElapsedTimeCriteria::start() { +void ElapsedTimeCriterion::start() { m_start_ts = m_curr_ts = utils::timestamp(); } -void ElapsedTimeCriteria::iter() { +void ElapsedTimeCriterion::iter() { m_curr_ts = utils::timestamp(); } -bool ElapsedTimeCriteria::done() { +bool ElapsedTimeCriterion::done() { return (m_curr_ts - m_start_ts) >= m_work_time_mcs; } -class NumItersCriteria : public StopCriteria { +class NumItersCriterion : public StopCriterion { public: - NumItersCriteria(int64_t num_iters); + NumItersCriterion(int64_t num_iters); void start() override; void iter() override; @@ -305,19 +305,19 @@ private: int64_t m_curr_iters = 0; }; -NumItersCriteria::NumItersCriteria(int64_t num_iters) +NumItersCriterion::NumItersCriterion(int64_t num_iters) : m_num_iters(num_iters) { } -void NumItersCriteria::start() { +void NumItersCriterion::start() { m_curr_iters = 0; } -void NumItersCriteria::iter() { +void NumItersCriterion::iter() { ++m_curr_iters; } -bool NumItersCriteria::done() { +bool NumItersCriterion::done() { return m_curr_iters == m_num_iters; } @@ -338,7 +338,7 @@ public: void setDumpFilePath(const std::string& dump); void setQueueCapacity(const size_t qc); void setName(const std::string& name); - void setStopCriteria(StopCriteria::Ptr stop_criteria); + void setStopCriterion(StopCriterion::Ptr stop_criterion); Pipeline::Ptr build(); @@ -366,7 +366,7 @@ private: std::shared_ptr src; PLMode mode = PLMode::STREAMING; std::string name; - StopCriteria::Ptr stop_criteria; + StopCriterion::Ptr stop_criterion; }; std::unique_ptr m_state; @@ -493,8 +493,8 @@ void PipelineBuilder::setName(const std::string& name) { m_state->name = name; } -void PipelineBuilder::setStopCriteria(StopCriteria::Ptr stop_criteria) { - m_state->stop_criteria = std::move(stop_criteria); +void PipelineBuilder::setStopCriterion(StopCriterion::Ptr stop_criterion) { + m_state->stop_criterion = std::move(stop_criterion); } static bool visit(Node::Ptr node, @@ -655,7 +655,7 @@ Pipeline::Ptr PipelineBuilder::construct() { } } - GAPI_Assert(m_state->stop_criteria); + GAPI_Assert(m_state->stop_criterion); if (m_state->mode == PLMode::STREAMING) { GAPI_Assert(graph_inputs.size() == 1); GAPI_Assert(cv::util::holds_alternative(graph_inputs[0])); @@ -671,7 +671,7 @@ Pipeline::Ptr PipelineBuilder::construct() { cv::GProtoInputArgs{graph_inputs}, cv::GProtoOutputArgs{graph_outputs}), std::move(m_state->src), - std::move(m_state->stop_criteria), + std::move(m_state->stop_criterion), std::move(m_state->compile_args), graph_outputs.size()); } @@ -681,7 +681,7 @@ Pipeline::Ptr PipelineBuilder::construct() { cv::GProtoInputArgs{graph_inputs}, cv::GProtoOutputArgs{graph_outputs}), std::move(m_state->src), - std::move(m_state->stop_criteria), + std::move(m_state->stop_criterion), std::move(m_state->compile_args), graph_outputs.size()); } diff --git a/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py b/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py index 43e979ed9a..d1701d9ad2 100644 --- a/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py +++ b/modules/gapi/samples/pipeline_modeling_tool/test_pipeline_modeling_tool.py @@ -1000,4 +1000,4 @@ Pipelines: exec_str = '{} --cfg={}'.format(pipeline_modeling_tool, cfg_file) out = get_output(exec_str) - assert out.startswith('Failed: Pipeline PL1 doesn\'t have stop criteria!') + assert out.startswith('Failed: Pipeline PL1 doesn\'t have stop criterion!')