plugin  0.1.0
async_pipeline.h
1 /*
2 // Copyright (C) 2020-2024 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 
17 #pragma once
18 #include <stdint.h>
19 
20 #include <condition_variable>
21 #include <exception>
22 #include <memory>
23 #include <mutex>
24 #include <unordered_map>
25 
26 #include <openvino/openvino.hpp>
27 
28 #include <models/results.h>
30 
31 #include "pipelines/requests_pool.h"
32 
33 class ModelBase;
34 struct InputData;
35 struct MetaData;
36 struct ModelConfig;
37 
41 public:
48  AsyncPipeline(std::unique_ptr<ModelBase>&& modelInstance, const ModelConfig& config, ov::Core& core);
49  virtual ~AsyncPipeline();
50 
55  void waitForData(bool shouldKeepOrder = true);
56 
60  return requestsPool->isIdleRequestAvailable();
61  }
62 
66  if (requestsPool)
67  requestsPool->waitForTotalCompletion();
68  }
69 
77  virtual int64_t submitData(const InputData& inputData, const std::shared_ptr<MetaData>& metaData);
78 
83  virtual std::unique_ptr<ResultBase> getResult(bool shouldKeepOrder = true);
84 
85  PerformanceMetrics getInferenceMetircs() {
86  return inferenceMetrics;
87  }
88  PerformanceMetrics getPreprocessMetrics() {
89  return preprocessMetrics;
90  }
91  PerformanceMetrics getPostprocessMetrics() {
92  return postprocessMetrics;
93  }
94 
95 protected:
102  virtual InferenceResult getInferenceResult(bool shouldKeepOrder);
103 
104  std::unique_ptr<RequestsPool> requestsPool;
105  std::unordered_map<int64_t, InferenceResult> completedInferenceResults;
106 
107  ov::CompiledModel compiledModel;
108 
109  std::mutex mtx;
110  std::condition_variable condVar;
111 
112  int64_t inputFrameId = 0;
113  int64_t outputFrameId = 0;
114 
115  std::exception_ptr callbackException = nullptr;
116 
117  std::unique_ptr<ModelBase> model;
118  PerformanceMetrics inferenceMetrics;
119  PerformanceMetrics preprocessMetrics;
120  PerformanceMetrics postprocessMetrics;
121 };
Definition: async_pipeline.h:40
bool isReadyToProcess()
Definition: async_pipeline.h:59
void waitForData(bool shouldKeepOrder=true)
Definition: async_pipeline.cpp:65
void waitForTotalCompletion()
Definition: async_pipeline.h:65
virtual int64_t submitData(const InputData &inputData, const std::shared_ptr< MetaData > &metaData)
Definition: async_pipeline.cpp:79
virtual std::unique_ptr< ResultBase > getResult(bool shouldKeepOrder=true)
Definition: async_pipeline.cpp:131
virtual InferenceResult getInferenceResult(bool shouldKeepOrder)
Definition: async_pipeline.cpp:144
AsyncPipeline(std::unique_ptr< ModelBase > &&modelInstance, const ModelConfig &config, ov::Core &core)
Definition: async_pipeline.cpp:39
Definition: model_base.h:34
Definition: performance_metrics.hpp:19
a header file for performance metrics calculation class
Definition: results.h:53
Definition: input_data.h:20
Definition: metadata.h:20
Definition: config_factory.h:26