Restore FEM to be static instance (#12219)

* Restore FEM to be static instance

* Restore frontend manager in ie_read_network.cpp
This commit is contained in:
River Li 2022-07-20 13:09:31 +08:00 committed by GitHub
parent 00fe7be00f
commit 9a3c969cb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 11 additions and 80 deletions

View File

@ -114,9 +114,6 @@ public:
/// \brief Clones the original model
std::shared_ptr<ov::Model> clone() const;
/// \brief Reference to frontend maanager
std::shared_ptr<void> m_femgr;
/// Model outputs
std::vector<ov::Output<ov::Node>> outputs();
ov::Output<ov::Node> output();

View File

@ -716,7 +716,6 @@ private:
element::Type m_element_type;
Shape m_shape{};
std::shared_ptr<ngraph::runtime::AlignedBuffer> m_data;
std::shared_ptr<void> m_femgr;
mutable std::atomic_bool m_all_elements_bitwise_identical{false};
mutable std::atomic_bool m_all_elements_bitwise_identical_checked{false};
bool m_alloc_buffer_on_visit_attributes = true;

View File

@ -34,13 +34,6 @@ BWDCMP_RTTI_DEFINITION(ov::AttributeAdapter<std::shared_ptr<ov::Model>>);
atomic<size_t> ov::Model::m_next_instance_id(0);
namespace ov {
namespace frontend {
class FrontEndManager;
std::shared_ptr<FrontEndManager> get_frontend_manager();
} // namespace frontend
} // namespace ov
namespace {
void check_all_variables_registered(const std::vector<shared_ptr<ov::Node>>& ordered_ops,
@ -199,7 +192,6 @@ void ov::Model::prerequirements(bool detect_variables, bool detect_parameters) {
OV_ITT_SCOPED_TASK(ov::itt::domains::nGraph, "Model::prerequirements");
m_shared_rt_info = std::make_shared<SharedRTInfo>();
m_femgr = ov::frontend::get_frontend_manager();
const auto& ordered_ops = get_ordered_ops();
if (detect_parameters)

View File

@ -17,13 +17,6 @@
using namespace std;
namespace ov {
namespace frontend {
class FrontEndManager;
std::shared_ptr<FrontEndManager> get_frontend_manager();
} // namespace frontend
} // namespace ov
template <typename T>
static inline string to_cpp_string(T value) {
string rc;
@ -57,7 +50,6 @@ ov::op::v0::Constant::Constant(const shared_ptr<ngraph::runtime::Tensor>& tensor
tensor->read(get_data_ptr_nc(), tensor->get_size_in_bytes());
}
constructor_validate_and_infer_types();
m_femgr = ov::frontend::get_frontend_manager();
}
ov::op::v0::Constant::Constant(const element::Type& type,
@ -201,7 +193,6 @@ ov::op::v0::Constant::Constant(bool memset_allocation, const element::Type& type
m_shape(shape) {
allocate_buffer(memset_allocation);
constructor_validate_and_infer_types();
m_femgr = ov::frontend::get_frontend_manager();
}
void ov::op::v0::Constant::allocate_buffer(bool memset_allocation) {
@ -223,7 +214,6 @@ ov::op::v0::Constant::Constant(const Constant& other) {
m_data = other.m_data;
update_identical_flags(other.m_all_elements_bitwise_identical_checked, other.m_all_elements_bitwise_identical);
constructor_validate_and_infer_types();
m_femgr = ov::frontend::get_frontend_manager();
}
ov::op::v0::Constant::Constant(const Constant& other, const ov::Shape& new_shape) {
@ -235,14 +225,9 @@ ov::op::v0::Constant::Constant(const Constant& other, const ov::Shape& new_shape
m_data = other.m_data;
update_identical_flags(other.m_all_elements_bitwise_identical_checked, other.m_all_elements_bitwise_identical);
constructor_validate_and_infer_types();
m_femgr = ov::frontend::get_frontend_manager();
}
ov::op::v0::Constant::~Constant() {
// guarantee m_data is released before femgr
m_data = nullptr;
m_femgr = nullptr;
}
ov::op::v0::Constant::~Constant() = default;
string ov::op::v0::Constant::convert_value_to_string(size_t index) const {
string rc;

View File

@ -22,8 +22,6 @@ using FrontEndFactory = std::function<FrontEnd::Ptr()>;
/// frontends This is a main frontend entry point for client applications
class FRONTEND_API FrontEndManager final {
public:
using Ptr = std::shared_ptr<FrontEndManager>;
/// \brief Default constructor. Searches and loads of available frontends
FrontEndManager();
@ -81,7 +79,6 @@ private:
template <>
FRONTEND_API FrontEnd::Ptr FrontEndManager::load_by_model(const std::vector<ov::Any>& variants);
FRONTEND_API FrontEndManager::Ptr get_frontend_manager();
// --------- Plugin exporting information --------------

View File

@ -242,40 +242,3 @@ template <>
FrontEnd::Ptr FrontEndManager::load_by_model(const std::vector<ov::Any>& variants) {
return load_by_model_impl(variants);
}
namespace ov {
namespace frontend {
namespace {
class FrontEndManagerHolder {
std::mutex m_mutex;
std::weak_ptr<FrontEndManager> m_manager;
public:
FrontEndManagerHolder(const FrontEndManagerHolder&) = delete;
FrontEndManagerHolder& operator=(const FrontEndManagerHolder&) = delete;
FrontEndManagerHolder() = default;
FrontEndManager::Ptr get() {
std::lock_guard<std::mutex> lock(m_mutex);
auto manager = m_manager.lock();
if (!manager)
m_manager = manager = std::make_shared<FrontEndManager>();
return manager;
}
};
FrontEndManagerHolder& get_frontend_manager_holder() {
static FrontEndManagerHolder frontend_manager_holder;
return frontend_manager_holder;
}
} // namespace
FrontEndManager::Ptr get_frontend_manager() {
return get_frontend_manager_holder().get();
}
} // namespace frontend
} // namespace ov

View File

@ -55,11 +55,6 @@ using namespace std::placeholders;
namespace ov {
namespace frontend {
class FrontEndManager;
std::shared_ptr<FrontEndManager> get_frontend_manager();
} // namespace frontend
// Specify the default device when no device name is provided.
const std::string DEFAULT_DEVICE_NAME = "DEFAULT_DEVICE";
@ -284,7 +279,6 @@ class CoreImpl : public ie::ICore, public std::enable_shared_from_this<ie::ICore
}
};
std::shared_ptr<void> frontEndManagerPtr;
ExecutorManager::Ptr executorManagerPtr;
mutable std::unordered_set<std::string> opsetNames;
// TODO: make extensions to be optional with conditional compilation
@ -453,7 +447,6 @@ class CoreImpl : public ie::ICore, public std::enable_shared_from_this<ie::ICore
public:
CoreImpl(bool _newAPI) : newAPI(_newAPI) {
executorManagerPtr = executorManager();
frontEndManagerPtr = ov::frontend::get_frontend_manager();
opsetNames.insert("opset1");
opsetNames.insert("opset2");
opsetNames.insert("opset3");

View File

@ -440,6 +440,11 @@ CNNNetwork convert_to_cnnnetwork(std::shared_ptr<ngraph::Function>& function,
OPENVINO_SUPPRESS_DEPRECATED_END
}
ov::frontend::FrontEndManager& get_frontend_manager() {
static ov::frontend::FrontEndManager manager;
return manager;
}
std::vector<ov::Extension::Ptr> wrap_old_extensions(const std::vector<InferenceEngine::IExtensionPtr>& exts) {
std::vector<ov::Extension::Ptr> extensions;
for (const auto& ext : exts) {
@ -483,7 +488,7 @@ CNNNetwork details::ReadNetwork(const std::string& modelPath,
#endif
// Try to load with FrontEndManager
auto manager = ov::frontend::get_frontend_manager();
auto& manager = get_frontend_manager();
ov::frontend::FrontEnd::Ptr FE;
ov::frontend::InputModel::Ptr inputModel;
@ -498,7 +503,7 @@ CNNNetwork details::ReadNetwork(const std::string& modelPath,
params.emplace_back(weights_path);
}
FE = manager->load_by_model(params);
FE = manager.load_by_model(params);
if (FE) {
FE->add_extension(ov_exts);
if (!exts.empty())
@ -513,7 +518,7 @@ CNNNetwork details::ReadNetwork(const std::string& modelPath,
const auto fileExt = modelPath.substr(modelPath.find_last_of(".") + 1);
std::string FEs;
for (const auto& fe_name : manager->get_available_front_ends())
for (const auto& fe_name : manager.get_available_front_ends())
FEs += fe_name + " ";
IE_THROW(NetworkNotRead) << "Unable to read the model: " << modelPath
<< " Please check that model format: " << fileExt
@ -550,7 +555,7 @@ CNNNetwork details::ReadNetwork(const std::string& model,
#endif // ENABLE_IR_V7_READER
// Try to load with FrontEndManager
auto manager = ov::frontend::get_frontend_manager();
auto& manager = get_frontend_manager();
ov::frontend::FrontEnd::Ptr FE;
ov::frontend::InputModel::Ptr inputModel;
@ -562,7 +567,7 @@ CNNNetwork details::ReadNetwork(const std::string& model,
params.emplace_back(weights_buffer);
}
FE = manager->load_by_model(params);
FE = manager.load_by_model(params);
if (FE) {
FE->add_extension(ov_exts);
if (!exts.empty())