提交 15b647ae 编写于 作者: M Megvii Engine Team

fix(externcopr): check loader imp dynmaic param

GitOrigin-RevId: 5f38c120e3410bab27cb1c8e9f5766e2e88216ae
上级 5c131d2a
......@@ -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) {
......
......@@ -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();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册