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

Function apply_on_physical_tensor

imperative/src/impl/ops/custom_opdef.cpp:168–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166namespace custom_opdef { // avoid name conflict
167
168SmallVector<TensorPtr> apply_on_physical_tensor(
169 const OpDef& def, const SmallVector<TensorPtr>& inputs,
170 SmallVector<LogicalTensorDesc>& output_descs, const bool& validated) {
171 SmallVector<TensorPtr> outputs(output_descs.size());
172
173 if (validated == false) {
174 auto&& op = static_cast<const CustomOpDef&>(def);
175 for (size_t i = 0; i < outputs.size(); ++i) {
176 auto [output_descs, success] = op.infer_output_attrs(inputs);
177 mgb_assert(success == true, "infer output attributes fall\n");
178 }
179 }
180
181 for (size_t i = 0; i < outputs.size(); ++i) {
182 auto& output = outputs[i];
183 output = Tensor::make(output_descs[i].layout, output_descs[i].comp_node);
184 }
185
186 std::shared_ptr<SmallVector<DeviceTensorND>> inp_tensornds =
187 std::make_shared<SmallVector<DeviceTensorND>>();
188 std::shared_ptr<SmallVector<DeviceTensorND>> oup_tensornds =
189 std::make_shared<SmallVector<DeviceTensorND>>();
190 for (size_t i = 0; i < inputs.size(); ++i) {
191 inp_tensornds->emplace_back(inputs[i]->dev_tensor(true));
192 }
193 for (size_t i = 0; i < outputs.size(); ++i) {
194 oup_tensornds->emplace_back(outputs[i]->dev_tensor(true));
195 }
196
197 auto&& op = static_cast<const CustomOpDef&>(def);
198 op.compute(inp_tensornds, oup_tensornds);
199 return outputs;
200}
201
202VarNodeArray apply_on_var_node(const OpDef& def, const cg::VarNodeArray& inputs) {
203 auto&& op = static_cast<const CustomOpDef&>(def);

Callers

nothing calls this directly

Calls 6

infer_output_attrsMethod · 0.80
emplace_backMethod · 0.80
makeFunction · 0.70
sizeMethod · 0.45
dev_tensorMethod · 0.45
computeMethod · 0.45

Tested by

no test coverage detected