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

Method scn_do_execute

src/opr/impl/loop/grad.cpp:237–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235}
236
237void LoopGrad::AssignorGradOpr::scn_do_execute() {
238 if (should_fwd()) {
239 rofwd_execute();
240 return;
241 }
242 auto&& prev_gsum = m_state->prev_gsum;
243 auto&& dest = output(0)->dev_tensor();
244 if (prev_gsum.empty()) {
245 // first execution in a loop
246
247 if (m_assignor_grad) {
248 auto&& src = m_assignor_grad->dev_tensor();
249 if (dest.raw_ptr() != src.raw_ptr()) {
250 dest.copy_from_fixlayout(src);
251 } else {
252 mgb_assert(dest.layout().eq_layout(src.layout()));
253 }
254 } else {
255 fill_zero_dev_tensor(dest);
256 }
257 return;
258 }
259 if (m_assignor_grad) {
260 auto&& src = m_assignor_grad->dev_tensor();
261 opr::Elemwise::perform(
262 opr::Elemwise::Mode::ADD, const_cast<DeviceTensorND&>(dest),
263 {src, prev_gsum}, m_state->accum_state.adder);
264 } else {
265 dest.copy_from_fixlayout(prev_gsum);
266 }
267 m_state->accum_state.reset();
268}
269
270cg::OperatorNodeBase* LoopGrad::AssignorGradOpr::shallow_copy(
271 const VarNodeArray& inputs, const OperatorNodeConfig& config) const {

Callers

nothing calls this directly

Calls 12

rofwd_executeFunction · 0.85
fill_zero_dev_tensorFunction · 0.85
copy_from_fixlayoutMethod · 0.80
eq_layoutMethod · 0.80
on_grad_exec_finishMethod · 0.80
scn_do_executeFunction · 0.70
dev_tensorMethod · 0.45
emptyMethod · 0.45
raw_ptrMethod · 0.45
layoutMethod · 0.45
resetMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected