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

Method as_tensor

imperative/src/impl/proxy_graph.cpp:571–599  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

569/*********************** Common Impl ***********************/
570
571TensorPtr ProxyGraph::as_tensor(cg::OperatorNodeBase* opr, bool share) {
572 // TODO : maybe some tensor should copy value from origin opr rather than
573 // share the RawStorage
574 mgb_assert(share, "can't share memory with opr %s", opr->cname());
575 if (opr->same_type<opr::ImmutableTensor>()) {
576 auto&& dv = opr->cast_final_safe<opr::ImmutableTensor>().value();
577 HostTensorND hv(dv.comp_node(), dv.shape(), dv.dtype());
578 const DeviceTensorND* cpu_value;
579 // get host value
580 if (opr->owner_graph() == m_graph.get()) {
581 CUR_OPR_GUARD(opr);
582 m_static_infer_manager->update();
583 cpu_value = m_static_infer_manager->infer_value_fallible(opr->output(0));
584 } else {
585 cpu_value = opr->owner_graph()->static_infer_manager().infer_value_fallible(
586 opr->output(0));
587 }
588 mgb_assert(cpu_value);
589 mgb_assert(cpu_value->comp_node() == CompNode::default_cpu());
590 // default_cpu is synchronous with respect to caller
591 hv.proxy_to_default_cpu().copy_from_fixlayout(*cpu_value);
592 return Tensor::make(dv, hv);
593 } else if (opr->same_type<opr::SharedDeviceTensor>()) {
594 return Tensor::make(
595 opr->cast_final_safe<opr::SharedDeviceTensor>().get_dev_tensor());
596 } else {
597 return {};
598 }
599}
600
601thread_local std::unique_ptr<MegBrainError> ProxyGraph::tm_async_error;
602

Callers

nothing calls this directly

Calls 14

copy_from_fixlayoutMethod · 0.80
get_dev_tensorMethod · 0.80
makeFunction · 0.70
cnameMethod · 0.45
valueMethod · 0.45
comp_nodeMethod · 0.45
shapeMethod · 0.45
dtypeMethod · 0.45
owner_graphMethod · 0.45
getMethod · 0.45
updateMethod · 0.45
infer_value_fallibleMethod · 0.45

Tested by

no test coverage detected