dnn/Vulkan: Refine error handle mechanism

Fallback to OPENCV backend and CPU target if catch exception from
vkcom backend.

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
pull/12985/head
Wu Zhiwen 6 years ago
parent 7fff245f87
commit 3914c17b0d
  1. 18
      modules/dnn/src/dnn.cpp
  2. 3
      modules/dnn/src/vkcom/src/common.hpp

@ -1412,9 +1412,18 @@ struct Net::Impl
} }
ld.skip = false; ld.skip = false;
try
{
ld.backendNodes[DNN_BACKEND_VKCOM] = ld.backendNodes[DNN_BACKEND_VKCOM] =
layer->initVkCom(ld.inputBlobsWrappers); layer->initVkCom(ld.inputBlobsWrappers);
} }
catch (const cv::Exception& e)
{
CV_LOG_ERROR(NULL, "initVkCom failed, fallback to CPU implementation. " << e.what());
ld.backendNodes[DNN_BACKEND_VKCOM] = Ptr<BackendNode>();
}
}
#endif #endif
} }
@ -2317,9 +2326,18 @@ struct Net::Impl
forwardInfEngine(node); forwardInfEngine(node);
} }
else if (preferableBackend == DNN_BACKEND_VKCOM) else if (preferableBackend == DNN_BACKEND_VKCOM)
{
try
{ {
forwardVkCom(ld.outputBlobsWrappers, node); forwardVkCom(ld.outputBlobsWrappers, node);
} }
catch (const cv::Exception& e)
{
CV_LOG_ERROR(NULL, "forwardVkCom failed, fallback to CPU implementation. " << e.what());
it->second = Ptr<BackendNode>();
forwardLayer(ld);
}
}
else else
{ {
CV_Error(Error::StsNotImplemented, "Unknown backend identifier"); CV_Error(Error::StsNotImplemented, "Unknown backend identifier");

@ -42,7 +42,8 @@ enum ShapeIdx
{ \ { \
if (f != VK_SUCCESS) \ if (f != VK_SUCCESS) \
{ \ { \
CV_LOG_WARNING(NULL, "Vulkan check failed"); \ CV_LOG_ERROR(NULL, "Vulkan check failed, result = " << f); \
CV_Error(Error::StsError, "Vulkan check failed"); \
} \ } \
} }

Loading…
Cancel
Save