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

Method exec

dnn/src/naive/softmax/opr_impl.cpp:43–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43void SoftmaxForwardImpl::exec(
44 _megdnn_tensor_in src, _megdnn_tensor_out dst, _megdnn_workspace workspace) {
45#if !MGE_BUILD_WITHOUT_NAIVE_EXEC
46 check_exec(src.layout, dst.layout, workspace.size);
47
48 WorkspaceBundle workspace_bundle{
49 workspace.raw_ptr, {src.layout.span().dist_byte(), reduce_worksize}};
50
51 TensorLayout tmp_layout;
52 reduce_opr->param().mode = Reduce::Mode::MAX;
53 reduce_opr->deduce_layout(src.layout, tmp_layout);
54 TensorND max_tensor{workspace_bundle.get_workspace(0).raw_ptr, tmp_layout};
55 reduce_opr->exec(src, max_tensor, workspace_bundle.get_workspace(1));
56
57 elemwise_opr->param().mode = Elemwise::Mode::SUB;
58 elemwise_opr->exec({src, max_tensor}, dst);
59
60 // no broadcast
61 elemwise_opr->param().mode = Elemwise::Mode::EXP;
62 elemwise_opr->exec({dst}, dst);
63
64 reduce_opr->param().mode = Reduce::Mode::SUM;
65 reduce_opr->deduce_layout(src.layout, tmp_layout);
66
67 TensorND deno_tensor{workspace_bundle.get_workspace(0).raw_ptr, tmp_layout};
68 reduce_opr->exec(dst, deno_tensor, workspace_bundle.get_workspace(1));
69
70 elemwise_opr->param().mode = Elemwise::Mode::TRUE_DIV;
71 elemwise_opr->exec({dst, deno_tensor}, dst);
72#else
73 __builtin_trap();
74#endif
75}
76
77//=============================Softmax backward ============================
78

Callers

nothing calls this directly

Calls 7

dist_byteMethod · 0.80
spanMethod · 0.80
paramMethod · 0.45
deduce_layoutMethod · 0.45
get_workspaceMethod · 0.45
raw_ptrMethod · 0.45

Tested by

no test coverage detected