MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / load_single_opr

Method load_single_opr

src/serialization/impl/serializer_oss_v2.cpp:718–796  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

716}
717
718void GraphLoaderOSSV2::OprLoadContextImpl::load_single_opr(
719 const fbs::v2::Operator* fbopr) {
720 m_cur_opr_tensor_cnt = 0;
721 m_cur_opr_blob_cnt = 0;
722 m_cur_opr_param_cnt = 0;
723
724 OperatorNodeConfig config;
725 if (fbopr->output_dtype()) {
726 config.output_dtype(fbs::intl::load_dtype(fbopr->output_dtype()));
727 }
728 if (fbopr->name()) {
729 config.name(fbopr->name()->str());
730 }
731 if (fbopr->comp_node()) {
732 auto cnt = fbopr->comp_node()->size();
733 cg::OperatorNodeConfig::CompNodeArray comp_node_arr(cnt);
734 for (size_t i = 0; i < cnt; i++) {
735 CompNode cn{};
736 auto node = fbopr->comp_node()->Get(i);
737 if (node) {
738 cn = load_comp_node(node);
739 }
740 comp_node_arr[i] = cn;
741 }
742 config.comp_node_arr(comp_node_arr);
743 }
744 //! opr version must be exist
745 uint8_t opr_version = fbopr->opr_version();
746 auto type_id = fbopr->type_id();
747 const OprRegistryV2* registry =
748 OprRegistryV2::versioned_find_by_id(type_id, opr_version);
749 mgb_throw_if(
750 !registry, SerializationError,
751 "failed to find opr with type %s and version %d.",
752 fbopr->type()->str().c_str(), opr_version);
753
754 // load inputs
755 VarNodeArray inputs;
756 if (fbopr->inputs()) {
757 inputs.resize(fbopr->inputs()->size());
758 for (size_t i = 0; i < inputs.size(); ++i) {
759 inputs[i] = m_id2varnode.at(fbopr->inputs()->Get(i));
760 }
761 }
762
763 // call loader
764 auto accessor = registry->loader(*this, inputs, config);
765 auto opr = accessor.opr();
766
767 // check opr type; note that:
768 // 1. registry->type may be empty for dynamic opr loaders or legacy oprs
769 // 2. due to some optimization, an opr may be replaced by ImmutableTensor
770 mgb_assert(
771 opr && (opr->dyn_typeinfo() == registry->type || !registry->type ||
772 opr->same_type<opr::ImmutableTensor>()),
773 "got_type=%s expected_type=%s", opr ? opr->dyn_typeinfo()->name : nullptr,
774 registry->type->name);
775 // record output vars; read output names

Callers

nothing calls this directly

Calls 15

load_dtypeFunction · 0.85
output_dtypeMethod · 0.80
resizeMethod · 0.80
priorityMethod · 0.80
nameMethod · 0.45
strMethod · 0.45
comp_nodeMethod · 0.45
sizeMethod · 0.45
typeMethod · 0.45
inputsMethod · 0.45
atMethod · 0.45
oprMethod · 0.45

Tested by

no test coverage detected