Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/common/util/src/os/lin/lin_shared_object_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
namespace ov {
namespace util {
std::shared_ptr<void> load_shared_object(const char* path) {
auto shared_object = std::shared_ptr<void>{dlopen(path, RTLD_NOW), [&path](void* shared_object) {
std::string p(path);
auto shared_object = std::shared_ptr<void>{dlopen(path, RTLD_NOW), [p](void* shared_object) {
if (shared_object != nullptr) {
std::cout << path << " is closed \n";
std::cout << p << " is closed \n";
if (0 != dlclose(shared_object)) {
std::cerr << "dlclose failed";
if (auto error = dlerror()) {
Expand Down
2 changes: 1 addition & 1 deletion src/core/include/openvino/core/model.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <vector>

#include "openvino/core/core_visibility.hpp"
#include "openvino/core/extension.hpp"
#include "openvino/core/node.hpp"
#include "openvino/core/rtti.hpp"
#include "openvino/op/assign.hpp"
Expand Down Expand Up @@ -40,7 +41,6 @@ class OPENVINO_API Model : public std::enable_shared_from_this<Model> {
friend OPENVINO_API std::shared_ptr<Model> clone_model(const Model& func,
std::unordered_map<Node*, std::shared_ptr<Node>>& node_map);
std::shared_ptr<void> m_shared_object; // Frontend plugin shared object handle.
std::vector<std::shared_ptr<void>> m_extension_shared_objects = {};

public:
static const ::ov::DiscreteTypeInfo& get_type_info_static() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class FRONTEND_API FrontEnd {
friend class FrontEndManager;

std::shared_ptr<void> m_shared_object = {}; // Library handle
/*static*/ std::vector<std::shared_ptr<void>> m_extension_shared_objects;
std::shared_ptr<FrontEnd> m_actual = {};

public:
Expand Down
42 changes: 21 additions & 21 deletions src/frontends/common/src/frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "openvino/frontend/place.hpp"
#include "so_extension.hpp"
#include "utils.hpp"
#include "plugin_loader.hpp"

using namespace ov;
using namespace ov::frontend;
Expand All @@ -30,7 +31,11 @@ std::shared_ptr<ov::Model> FrontEnd::create_copy(const std::shared_ptr<ov::Model

FrontEnd::FrontEnd() = default;

FrontEnd::~FrontEnd() = default;
FrontEnd::~FrontEnd() {
if (m_actual) {
std::cout << "~FrontEnd - wrapper\n";
}
}

bool FrontEnd::supported_impl(const std::vector<ov::Any>& variants) const {
if (m_actual) {
Expand All @@ -49,12 +54,7 @@ InputModel::Ptr FrontEnd::load_impl(const std::vector<ov::Any>& variants) const

std::shared_ptr<ov::Model> FrontEnd::convert(const InputModel::Ptr& model) const {
FRONT_END_CHECK_IMPLEMENTED(m_actual, convert);
std::cout << "this address: " << this << " and size: " << m_extension_shared_objects.size() << " during convert call"<< "\n";
auto converted_model = FrontEnd::create_copy(m_actual->convert(model->m_actual), m_shared_object);
for(const auto& ext : m_extension_shared_objects) {
std::cout << "assign shared ptr during convert \n";
converted_model->m_extension_shared_objects.push_back(ext);
}
return converted_model;
}

Expand All @@ -79,9 +79,8 @@ void FrontEnd::normalize(const std::shared_ptr<Model>& model) const {
}

void FrontEnd::add_extension(const std::shared_ptr<ov::Extension>& extension) {
std::cout << "added extension shared ptr 1 \n";
m_extension_shared_objects.push_back(extension);
if (m_actual) {
add_extension_to_shared_data(m_shared_object, extension);
m_actual->add_extension(extension);
return;
}
Expand All @@ -92,24 +91,25 @@ void FrontEnd::add_extension(const std::shared_ptr<ov::Extension>& extension) {
//std::vector<std::shared_ptr<void>> FrontEnd::m_extension_shared_objects = {}; static test

void FrontEnd::add_extension(const std::vector<std::shared_ptr<ov::Extension>>& extensions) {
for (const auto& ext : extensions) {
std::cout << "added extension to FrontEnd with address: " << this << "\n";
m_extension_shared_objects.push_back(ext);
}
if (m_actual) {
m_actual->add_extension(extensions);
return;
}
// for (const auto& ext : extensions) {
std::cout << "added extension to FrontEnd with address: " << this << "\n";
// m_extension_shared_objects.push_back(ext);
// }
// if (m_actual) {
// m_actual->add_extension(extensions);
// return;
// }
for (const auto& ext : extensions)
add_extension(ext);
}

void FrontEnd::add_extension(const std::string& library_path) {
if (m_actual) {
m_actual->add_extension(library_path);
return;
}
add_extension(ov::detail::load_extensions(library_path));
auto extensions_lib = ov::detail::load_extensions(library_path);
add_extension(extensions_lib);
// if (m_actual) {
// m_actual->add_extension(library_path);
// return;
// }
}

#ifdef OPENVINO_ENABLE_UNICODE_PATH_SUPPORT
Expand Down
8 changes: 4 additions & 4 deletions src/frontends/common/src/manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class FrontEndManager::Impl {
if (plugin_it != m_plugins.end()) {
if (plugin_it->load()) {
auto fe_obj = std::make_shared<FrontEnd>();
fe_obj->m_shared_object = plugin_it->get_so_pointer();
fe_obj->m_shared_object = std::make_shared<FrontEndSharedData>(plugin_it->get_so_pointer());
fe_obj->m_actual = plugin_it->get_creator().m_creator();
return fe_obj;
}
Expand All @@ -56,7 +56,7 @@ class FrontEndManager::Impl {
OPENVINO_ASSERT(plugin.load(), "Cannot load frontend ", plugin.get_name_from_file());
if (plugin.get_creator().m_name == framework) {
auto fe_obj = std::make_shared<FrontEnd>();
fe_obj->m_shared_object = plugin.get_so_pointer();
fe_obj->m_shared_object = std::make_shared<FrontEndSharedData>(plugin.get_so_pointer());
fe_obj->m_actual = plugin.get_creator().m_creator();
return fe_obj;
}
Expand Down Expand Up @@ -94,7 +94,7 @@ class FrontEndManager::Impl {
if (fe->supported(variants)) {
auto fe_obj = std::make_shared<FrontEnd>();
std::cout << "frontend created with address: " << static_cast<void*>(fe_obj.get()) << "\n";
fe_obj->m_shared_object = plugin.get_so_pointer();
fe_obj->m_shared_object = std::make_shared<FrontEndSharedData>(plugin.get_so_pointer());
fe_obj->m_actual = fe;
return fe_obj;
}
Expand Down Expand Up @@ -186,7 +186,7 @@ class FrontEndManager::Impl {
if (fe && fe->supported(variants)) {
// Priority FE (e.g. IR) is found and is suitable
auto fe_obj = std::make_shared<FrontEnd>();
fe_obj->m_shared_object = plugin_info.get_so_pointer();
fe_obj->m_shared_object = std::make_shared<FrontEndSharedData>(plugin_info.get_so_pointer());
fe_obj->m_actual = fe;
return fe_obj;
}
Expand Down
19 changes: 19 additions & 0 deletions src/frontends/common/src/plugin_loader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,25 @@ static const char PathSeparator[] = ":";
namespace ov {
namespace frontend {

/// \brief Internal data structure holding by each frontend. Includes library handle and extensions.
class FrontEndSharedData {
std::shared_ptr<void> m_so;
std::vector<std::shared_ptr<ov::Extension>> m_loaded_extensions = {};
public:
explicit FrontEndSharedData(const std::shared_ptr<void>& so): m_so(so) {
std::cout << "FrontEndSharedData constructor\n";
}
~FrontEndSharedData() {
std::cout << "~FrontEndSharedData: " << m_loaded_extensions.size() << "\n";
}
std::vector<std::shared_ptr<ov::Extension>>& extensions() { return m_loaded_extensions; }
};

inline void add_extension_to_shared_data(std::shared_ptr<void>& obj, const std::shared_ptr<ov::Extension>& ext) {
auto obj_data = std::static_pointer_cast<FrontEndSharedData>(obj);
obj_data->extensions().push_back(ext);
}

/// \brief Internal data structure holding plugin information including library handle, file names and paths, etc.
class PluginInfo {
std::shared_ptr<void> m_so; // Library shared object, must be first data member to be destroyed last
Expand Down