Browse Source

fix(externcopr): check loader imp dynmaic param

GitOrigin-RevId: 5f38c120e3
release-1.4
Megvii Engine Team 4 years ago
parent
commit
fbd578cc9e
2 changed files with 8 additions and 1 deletions
  1. +5
    -1
      src/serialization/impl/extern_c_opr.cpp
  2. +3
    -0
      src/serialization/include/megbrain/serialization/extern_c_opr_io.h

+ 5
- 1
src/serialization/impl/extern_c_opr.cpp View File

@@ -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) {


+ 3
- 0
src/serialization/include/megbrain/serialization/extern_c_opr_io.h View File

@@ -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<ExternCOprParam>& 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();
}


Loading…
Cancel
Save