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

Method load_tensor_shared

src/serialization/impl/serializer_oss.cpp:691–738  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

689}
690
691std::shared_ptr<DeviceTensorND> GraphLoaderOSS::OprLoadContextImpl::load_tensor_shared(
692 bool copy_immediatly) {
693 mgb_assert(
694 m_current_opr->tensors() &&
695 m_cur_opr_tensor_cnt < m_current_opr->tensors()->size());
696 auto tensor = m_current_opr->tensors()->Get(m_cur_opr_tensor_cnt++);
697 auto comp_node = load_comp_node(tensor->comp_node());
698 auto layout = load_tensor_layout(tensor);
699 mgb_assert(tensor->data_size());
700 if (m_loader->m_shared_tensor_map.size() <= m_cur_shared_tensor_idx) {
701 m_loader->m_shared_tensor_map.resize(m_cur_shared_tensor_idx + 5);
702 }
703 auto&& sh_reg = m_loader->m_shared_tensor_map.at(m_cur_shared_tensor_idx++);
704 auto&& sh_ptr_ref = sh_reg.second[comp_node.mem_node()];
705 if (sh_ptr_ref) {
706 // cached tensor value is valid so we can reuse it
707 load_tensor_value(nullptr, layout, tensor);
708 if (sh_ptr_ref->comp_node() == comp_node)
709 return sh_ptr_ref;
710 // same mem node but different comp node, change comp node and share
711 // value
712 auto ret = std::make_shared<DeviceTensorND>(*sh_ptr_ref);
713 ret->comp_node(comp_node);
714 return ret;
715 }
716 if (tensor->name()) {
717 sh_reg.first = tensor->name()->str();
718 }
719
720 if (comp_node.mem_node() == CompNode::default_cpu().mem_node() || copy_immediatly) {
721 // directly forward CPU memory
722 HostTensorND hv{comp_node};
723 load_tensor_value(&hv, layout, tensor);
724 sh_ptr_ref = std::make_shared<DeviceTensorND>();
725 if (comp_node.mem_node() == CompNode::default_cpu().mem_node()) {
726 *sh_ptr_ref = DeviceTensorND::make_proxy(hv);
727 } else {
728 mgb_assert(copy_immediatly);
729 sh_ptr_ref->comp_node(comp_node).copy_from(hv).sync();
730 }
731 } else {
732 // use lazy load for non-CPU devices
733 HostTensorND hv{CompNode::default_cpu()};
734 load_tensor_value(&hv, layout, tensor);
735 sh_ptr_ref = m_device_value_loader.make(comp_node, std::move(hv));
736 }
737 return sh_ptr_ref;
738}
739
740Metadata GraphLoaderOSS::OprLoadContextImpl::load_metadata() {
741 const auto* fbmeta = m_loader->m_graph->metadata();

Callers 7

loadMethod · 0.45
loadMethod · 0.45
loadMethod · 0.45
loadMethod · 0.45
loadMethod · 0.45
loadMethod · 0.45
loadMethod · 0.45

Calls 12

load_tensor_layoutFunction · 0.85
tensorsMethod · 0.80
resizeMethod · 0.80
sizeMethod · 0.45
comp_nodeMethod · 0.45
atMethod · 0.45
mem_nodeMethod · 0.45
nameMethod · 0.45
strMethod · 0.45
syncMethod · 0.45
copy_fromMethod · 0.45
makeMethod · 0.45

Tested by

no test coverage detected