diff --git a/imperative/python/megengine/functional/vision.py b/imperative/python/megengine/functional/vision.py index 7ab6bf244adf282c79b9f69d6863617673bf0334..0fd905ee4c9639590482464b58870a6811369caa 100644 --- a/imperative/python/megengine/functional/vision.py +++ b/imperative/python/megengine/functional/vision.py @@ -420,6 +420,7 @@ def warp_affine( Here all available options for params are listed, however it does not mean that you can use all the combinations. On different platforms, different combinations are supported. + ``warp_affine`` only support forward inference, Please refer to ``warp_perspective`` if backward is needed. """ conv_format = _config._get_actual_op_param(format, _config.__conv_format) diff --git a/imperative/python/src/tensor.cpp b/imperative/python/src/tensor.cpp index 87f2459d5b7f3b3a683573996429302c191e47e5..f415f572df34a81f068b8561e4d43c5b6ab0945e 100644 --- a/imperative/python/src/tensor.cpp +++ b/imperative/python/src/tensor.cpp @@ -1074,6 +1074,10 @@ void init_tensor(py::module m) { []() { interpreter_for_py->sync(); CompNode::sync_all(); + CompNode::foreach ([](CompNode cn) { + auto err = cn.check_async_error(); + mgb_assert(!err, "%s", err->what()); + }); sync_py_task_q(); }, py::call_guard()); diff --git a/imperative/src/impl/interpreter/interpreter_impl.cpp b/imperative/src/impl/interpreter/interpreter_impl.cpp index bf122982cabc90b0f3c48c3fc253e39de2842080..e8b6fb43fe24876821cdff4e04b2a6e4c34b95c1 100644 --- a/imperative/src/impl/interpreter/interpreter_impl.cpp +++ b/imperative/src/impl/interpreter/interpreter_impl.cpp @@ -156,6 +156,8 @@ TensorInfo* ChannelImpl::put_impl(const HostTensorND& value, bool no_cache) { if (m_async_level == 0) { sync_impl(); info->desc.comp_node.sync(); + auto err = info->desc.comp_node.check_async_error(); + mgb_assert(!err, "%s", err->what()); } return info; } @@ -336,6 +338,8 @@ void ChannelImpl::dispatch_kernel( for (auto&& oup : *outputs) { auto info = reinterpret_cast(oup); info->ptr->comp_node().sync(); + auto err = info->ptr->comp_node().check_async_error(); + mgb_assert(!err, "%s", err->what()); } } } @@ -944,6 +948,8 @@ TensorPtr ChannelImpl::wait_tensor(TensorInfo* info, TensorProp prop) { }); MGB_RECORD_EVENT(TensorWaitPropFinishEvent, info->id, m_waitee_id, prop); m_waitee = nullptr; + auto err = info->ptr->comp_node().check_async_error(); + mgb_assert(!err, "%s", err->what()); return info->ptr; }