@@ -114,19 +114,19 @@ class InferRequestPool {
114
114
friend class InferRequestPool ;
115
115
};
116
116
117
- InferRequestPool (OVExeNetwork& net, size_t nireq , std::function<void (OVInferRequestPtr)> initializer) {
117
+ InferRequestPool (OVExeNetwork& net, size_t initial_size , std::function<void (OVInferRequestPtr)> initializer) : exe_network_(net), initializer_(std::move(initializer) ) {
118
118
OVInferRequestPtr infer_request;
119
- for (size_t id = 0 ; id < nireq; id++) {
120
- infer_request = std::make_shared<OVInferRequest>(net.CreateInferRequest ());
121
- initializer (infer_request);
122
- infer_requests_.push_back (infer_request);
119
+ for (size_t id = 0 ; id < initial_size; id++) {
120
+ putIdleRequest (createInferRequest ());
123
121
}
124
122
}
125
123
~InferRequestPool () = default ;
126
124
127
- GuardedInferReq getIdleRequest () {
125
+ GuardedInferReq getRequest () {
128
126
std::unique_lock<std::mutex> lock (_mutex);
129
- _cv.wait (lock, [this ] { return infer_requests_.size () > 0 ; });
127
+ if (infer_requests_.empty ()) {
128
+ infer_requests_.emplace_back (createInferRequest ());
129
+ }
130
130
auto request = infer_requests_.back ();
131
131
infer_requests_.pop_back ();
132
132
return GuardedInferReq (*this , request);
@@ -137,13 +137,19 @@ class InferRequestPool {
137
137
if (infer_request) {
138
138
std::unique_lock<std::mutex> lock (_mutex);
139
139
infer_requests_.push_back (infer_request);
140
- _cv.notify_one ();
141
140
}
142
141
}
143
142
143
+ OVInferRequestPtr createInferRequest () {
144
+ auto infer_request = std::make_shared<OVInferRequest>(exe_network_.CreateInferRequest ());
145
+ initializer_ (infer_request);
146
+ return infer_request;
147
+ }
148
+
144
149
std::mutex _mutex;
145
- std::condition_variable _cv;
146
150
std::vector<OVInferRequestPtr> infer_requests_;
151
+ OVExeNetwork& exe_network_;
152
+ std::function<void (OVInferRequestPtr)> initializer_;
147
153
};
148
154
149
155
} // namespace openvino_ep
0 commit comments