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

Function apply_on_physical_tensor

imperative/src/impl/subgraph_detail.cpp:55–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53}
54
55SmallVector<TensorPtr> apply_on_physical_tensor(
56 const OpDef& def, SmallVector<TensorPtr> inputs,
57 SmallVector<LogicalTensorDesc>& output_descs, const bool& validated) {
58 SmallVector<LogicalTensorDesc> input_descs;
59 for (auto&& input : inputs) {
60 input_descs.push_back({input->layout(), input->comp_node()});
61 }
62 auto subgraph = def.trait()->make_forward_graph(def, input_descs);
63 auto apply_functor = [&output_descs](
64 const std::shared_ptr<OpDef>& op,
65 const SmallVector<TensorPtr>& inputs,
66 size_t nr_outputs) {
67 auto&& constraints = OpDef::get_input_layout_constraint(*op, inputs);
68 for (size_t idx = 0; idx < inputs.size(); ++idx) {
69 auto&& layout_checker = constraints[idx];
70 if (layout_checker) {
71 inputs[idx]->to_contiguous_inplace(layout_checker);
72 }
73 }
74 // do not use infered output_desc in subgraph
75 return OpDef::apply_on_physical_tensor(*op, inputs, output_descs, false);
76 };
77 auto const_functor = [&](const TensorPtr& value) { return value; };
78 auto outputs = subgraph.apply<TensorPtr>(inputs, apply_functor, const_functor);
79 return outputs;
80}
81
82SmallVector<LayoutConstraintCallback> get_input_layout_constraint(
83 const OpDef& def, const SmallVector<TensorPtr>& inputs) {

Callers

nothing calls this directly

Calls 8

make_forward_graphMethod · 0.80
to_contiguous_inplaceMethod · 0.80
push_backMethod · 0.45
layoutMethod · 0.45
comp_nodeMethod · 0.45
traitMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected