1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 * @brief a header file for IInferRequest interface
7 * @file ie_iinfer_request.hpp
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>
23 namespace HeteroPlugin {
25 class HeteroInferRequest : public InferenceEngine::InferRequestInternal {
27 typedef std::shared_ptr<HeteroInferRequest> Ptr;
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;
36 using SubRequestsList = std::vector<SubRequestDesc>;
38 explicit HeteroInferRequest(InferenceEngine::InputsDataMap networkInputs,
39 InferenceEngine::OutputsDataMap networkOutputs,
40 const SubRequestsList &inferRequests);
42 void InferImpl() override;
45 GetPerformanceCounts(std::map<std::string, InferenceEngine::InferenceEngineProfileInfo> &perfMap) const override;
47 void updateInOutIfNeeded();
49 void setCallbackSequence();
51 void startFirstAsyncRequest();
53 InferenceEngine::StatusCode waitAllRequests(int64_t millis_timeout);
55 void setCallbackForLastRequest(std::function<void(InferenceEngine::InferRequest, InferenceEngine::StatusCode)>& callback);
57 bool isAnyRequestBusy();
60 SubRequestsList _inferRequests;
61 std::map<std::string, InferenceEngine::Blob::Ptr> _blobs;
64 } // namespace HeteroPlugin