| 159 | } |
| 160 | |
| 161 | flatbuffers::Offset<fbs::v2::Operator> GraphDumperOSSV2::build_single_opr( |
| 162 | cg::OperatorNodeBase* opr, const OprRegistryV2* registry) { |
| 163 | m_cur_opr = opr; |
| 164 | ++m_cur_rst.nr_opr; |
| 165 | |
| 166 | using namespace flatbuffers; |
| 167 | Offset<Vector<uint32_t>> inputs; |
| 168 | if (m_cur_opr->input().size()) { |
| 169 | std::vector<uint32_t> v; |
| 170 | v.reserve(m_cur_opr->input().size()); |
| 171 | for (auto inp : m_cur_opr->input()) { |
| 172 | if (m_var2midtensor_id.find(inp) != m_var2midtensor_id.end()) { |
| 173 | v.emplace_back(m_var2midtensor_id.at(inp)); |
| 174 | } else { |
| 175 | mgb_assert( |
| 176 | m_var_remove_in_dump.find(inp) != m_var_remove_in_dump.end(), |
| 177 | "when dump the model, the dependence of var is wrong."); |
| 178 | v.emplace_back(m_var2midtensor_id.at(m_var_remove_in_dump[inp])); |
| 179 | } |
| 180 | } |
| 181 | inputs = m_builder.CreateVector(v); |
| 182 | } |
| 183 | |
| 184 | m_cur_opr_tensor.clear(); |
| 185 | m_blobs.clear(); |
| 186 | m_cur_opr_param.clear(); |
| 187 | m_cur_opr_param_type.clear(); |
| 188 | registry->dumper(*this, *m_cur_opr); |
| 189 | |
| 190 | Offset<Vector<Offset<fbs::v2::CompNode>>> comp_node; |
| 191 | auto& config = m_cur_opr->config(); |
| 192 | if (config.has_comp_node_set()) { |
| 193 | std::vector<flatbuffers::Offset<fbs::v2::CompNode>> cns; |
| 194 | for (const auto& cn : config.comp_node()) { |
| 195 | cns.emplace_back(fbs::v2::CreateCompNode( |
| 196 | m_builder, m_builder.CreateSharedString(cn.to_string_logical()))); |
| 197 | } |
| 198 | comp_node = m_builder.CreateVector(cns); |
| 199 | } |
| 200 | Offset<String> operator_name; |
| 201 | if (m_config.keep_op_name) { |
| 202 | operator_name = m_builder.CreateSharedString(m_cur_opr->name()); |
| 203 | } |
| 204 | |
| 205 | auto output_dtype = build_dtype(config.output_dtype()); |
| 206 | |
| 207 | Offset<Vector<uint32_t>> outputs; |
| 208 | if (m_cur_opr->output().size()) { |
| 209 | std::vector<uint32_t> v; |
| 210 | v.reserve(m_cur_opr->output().size()); |
| 211 | for (auto out : m_cur_opr->output()) { |
| 212 | if (!out->contain_flag(VarNode::Flag::VOLATILE_CONTENT)) { |
| 213 | if (m_config.keep_var_name >= 1) { |
| 214 | auto fbs_out = build_middle_tensor(out); |
| 215 | m_model_middle_tensors.push_back(fbs_out); |
| 216 | } else { |
| 217 | m_model_middle_tensors.push_back(0); |
| 218 | } |
nothing calls this directly
no test coverage detected