From 9a3c969cb73776781ec0542a54f6f42e07efff91 Mon Sep 17 00:00:00 2001 From: River Li Date: Wed, 20 Jul 2022 13:09:31 +0800 Subject: [PATCH] Restore FEM to be static instance (#12219) * Restore FEM to be static instance * Restore frontend manager in ie_read_network.cpp --- src/core/include/openvino/core/model.hpp | 3 -- src/core/include/openvino/op/constant.hpp | 1 - src/core/src/model.cpp | 8 ---- src/core/src/op/constant.cpp | 17 +-------- .../include/openvino/frontend/manager.hpp | 3 -- src/frontends/common/src/manager.cpp | 37 ------------------- src/inference/src/ie_core.cpp | 7 ---- src/inference/src/ie_network_reader.cpp | 15 +++++--- 8 files changed, 11 insertions(+), 80 deletions(-) diff --git a/src/core/include/openvino/core/model.hpp b/src/core/include/openvino/core/model.hpp index 0c3f005c3f2..566d79dcd89 100644 --- a/src/core/include/openvino/core/model.hpp +++ b/src/core/include/openvino/core/model.hpp @@ -114,9 +114,6 @@ public: /// \brief Clones the original model std::shared_ptr clone() const; - /// \brief Reference to frontend maanager - std::shared_ptr m_femgr; - /// Model outputs std::vector> outputs(); ov::Output output(); diff --git a/src/core/include/openvino/op/constant.hpp b/src/core/include/openvino/op/constant.hpp index 444fe49d17d..9f8516421ab 100644 --- a/src/core/include/openvino/op/constant.hpp +++ b/src/core/include/openvino/op/constant.hpp @@ -716,7 +716,6 @@ private: element::Type m_element_type; Shape m_shape{}; std::shared_ptr m_data; - std::shared_ptr 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; diff --git a/src/core/src/model.cpp b/src/core/src/model.cpp index 6ca86d73de0..4ba4ed379a3 100644 --- a/src/core/src/model.cpp +++ b/src/core/src/model.cpp @@ -34,13 +34,6 @@ BWDCMP_RTTI_DEFINITION(ov::AttributeAdapter>); atomic ov::Model::m_next_instance_id(0); -namespace ov { -namespace frontend { -class FrontEndManager; -std::shared_ptr get_frontend_manager(); -} // namespace frontend -} // namespace ov - namespace { void check_all_variables_registered(const std::vector>& 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(); - m_femgr = ov::frontend::get_frontend_manager(); const auto& ordered_ops = get_ordered_ops(); if (detect_parameters) diff --git a/src/core/src/op/constant.cpp b/src/core/src/op/constant.cpp index 8c205e18a1c..879f46b6476 100644 --- a/src/core/src/op/constant.cpp +++ b/src/core/src/op/constant.cpp @@ -17,13 +17,6 @@ using namespace std; -namespace ov { -namespace frontend { -class FrontEndManager; -std::shared_ptr get_frontend_manager(); -} // namespace frontend -} // namespace ov - template static inline string to_cpp_string(T value) { string rc; @@ -57,7 +50,6 @@ ov::op::v0::Constant::Constant(const shared_ptr& 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; diff --git a/src/frontends/common/include/openvino/frontend/manager.hpp b/src/frontends/common/include/openvino/frontend/manager.hpp index 3c11d429a78..d5885e16595 100644 --- a/src/frontends/common/include/openvino/frontend/manager.hpp +++ b/src/frontends/common/include/openvino/frontend/manager.hpp @@ -22,8 +22,6 @@ using FrontEndFactory = std::function; /// frontends This is a main frontend entry point for client applications class FRONTEND_API FrontEndManager final { public: - using Ptr = std::shared_ptr; - /// \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& variants); -FRONTEND_API FrontEndManager::Ptr get_frontend_manager(); // --------- Plugin exporting information -------------- diff --git a/src/frontends/common/src/manager.cpp b/src/frontends/common/src/manager.cpp index 8390e544248..7630500434e 100644 --- a/src/frontends/common/src/manager.cpp +++ b/src/frontends/common/src/manager.cpp @@ -242,40 +242,3 @@ template <> FrontEnd::Ptr FrontEndManager::load_by_model(const std::vector& variants) { return load_by_model_impl(variants); } -namespace ov { -namespace frontend { - -namespace { - -class FrontEndManagerHolder { - std::mutex m_mutex; - std::weak_ptr m_manager; - -public: - FrontEndManagerHolder(const FrontEndManagerHolder&) = delete; - FrontEndManagerHolder& operator=(const FrontEndManagerHolder&) = delete; - - FrontEndManagerHolder() = default; - - FrontEndManager::Ptr get() { - std::lock_guard lock(m_mutex); - auto manager = m_manager.lock(); - if (!manager) - m_manager = manager = std::make_shared(); - 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 diff --git a/src/inference/src/ie_core.cpp b/src/inference/src/ie_core.cpp index 28cb707f5c7..799b0b8e318 100644 --- a/src/inference/src/ie_core.cpp +++ b/src/inference/src/ie_core.cpp @@ -55,11 +55,6 @@ using namespace std::placeholders; namespace ov { -namespace frontend { -class FrontEndManager; -std::shared_ptr 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 frontEndManagerPtr; ExecutorManager::Ptr executorManagerPtr; mutable std::unordered_set 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& function, OPENVINO_SUPPRESS_DEPRECATED_END } +ov::frontend::FrontEndManager& get_frontend_manager() { + static ov::frontend::FrontEndManager manager; + return manager; +} + std::vector wrap_old_extensions(const std::vector& exts) { std::vector 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())