From 34636ba7dd6af63cc0f383231870471eb4d68ca2 Mon Sep 17 00:00:00 2001 From: Anton Pankratv Date: Thu, 17 Sep 2020 11:57:11 +0300 Subject: [PATCH] Default Infer leads to correct infer request state (#1562) --- .../ie_infer_async_request_thread_safe_default.hpp | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/inference-engine/src/plugin_api/cpp_interfaces/impl/ie_infer_async_request_thread_safe_default.hpp b/inference-engine/src/plugin_api/cpp_interfaces/impl/ie_infer_async_request_thread_safe_default.hpp index db3ea04..a0a0a89 100644 --- a/inference-engine/src/plugin_api/cpp_interfaces/impl/ie_infer_async_request_thread_safe_default.hpp +++ b/inference-engine/src/plugin_api/cpp_interfaces/impl/ie_infer_async_request_thread_safe_default.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -72,12 +73,21 @@ public: */ AsyncInferRequestThreadSafeDefault(const InferRequestInternal::Ptr& request, const ITaskExecutor::Ptr& taskExecutor, - const ITaskExecutor::Ptr& callbackExecutor) - : _syncRequest {request}, - _requestExecutor {taskExecutor}, - _callbackExecutor {callbackExecutor}, - _pipeline {{taskExecutor, [this] {_syncRequest->Infer();}}}, - _syncPipeline{{std::make_shared(), [this] {_syncRequest->Infer();}}} { + const ITaskExecutor::Ptr& callbackExecutor) : + _syncRequest {request}, + _requestExecutor {taskExecutor}, + _callbackExecutor {callbackExecutor}, + _pipeline {{taskExecutor, [this] {_syncRequest->Infer();}}}, + _syncPipeline{{std::make_shared(), [this] {_syncRequest->Infer();}}} { + auto streamsExecutor = std::dynamic_pointer_cast(taskExecutor); + if (streamsExecutor != nullptr) { + struct ImmediateStreamsExecutor : public InferenceEngine::ITaskExecutor { + explicit ImmediateStreamsExecutor(const IStreamsExecutor::Ptr& streamsExecutor) : _streamsExecutor{streamsExecutor} {} + void run(InferenceEngine::Task task) override {_streamsExecutor->Execute(std::move(task));} + IStreamsExecutor::Ptr _streamsExecutor; + }; + _syncPipeline = {{std::make_shared(std::move(streamsExecutor)), [this] {_syncRequest->Infer();}}}; + } } /** @@ -228,6 +238,7 @@ protected: DisableCallbackGuard disableCallbackGuard{_callback}; _syncRequest->checkBlobs(); RunFirstStage(_syncPipeline.begin(), _syncPipeline.end(), _syncCallbackExecutor); + // If we have exception we should extract it from future using Wait() method Wait(InferenceEngine::IInferRequest::WaitMode::RESULT_READY); } -- 2.7.4