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

Method load_single_opr

src/serialization/impl/serializer_oss.cpp:758–829  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

756}
757
758void GraphLoaderOSS::OprLoadContextImpl::load_single_opr(const fbs::Operator* fbopr) {
759 m_cur_opr_tensor_cnt = 0;
760 m_cur_opr_blob_cnt = 0;
761 m_cur_opr_param_cnt = 0;
762
763 OperatorNodeConfig config;
764 if (fbopr->output_dtype()) {
765 config.output_dtype(fbs::intl::load_dtype(fbopr->output_dtype()));
766 }
767 if (fbopr->name()) {
768 config.name(fbopr->name()->str());
769 }
770 if (fbopr->comp_node()) {
771 auto cnt = fbopr->comp_node()->size();
772 cg::OperatorNodeConfig::CompNodeArray comp_node_arr(cnt);
773 for (size_t i = 0; i < cnt; i++) {
774 CompNode cn{};
775 auto node = fbopr->comp_node()->Get(i);
776 if (node) {
777 cn = load_comp_node(node);
778 }
779 comp_node_arr[i] = cn;
780 }
781 config.comp_node_arr(comp_node_arr);
782 }
783 const OprRegistry* registry;
784 if (magic_compare) {
785 registry = OprRegistry::find_by_id(fbopr->type_id());
786 } else {
787 registry = OprRegistry::find_by_unversioned_id(fbopr->type_id());
788 }
789 mgb_throw_if(
790 !registry, SerializationError,
791 "failed to find opr with type %s, use python env "
792 "config.dump_registered_oprs() to get a dict that maps from "
793 "opr id to opr name",
794 std::to_string(fbopr->type_id()).c_str());
795
796 // load inputs
797 VarNodeArray inputs;
798 if (fbopr->inputs()) {
799 inputs.resize(fbopr->inputs()->size());
800 for (size_t i = 0; i < inputs.size(); ++i) {
801 inputs[i] = m_id2varnode.at(fbopr->inputs()->Get(i));
802 }
803 }
804
805 // call loader
806 auto accessor = registry->loader(*this, inputs, config);
807 auto opr = accessor.opr();
808
809 // check opr type; note that:
810 // 1. registry->type may be empty for dynamic opr loaders or legacy oprs
811 // 2. due to some optimization, an opr may be replaced by ImmutableTensor
812 mgb_assert(
813 opr && (opr->dyn_typeinfo() == registry->type || !registry->type ||
814 opr->same_type<opr::ImmutableTensor>()),
815 "got_type=%s expected_type=%s", opr ? opr->dyn_typeinfo()->name : nullptr,

Callers

nothing calls this directly

Calls 15

load_dtypeFunction · 0.85
to_stringFunction · 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
inputsMethod · 0.45
atMethod · 0.45
oprMethod · 0.45

Tested by

no test coverage detected