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

Method dump

src/serialization/impl/serializer_oss.cpp:289–404  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

287}
288
289GraphDumper::DumpResult GraphDumperOSS::dump(
290 const SymbolVarArray& output_vars, const DumpConfig& config,
291 const Metadata& metadata) {
292 mgb_throw_if(output_vars.empty(), SerializationError, "Can't dump empty graph");
293
294 auto begin_pos = m_file->tell();
295 m_config = config;
296 m_builder.Reset();
297
298 m_output_vars.clear();
299 m_cur_rst = {};
300 m_used_input_names.clear();
301 m_used_param_names.clear();
302 m_nr_shared_tensor = 0;
303
304 auto new_output_vars = output_vars;
305 if (!config.no_change_graph) {
306 new_output_vars = converter_all_opr_to_compatiable(output_vars);
307 mgb_assert(output_vars.size() == new_output_vars.size());
308 for (size_t id = 0; id < output_vars.size(); id++) {
309 auto& new_var = new_output_vars[id];
310 new_var.rename(output_vars[id].node()->name());
311 }
312 }
313
314 // process output vars
315 bool keep_output_var_name = m_config.keep_var_name >= 1;
316 std::unordered_set<std::string> output_var_names;
317 for (auto i : new_output_vars) {
318 mgb_assert(
319 !i.node()->contain_flag(VarNode::Flag::VOLATILE_CONTENT),
320 "can not dump var with VOLATILE_CONTENT flag: %s",
321 cg::dump_var_info({i.node()}).c_str());
322 if (m_output_vars.insert(i.node()).second && keep_output_var_name) {
323 auto name_ins = output_var_names.insert(i.node()->name()).second;
324 mgb_assert(name_ins, "duplicated output var name: %s", i.node()->cname());
325 }
326 }
327
328 // Write magic
329 uint32_t magic = MGB_MAGIC;
330 if (m_config.compat_older_version == "8.14") {
331 magic = MAGIC_V0;
332 }
333 m_file->write(&magic, sizeof(magic));
334
335 // write FeatureBits
336 if (m_config.compat_older_version.empty()) {
337 FeatureBits64::write(*m_file);
338 }
339 // Padding
340 uint32_t reserved = 0;
341 m_file->write(&reserved, sizeof(reserved));
342
343 // Write placeholder for offset_to_fbs
344 auto offset_pos = m_file->tell();
345 uint64_t offset_to_fbs = 0;
346 m_file->write(&offset_to_fbs, sizeof(offset_to_fbs));

Callers

nothing calls this directly

Calls 15

writeFunction · 0.85
sortFunction · 0.85
renameMethod · 0.80
emplace_backMethod · 0.80
emptyMethod · 0.45
tellMethod · 0.45
clearMethod · 0.45
sizeMethod · 0.45
nameMethod · 0.45
nodeMethod · 0.45
contain_flagMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected