Skip to content

Commit 12dd635

Browse files
committed
unbound infer request pool
1 parent 4c76147 commit 12dd635

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

onnxruntime/core/providers/openvino/backends/basic_backend.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,8 @@ void BasicBackend::Infer(OrtKernelContext* ctx) {
495495
bool gpu = session_context_.device_type.find("GPU") != std::string::npos;
496496
bool cpu_or_gpu = gpu || (session_context_.device_type.find("CPU") != std::string::npos);
497497

498-
// Requesting for an idle infer_request from a pool of infer_requests_
499498
// guarded_request will be released back to the pool when it goes out of scope
500-
auto guarded_request = infer_req_pool_->getIdleRequest();
499+
auto guarded_request = infer_req_pool_->getRequest();
501500
auto& infer_request = guarded_request.infer_request_;
502501
#ifdef IO_BUFFER_ENABLED
503502
if (gpu &&

onnxruntime/core/providers/openvino/backends/basic_backend.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,19 @@ class InferRequestPool {
114114
friend class InferRequestPool;
115115
};
116116

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)) {
118118
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());
123121
}
124122
}
125123
~InferRequestPool() = default;
126124

127-
GuardedInferReq getIdleRequest() {
125+
GuardedInferReq getRequest() {
128126
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+
}
130130
auto request = infer_requests_.back();
131131
infer_requests_.pop_back();
132132
return GuardedInferReq(*this, request);
@@ -137,13 +137,19 @@ class InferRequestPool {
137137
if (infer_request) {
138138
std::unique_lock<std::mutex> lock(_mutex);
139139
infer_requests_.push_back(infer_request);
140-
_cv.notify_one();
141140
}
142141
}
143142

143+
OVInferRequestPtr createInferRequest() {
144+
auto infer_request = std::make_shared<OVInferRequest>(exe_network_.CreateInferRequest());
145+
initializer_(infer_request);
146+
return infer_request;
147+
}
148+
144149
std::mutex _mutex;
145-
std::condition_variable _cv;
146150
std::vector<OVInferRequestPtr> infer_requests_;
151+
OVExeNetwork& exe_network_;
152+
std::function<void(OVInferRequestPtr)> initializer_;
147153
};
148154

149155
} // namespace openvino_ep

0 commit comments

Comments
 (0)