| 110 | } |
| 111 | |
| 112 | void GraphDumperOSSV2::init_oprs_to_dump(const SymbolVarArray& endpoints) { |
| 113 | m_oprs_to_dump.clear(); |
| 114 | |
| 115 | // iterate oprs to init |
| 116 | auto on_opr = [&](cg::OperatorNodeBase* opr) { |
| 117 | if (should_remove_in_dump(opr)) { |
| 118 | mgb_assert(opr->input().size() == 1); |
| 119 | // Copy input ID to output |
| 120 | for (auto i : opr->output()) { |
| 121 | if (m_var_remove_in_dump.find(opr->input(0)) != |
| 122 | m_var_remove_in_dump.end()) { |
| 123 | m_var_remove_in_dump[i] = m_var_remove_in_dump[opr->input(0)]; |
| 124 | } else { |
| 125 | m_var_remove_in_dump[i] = opr->input(0); |
| 126 | } |
| 127 | } |
| 128 | } else { |
| 129 | auto registry = OprRegistryV2::versioned_find_by_typeinfo( |
| 130 | opr->dyn_typeinfo(), m_version); |
| 131 | if (!registry || !registry->dumper) { |
| 132 | mgb_throw( |
| 133 | cg::OperatorNodeExcExtraInfo::ExcMaker{opr}.make<MegBrainError>, |
| 134 | "serialization as FlatBuffers is not supported for " |
| 135 | "operator %s", |
| 136 | opr->dyn_typeinfo()->name); |
| 137 | } |
| 138 | mgb_assert( |
| 139 | registry->version <= m_version, |
| 140 | "The Operator version should less than model version"); |
| 141 | m_oprs_to_dump.emplace_back(opr, registry); |
| 142 | } |
| 143 | }; |
| 144 | cg::DepOprIter dep_opr_iter{on_opr}; |
| 145 | for (auto i : endpoints) { |
| 146 | dep_opr_iter.add(i.node()->owner_opr()); |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | flatbuffers::Offset<fbs::v2::Metadata> GraphDumperOSSV2::build_metadata( |
| 151 | const Metadata& metadata) { |