mirror of
https://github.com/opencv/opencv.git
synced 2025-06-11 03:33:28 +08:00
G-API: Introduce GAbstractStreamingExecutor
Now GStreamingExecutor is its subclass; others to come
This commit is contained in:
parent
a31fb88fd0
commit
a122f0f248
@ -114,6 +114,7 @@ set(gapi_srcs
|
|||||||
|
|
||||||
# Executor
|
# Executor
|
||||||
src/executor/gabstractexecutor.cpp
|
src/executor/gabstractexecutor.cpp
|
||||||
|
src/executor/gabstractstreamingexecutor.cpp
|
||||||
src/executor/gexecutor.cpp
|
src/executor/gexecutor.cpp
|
||||||
src/executor/gtbbexecutor.cpp
|
src/executor/gtbbexecutor.cpp
|
||||||
src/executor/gstreamingexecutor.cpp
|
src/executor/gstreamingexecutor.cpp
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
// GStreamingCompiled private implementation ///////////////////////////////////
|
// GStreamingCompiled private implementation ///////////////////////////////////
|
||||||
void cv::GStreamingCompiled::Priv::setup(const GMetaArgs &_metaArgs,
|
void cv::GStreamingCompiled::Priv::setup(const GMetaArgs &_metaArgs,
|
||||||
const GMetaArgs &_outMetas,
|
const GMetaArgs &_outMetas,
|
||||||
std::unique_ptr<cv::gimpl::GStreamingExecutor> &&_pE)
|
std::unique_ptr<cv::gimpl::GAbstractStreamingExecutor> &&_pE)
|
||||||
{
|
{
|
||||||
m_metas = _metaArgs;
|
m_metas = _metaArgs;
|
||||||
m_outMetas = _outMetas;
|
m_outMetas = _outMetas;
|
||||||
m_exec = std::move(_pE);
|
m_exec = std::move(_pE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cv::GStreamingCompiled::Priv::setup(std::unique_ptr<cv::gimpl::GStreamingExecutor> &&_pE)
|
void cv::GStreamingCompiled::Priv::setup(std::unique_ptr<cv::gimpl::GAbstractStreamingExecutor> &&_pE)
|
||||||
{
|
{
|
||||||
m_exec = std::move(_pE);
|
m_exec = std::move(_pE);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#define OPENCV_GAPI_GSTREAMING_COMPILED_PRIV_HPP
|
#define OPENCV_GAPI_GSTREAMING_COMPILED_PRIV_HPP
|
||||||
|
|
||||||
#include <memory> // unique_ptr
|
#include <memory> // unique_ptr
|
||||||
#include "executor/gstreamingexecutor.hpp"
|
#include "executor/gabstractstreamingexecutor.hpp"
|
||||||
|
|
||||||
namespace cv {
|
namespace cv {
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ class GAPI_EXPORTS GStreamingCompiled::Priv
|
|||||||
{
|
{
|
||||||
GMetaArgs m_metas; // passed by user
|
GMetaArgs m_metas; // passed by user
|
||||||
GMetaArgs m_outMetas; // inferred by compiler
|
GMetaArgs m_outMetas; // inferred by compiler
|
||||||
std::unique_ptr<cv::gimpl::GStreamingExecutor> m_exec;
|
std::unique_ptr<cv::gimpl::GAbstractStreamingExecutor> m_exec;
|
||||||
|
|
||||||
// NB: Used by python wrapper to clarify input/output types
|
// NB: Used by python wrapper to clarify input/output types
|
||||||
GTypesInfo m_out_info;
|
GTypesInfo m_out_info;
|
||||||
@ -35,8 +35,8 @@ class GAPI_EXPORTS GStreamingCompiled::Priv
|
|||||||
public:
|
public:
|
||||||
void setup(const GMetaArgs &metaArgs,
|
void setup(const GMetaArgs &metaArgs,
|
||||||
const GMetaArgs &outMetas,
|
const GMetaArgs &outMetas,
|
||||||
std::unique_ptr<cv::gimpl::GStreamingExecutor> &&pE);
|
std::unique_ptr<cv::gimpl::GAbstractStreamingExecutor> &&pE);
|
||||||
void setup(std::unique_ptr<cv::gimpl::GStreamingExecutor> &&pE);
|
void setup(std::unique_ptr<cv::gimpl::GAbstractStreamingExecutor> &&pE);
|
||||||
bool isEmpty() const;
|
bool isEmpty() const;
|
||||||
|
|
||||||
const GMetaArgs& metas() const;
|
const GMetaArgs& metas() const;
|
||||||
|
23
modules/gapi/src/executor/gabstractstreamingexecutor.cpp
Normal file
23
modules/gapi/src/executor/gabstractstreamingexecutor.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// This file is part of OpenCV project.
|
||||||
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||||
|
// of this distribution and at http://opencv.org/license.html.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2022 Intel Corporation
|
||||||
|
|
||||||
|
#include "precomp.hpp"
|
||||||
|
|
||||||
|
#include <opencv2/gapi/opencv_includes.hpp>
|
||||||
|
|
||||||
|
#include "executor/gabstractstreamingexecutor.hpp"
|
||||||
|
|
||||||
|
cv::gimpl::GAbstractStreamingExecutor::GAbstractStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
||||||
|
const GCompileArgs &comp_args)
|
||||||
|
: m_orig_graph(std::move(g_model))
|
||||||
|
, m_island_graph(GModel::Graph(*m_orig_graph).metadata()
|
||||||
|
.get<IslandModel>().model)
|
||||||
|
, m_comp_args(comp_args)
|
||||||
|
, m_gim(*m_island_graph)
|
||||||
|
, m_desync(GModel::Graph(*m_orig_graph).metadata()
|
||||||
|
.contains<Desynchronized>())
|
||||||
|
{
|
||||||
|
}
|
49
modules/gapi/src/executor/gabstractstreamingexecutor.hpp
Normal file
49
modules/gapi/src/executor/gabstractstreamingexecutor.hpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// This file is part of OpenCV project.
|
||||||
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||||
|
// of this distribution and at http://opencv.org/license.html.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2022 Intel Corporation
|
||||||
|
|
||||||
|
#ifndef OPENCV_GAPI_GABSTRACT_STREAMING_EXECUTOR_HPP
|
||||||
|
#define OPENCV_GAPI_GABSTRACT_STREAMING_EXECUTOR_HPP
|
||||||
|
|
||||||
|
#include <memory> // unique_ptr, shared_ptr
|
||||||
|
|
||||||
|
#include <ade/graph.hpp>
|
||||||
|
|
||||||
|
#include "backends/common/gbackend.hpp"
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
namespace gimpl {
|
||||||
|
|
||||||
|
class GAbstractStreamingExecutor
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
std::unique_ptr<ade::Graph> m_orig_graph;
|
||||||
|
std::shared_ptr<ade::Graph> m_island_graph;
|
||||||
|
cv::GCompileArgs m_comp_args;
|
||||||
|
|
||||||
|
cv::gimpl::GIslandModel::Graph m_gim; // FIXME: make const?
|
||||||
|
const bool m_desync;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit GAbstractStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
||||||
|
const cv::GCompileArgs &comp_args);
|
||||||
|
virtual ~GAbstractStreamingExecutor() = default;
|
||||||
|
virtual void setSource(GRunArgs &&args) = 0;
|
||||||
|
virtual void start() = 0;
|
||||||
|
virtual bool pull(cv::GRunArgsP &&outs) = 0;
|
||||||
|
virtual bool pull(cv::GOptRunArgsP &&outs) = 0;
|
||||||
|
|
||||||
|
using PyPullResult = std::tuple<bool, cv::util::variant<cv::GRunArgs, cv::GOptRunArgs>>;
|
||||||
|
virtual PyPullResult pull() = 0;
|
||||||
|
|
||||||
|
virtual bool try_pull(cv::GRunArgsP &&outs) = 0;
|
||||||
|
virtual void stop() = 0;
|
||||||
|
virtual bool running() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gimpl
|
||||||
|
} // namespace cv
|
||||||
|
|
||||||
|
#endif // OPENCV_GAPI_GABSTRACT_STREAMING_EXECUTOR_HPP
|
@ -1288,13 +1288,7 @@ public:
|
|||||||
// proper graph reshape and islands recompilation
|
// proper graph reshape and islands recompilation
|
||||||
cv::gimpl::GStreamingExecutor::GStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
cv::gimpl::GStreamingExecutor::GStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
||||||
const GCompileArgs &comp_args)
|
const GCompileArgs &comp_args)
|
||||||
: m_orig_graph(std::move(g_model))
|
: GAbstractStreamingExecutor(std::move(g_model), comp_args)
|
||||||
, m_island_graph(GModel::Graph(*m_orig_graph).metadata()
|
|
||||||
.get<IslandModel>().model)
|
|
||||||
, m_comp_args(comp_args)
|
|
||||||
, m_gim(*m_island_graph)
|
|
||||||
, m_desync(GModel::Graph(*m_orig_graph).metadata()
|
|
||||||
.contains<Desynchronized>())
|
|
||||||
{
|
{
|
||||||
GModel::Graph gm(*m_orig_graph);
|
GModel::Graph gm(*m_orig_graph);
|
||||||
// NB: Right now GIslandModel is acyclic, and all the below code assumes that.
|
// NB: Right now GIslandModel is acyclic, and all the below code assumes that.
|
||||||
@ -1862,7 +1856,7 @@ bool cv::gimpl::GStreamingExecutor::pull(cv::GOptRunArgsP &&outs)
|
|||||||
GAPI_Assert(false && "Unreachable code");
|
GAPI_Assert(false && "Unreachable code");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::tuple<bool, cv::util::variant<cv::GRunArgs, cv::GOptRunArgs>> cv::gimpl::GStreamingExecutor::pull()
|
cv::gimpl::GAbstractStreamingExecutor::PyPullResult cv::gimpl::GStreamingExecutor::pull()
|
||||||
{
|
{
|
||||||
using RunArgs = cv::util::variant<cv::GRunArgs, cv::GOptRunArgs>;
|
using RunArgs = cv::util::variant<cv::GRunArgs, cv::GOptRunArgs>;
|
||||||
bool is_over = false;
|
bool is_over = false;
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
// on concurrent_bounded_queue
|
// on concurrent_bounded_queue
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <memory> // unique_ptr, shared_ptr
|
|
||||||
#include <thread> // thread
|
#include <thread> // thread
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
@ -26,9 +25,7 @@ template<typename T> using QueueClass = cv::gapi::own::concurrent_bounded_queue<
|
|||||||
#endif // TBB
|
#endif // TBB
|
||||||
#include "executor/last_value.hpp"
|
#include "executor/last_value.hpp"
|
||||||
|
|
||||||
#include <ade/graph.hpp>
|
#include "executor/gabstractstreamingexecutor.hpp"
|
||||||
|
|
||||||
#include "backends/common/gbackend.hpp"
|
|
||||||
|
|
||||||
namespace cv {
|
namespace cv {
|
||||||
namespace gimpl {
|
namespace gimpl {
|
||||||
@ -104,7 +101,7 @@ public:
|
|||||||
// FIXME: Currently all GExecutor comments apply also
|
// FIXME: Currently all GExecutor comments apply also
|
||||||
// to this one. Please document it separately in the future.
|
// to this one. Please document it separately in the future.
|
||||||
|
|
||||||
class GStreamingExecutor final
|
class GStreamingExecutor final: public GAbstractStreamingExecutor
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// GStreamingExecutor is a state machine described as follows
|
// GStreamingExecutor is a state machine described as follows
|
||||||
@ -131,15 +128,9 @@ protected:
|
|||||||
RUNNING,
|
RUNNING,
|
||||||
} state = State::STOPPED;
|
} state = State::STOPPED;
|
||||||
|
|
||||||
std::unique_ptr<ade::Graph> m_orig_graph;
|
|
||||||
std::shared_ptr<ade::Graph> m_island_graph;
|
|
||||||
cv::GCompileArgs m_comp_args;
|
|
||||||
cv::GMetaArgs m_last_metas;
|
cv::GMetaArgs m_last_metas;
|
||||||
util::optional<bool> m_reshapable;
|
util::optional<bool> m_reshapable;
|
||||||
|
|
||||||
cv::gimpl::GIslandModel::Graph m_gim; // FIXME: make const?
|
|
||||||
const bool m_desync;
|
|
||||||
|
|
||||||
// FIXME: Naive executor details are here for now
|
// FIXME: Naive executor details are here for now
|
||||||
// but then it should be moved to another place
|
// but then it should be moved to another place
|
||||||
struct OpDesc
|
struct OpDesc
|
||||||
@ -202,14 +193,14 @@ public:
|
|||||||
explicit GStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
explicit GStreamingExecutor(std::unique_ptr<ade::Graph> &&g_model,
|
||||||
const cv::GCompileArgs &comp_args);
|
const cv::GCompileArgs &comp_args);
|
||||||
~GStreamingExecutor();
|
~GStreamingExecutor();
|
||||||
void setSource(GRunArgs &&args);
|
void setSource(GRunArgs &&args) override;
|
||||||
void start();
|
void start() override;
|
||||||
bool pull(cv::GRunArgsP &&outs);
|
bool pull(cv::GRunArgsP &&outs) override;
|
||||||
bool pull(cv::GOptRunArgsP &&outs);
|
bool pull(cv::GOptRunArgsP &&outs) override;
|
||||||
std::tuple<bool, cv::util::variant<cv::GRunArgs, cv::GOptRunArgs>> pull();
|
PyPullResult pull() override;
|
||||||
bool try_pull(cv::GRunArgsP &&outs);
|
bool try_pull(cv::GRunArgsP &&outs) override;
|
||||||
void stop();
|
void stop() override;
|
||||||
bool running() const;
|
bool running() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace gimpl
|
} // namespace gimpl
|
||||||
|
Loading…
Reference in New Issue
Block a user