1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 #include "inference_engine.hpp"
7 #include "description_buffer.hpp"
8 #include "ie_icore.hpp"
9 #include "ie_error.hpp"
10 #include "cpp_interfaces/impl/ie_plugin_internal.hpp"
11 #include "cpp/ie_plugin_cpp.hpp"
15 #include <unordered_map>
20 namespace HeteroPlugin {
22 class Engine : public InferenceEngine::InferencePluginInternal {
24 using Plugins = std::unordered_map<std::string, InferenceEngine::InferencePlugin>;
25 using Configs = std::map<std::string, std::string>;
26 using Devices = std::vector<std::string>;
30 void GetVersion(const InferenceEngine::Version *&versionInfo) noexcept;
32 InferenceEngine::ExecutableNetworkInternal::Ptr
33 LoadExeNetworkImpl(const InferenceEngine::ICore * core, InferenceEngine::ICNNNetwork &network, const Configs &config) override;
34 void SetConfig(const Configs &config) override;
36 void SetAffinity(InferenceEngine::ICNNNetwork& network, const Configs &config);
38 void AddExtension(InferenceEngine::IExtensionPtr extension)override;
40 void SetLogCallback(InferenceEngine::IErrorListener &listener) override;
42 void QueryNetwork(const InferenceEngine::ICNNNetwork &network,
43 const Configs& config, InferenceEngine::QueryNetworkResult &res) const override;
45 InferenceEngine::Parameter GetMetric(const std::string& name,
46 const std::map<std::string, InferenceEngine::Parameter> & options) const override;
48 InferenceEngine::Parameter GetConfig(const std::string& name,
49 const std::map<std::string, InferenceEngine::Parameter> & options) const override;
51 InferenceEngine::InferencePlugin GetDevicePlugin(const std::string& device) const;
53 Plugins GetDevicePlugins(const std::string& targetFallback);
55 Plugins GetDevicePlugins(const std::string& targetFallback) const;
57 static Configs GetSupportedConfig(const Configs& config, const InferenceEngine::InferencePlugin& plugin);
60 std::vector<InferenceEngine::IExtensionPtr> _extensions;
61 InferenceEngine::IErrorListener* _errorListener = nullptr;
64 struct HeteroLayerColorer {
65 explicit HeteroLayerColorer(const std::vector<std::string>& devices);
67 void operator() (const CNNLayerPtr layer,
68 ordered_properties &printed_properties,
69 ordered_properties &node_properties);
71 std::unordered_map<std::string, std::string> deviceColorMap;
74 } // namespace HeteroPlugin