1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 * @brief A header file that provides interface to register custom hetero functionality
7 * @file ie_ihetero_plugin.hpp
14 #include <ie_icnn_network.hpp>
15 #include <ie_iexecutable_network.hpp>
16 #include <ie_plugin.hpp>
18 namespace InferenceEngine {
21 * @deprecated Use InferenceEngine::Core to work with HETERO device
22 * @brief This interface describes a mechanism of custom loaders to be used in heterogeneous
23 * plugin during setting of affinity and loading of split sub-network to the plugins
24 * The custom loader can define addition settings for the plugins or network loading
25 * Examples of cases when this interface should be implemented in the application:
27 * 1. add custom layers to existing plugins if it is not pointed to the heterogeneous plugin
28 * or registration of custom layer is different than supported in available public plugins
30 * 2. set affinity manually for the same plugin being initialized by different parameters,
31 * e.g different device id
32 * In this case there will be mapping of
33 * Device1 > HeteroDeviceLoaderImpl1
34 * Device2 > HeteroDeviceLoaderImpl2
35 * the affinity should be pointed manually, the implementation of HeteroDeviceLoaderImpl1 and
36 * HeteroDeviceLoaderImpl2 should be in the application, and these device loaders should be registered
38 * IHeteroInferencePlugin::SetDeviceLoader("Device1", HeteroDeviceLoaderImpl1)
39 * IHeteroInferencePlugin::SetDeviceLoader("Device2", HeteroDeviceLoaderImpl2)
41 class INFERENCE_ENGINE_DEPRECATED INFERENCE_ENGINE_API_CLASS(IHeteroDeviceLoader) {
43 virtual ~IHeteroDeviceLoader();
46 * @deprecated Use InferenceEngine::Core with HETERO device in InferenceEngine::Core::LoadNetwork.
47 * @brief Loads network to the device. The instantiation of plugin should be in the implementation
48 * of the IHeteroDeviceLoader. As well setting of special config option should happen in the
49 * implementation as well
50 * @param device Loading of network should happen for this device
51 * @param ret Reference to a shared ptr of the returned executable network instance
52 * @param network Network object acquired from CNNNetReader
53 * @param config Map of configuration settings relevant only for current load operation
54 * @param resp Pointer to the response message that holds a description of an error if any occurred
55 * @return Status code of the operation. OK if succeeded
57 INFERENCE_ENGINE_DEPRECATED
58 virtual StatusCode LoadNetwork(
59 const std::string& device,
60 IExecutableNetwork::Ptr &ret,
62 const std::map<std::string, std::string> &config,
63 ResponseDesc *resp) noexcept = 0;
66 * @deprecated Use the IHeteroDeviceLoader::QueryNetwork
67 * @brief This function calls plugin function QueryNetwork for the plugin being instantiated
68 * in the implementation of IHeteroDeviceLoader
69 * @param device QueryNetwork will be executed for this device
70 * @param network Network object acquired from CNNNetReader
71 * @param res Query network result object
73 INFERENCE_ENGINE_DEPRECATED
74 virtual void QueryNetwork(const std::string &device,
75 const ICNNNetwork &network,
76 QueryNetworkResult &res) noexcept {
77 IE_SUPPRESS_DEPRECATED_START
78 QueryNetwork(device, network, { }, res);
79 IE_SUPPRESS_DEPRECATED_END
83 * @deprecated Use InferenceEngine::Core with HETERO device in InferenceEngine::Core::QueryNetwork.
84 * @brief This function calls plugin function QueryNetwork for the plugin being instantiated
85 * in the implementation of IHeteroDeviceLoader
86 * @param device QueryNetwork will be executed for this device
87 * @param network Network object acquired from CNNNetReader
88 * @param config Network configuration parameters
89 * @param res Query network result object
91 INFERENCE_ENGINE_DEPRECATED
92 virtual void QueryNetwork(const std::string &device,
93 const ICNNNetwork &network,
94 const std::map<std::string, std::string>& config,
95 QueryNetworkResult &res) noexcept = 0;
99 * @deprecated Use InferenceEngine::Core with HETERO device in InferenceEngine::Core::QueryNetwork.
100 * @brief Sets log callback
101 * @param listener A reference to IErrorListener object
103 virtual void SetLogCallback(IErrorListener &listener) = 0;
105 IE_SUPPRESS_DEPRECATED_START
107 * @brief Shared pointer to IHeteroDeviceLoader instance
109 using Ptr = std::shared_ptr<IHeteroDeviceLoader>;
110 IE_SUPPRESS_DEPRECATED_END
113 IE_SUPPRESS_DEPRECATED_START
115 * @brief Represents map from device name to device-specific loader
117 using MapDeviceLoaders = std::map<std::string, InferenceEngine::IHeteroDeviceLoader::Ptr>;
118 IE_SUPPRESS_DEPRECATED_END
121 * @deprecated Use InferenceEngine::Core with HETERO mode in LoadNetwork, QueryNetwork, etc
122 * @brief This interface extends regular plugin interface for heterogeneous case. Not all plugins
123 * implements it. The main purpose of this interface - to register loaders and have an ability
124 * to get default settings for affinity on certain devices.
126 class INFERENCE_ENGINE_DEPRECATED INFERENCE_ENGINE_API_CLASS(IHeteroInferencePlugin) : public IInferencePlugin {
128 virtual ~IHeteroInferencePlugin();
131 * @deprecated Use InferenceEngine::Core to work with HETERO device
132 * Registers device loader for the device
133 * @param device - the device name being used in CNNNLayer::affinity
134 * @param loader - helper class allowing to analyze if layers are supported and allow
135 * to load network to the plugin being defined in the IHeteroDeviceLoader implementation
137 IE_SUPPRESS_DEPRECATED_START
138 INFERENCE_ENGINE_DEPRECATED
139 virtual void SetDeviceLoader(const std::string &device, IHeteroDeviceLoader::Ptr loader) noexcept = 0;
140 IE_SUPPRESS_DEPRECATED_END
143 * @deprecated Use InferenceEngine::Core::QueryNetwork with HETERO device and QueryNetworkResult::supportedLayersMap
144 * to set affinities to a network
145 * @brief The main goal of this function to set affinity according to the options set for the plugin
146 * implementing IHeteroInferencePlugin.
147 * This function works only if all affinity in the network are empty.
148 * @param network Network object acquired from CNNNetReader
149 * @param config Map of configuration settings
150 * @param resp Pointer to the response message that holds a description of an error if any occurred
151 * @return Status code of the operation. OK if succeeded
153 INFERENCE_ENGINE_DEPRECATED
154 virtual StatusCode SetAffinity(
155 ICNNNetwork& network,
156 const std::map<std::string, std::string> &config,
157 ResponseDesc *resp) noexcept = 0;
160 } // namespace InferenceEngine