diff --git a/src/serialization/impl/extern_c_opr.cpp b/src/serialization/impl/extern_c_opr.cpp index 080b023eb27d19df5f560b9dc3a3e94f556bd23a..cdc36e0342eb47387534fe8b9492ed2a4925bd47 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 f6fb39ec8824f6d193a60cfb09cc2c336e083179..522d9089cf345ea04f0b3927f87d37e22d9543ce 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(); }