Publishing 2019 R3 content
[platform/upstream/dldt.git] / inference-engine / src / hetero_plugin / hetero_infer_request.hpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 /**
6  * @brief a header file for IInferRequest interface
7  * @file ie_iinfer_request.hpp
8  */
9
10 #pragma once
11
12 #include <map>
13 #include <string>
14 #include <vector>
15 #include <memory>
16 #include <unordered_set>
17 #include <ie_common.h>
18 #include <cpp_interfaces/impl/ie_infer_request_internal.hpp>
19 #include <cpp_interfaces/impl/ie_executable_network_internal.hpp>
20 #include <cpp/ie_infer_request.hpp>
21 #include <cpp/ie_executable_network.hpp>
22
23 namespace HeteroPlugin {
24
25 class HeteroInferRequest : public InferenceEngine::InferRequestInternal {
26 public:
27     typedef std::shared_ptr<HeteroInferRequest> Ptr;
28
29     struct SubRequestDesc {
30         InferenceEngine::ExecutableNetwork::Ptr _network;
31         InferenceEngine::InferRequest::Ptr _request;
32         std::unordered_set<std::string> _iNames;
33         std::unordered_set<std::string> _oNames;
34         InferenceEngine::ProfilingTask _profilingTask;
35     };
36     using SubRequestsList = std::vector<SubRequestDesc>;
37
38     explicit HeteroInferRequest(InferenceEngine::InputsDataMap networkInputs,
39                                 InferenceEngine::OutputsDataMap networkOutputs,
40                                 const SubRequestsList &inferRequests);
41
42     void InferImpl() override;
43
44     void
45     GetPerformanceCounts(std::map<std::string, InferenceEngine::InferenceEngineProfileInfo> &perfMap) const override;
46
47     void updateInOutIfNeeded();
48
49     void setCallbackSequence();
50
51     void startFirstAsyncRequest();
52
53     InferenceEngine::StatusCode waitAllRequests(int64_t millis_timeout);
54
55     void setCallbackForLastRequest(std::function<void(InferenceEngine::InferRequest, InferenceEngine::StatusCode)>& callback);
56
57     bool isAnyRequestBusy();
58
59 private:
60     SubRequestsList _inferRequests;
61     std::map<std::string, InferenceEngine::Blob::Ptr> _blobs;
62 };
63
64 }  // namespace HeteroPlugin
65