From 15b647aee27e2290d18effd92a15ffd811256776 Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Tue, 20 Apr 2021 16:03:27 +0800 Subject: [PATCH] fix(externcopr): check loader imp dynmaic param GitOrigin-RevId: 5f38c120e3410bab27cb1c8e9f5766e2e88216ae --- src/serialization/impl/extern_c_opr.cpp | 6 +++++- .../include/megbrain/serialization/extern_c_opr_io.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/serialization/impl/extern_c_opr.cpp b/src/serialization/impl/extern_c_opr.cpp index 080b023e..cdc36e03 100644 --- a/src/serialization/impl/extern_c_opr.cpp +++ b/src/serialization/impl/extern_c_opr.cpp @@ -289,7 +289,9 @@ ExternCOprRunner::ExternCOprRunner(std::string& name, m_desc{std::move(desc)}, m_dump_name{name}, m_param{nullptr} { - mgb_assert(m_desc->size == sizeof(MGBOprDesc), + auto size_diff = sizeof(MGBOprDesc) - m_desc->size; + is_loader_support_dynamic_param = (0 == size_diff) ? true : false; + mgb_assert(0 == size_diff || sizeof(ExternCOprParam*) == size_diff, "invalid MGBOprDesc size: expect=%zu got=%u, may caused by " "extern_c_opr.h mismatch, please confirm that the " "extern_c_opr.h used when compiling the loader is consistent " @@ -345,6 +347,8 @@ void ExternCOprRunner::check_param() { //! ExternDeviceTensor for some case, ExternCOprParam may only config //! device_id, extra_info, etc. so we need consider nr_input=0 or //! nr_output=0 + if (!is_loader_support_dynamic_param) + return; auto check = [](size_t nr_config_tensor, size_t var_node_size, ExternDeviceTensor* e_tensor, const VarNodeArray& var_node_array, const char* msg) { diff --git a/src/serialization/include/megbrain/serialization/extern_c_opr_io.h b/src/serialization/include/megbrain/serialization/extern_c_opr_io.h index f6fb39ec..522d9089 100644 --- a/src/serialization/include/megbrain/serialization/extern_c_opr_io.h +++ b/src/serialization/include/megbrain/serialization/extern_c_opr_io.h @@ -33,6 +33,7 @@ MGB_DEFINE_OPR_CLASS(ExternCOprRunner, void add_input_layout_constraint() override; void init_output_dtype() override; void check_param(); + bool is_loader_support_dynamic_param; static cg::OperatorNodeBase* make_from_desc_shared( std::string& name, const VarNodeArray& inputs, @@ -98,6 +99,8 @@ public: } void set_param(const std::shared_ptr& param) { + mgb_assert(is_loader_support_dynamic_param, + "set_param function need loader imp dynamic_param"); m_param = param; m_desc->dynamic_param = m_param.get(); } -- GitLab