| 81 | } |
| 82 | |
| 83 | void Convolution3DBackwardDataImpl::AlgoGroupConvGeneral::exec( |
| 84 | const ExecArgs& args) const { |
| 85 | auto bundle = get_workspace_bundle(args.workspace.raw_ptr, args); |
| 86 | { |
| 87 | auto config = prepare_sub_opr(args); |
| 88 | TensorND tfilter{args.filter_tensor->raw_ptr(), config.first[0]}; |
| 89 | TensorND tdiff{args.diff_tensor->raw_ptr(), config.first[1]}; |
| 90 | TensorND tgrad{args.grad_tensor->raw_ptr(), config.first[2]}; |
| 91 | |
| 92 | size_t c_pos = 1; |
| 93 | auto grp = args.filter_meta.group; |
| 94 | |
| 95 | auto&& fm = args.filter_meta; |
| 96 | auto strd_flt = |
| 97 | (fm.icpg * fm.ocpg * fm.spatial[0] * fm.spatial[1] * |
| 98 | fm.spatial[2] * tfilter.layout.dtype.size()), |
| 99 | strd_diff = |
| 100 | (tdiff.layout.stride[c_pos] * fm.ocpg * tdiff.layout.dtype.size()), |
| 101 | strd_grad = |
| 102 | (tgrad.layout.stride[c_pos] * fm.icpg * tgrad.layout.dtype.size()); |
| 103 | |
| 104 | for (uint32_t g = 0; g < grp; ++g) { |
| 105 | config.second->exec(tfilter, tdiff, tgrad, bundle.get_workspace(0)); |
| 106 | incr_refp(tfilter.get_ref_ptr(), strd_flt); |
| 107 | incr_refp(tdiff.get_ref_ptr(), strd_diff); |
| 108 | incr_refp(tgrad.get_ref_ptr(), strd_grad); |
| 109 | } |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | // vim: syntax=cpp.doxygen |
nothing calls this directly
no test coverage detected