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

Method kern_naive

dnn/src/naive/warp_perspective/opr_impl.cpp:131–246  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

129
130template <typename ctype, typename mtype>
131void WarpPerspectiveForwardImpl::kern_naive(
132 const KernParam<ctype, mtype>& kern_param, size_t task_id) {
133 MEGDNN_MARK_USED_VAR(kern_param);
134 MIDOUT_BEGIN(megdnn_naive_warpperspective, ctype, mtype, midout_iv(0)) {
135 UNPACK_WARP_PERSPECTIVE_FWD_KERN_PARAM(kern_param);
136 MEGDNN_MARK_USED_VAR(N_MAT);
137 //! strides of C, H, W on src and dst
138 size_t sstrd[3], dstrd[3];
139 auto set_sstrd = [&](size_t s0, size_t s1, size_t s2) {
140 sstrd[0] = s0;
141 sstrd[1] = s1;
142 sstrd[2] = s2;
143 };
144 auto set_dstrd = [&](size_t s0, size_t s1, size_t s2) {
145 dstrd[0] = s0;
146 dstrd[1] = s1;
147 dstrd[2] = s2;
148 };
149 switch (kern_param.format) {
150 case Format::NCHW:
151 case Format::NCHW4:
152 set_sstrd(IH * IW, IW, 1);
153 set_dstrd(OH * OW, OW, 1);
154 break;
155 case Format::NHWC:
156 set_sstrd(1, IW * C, C);
157 set_dstrd(1, OW * C, C);
158 break;
159 default:
160 megdnn_throw("bad format");
161 }
162
163 bool is_nchw4 = kern_param.format == Format::NCHW4;
164 auto visit_src = [&sptr, sstrd, is_nchw4](size_t c, int h, int w) -> float {
165 if (!is_nchw4)
166 return sptr[sstrd[0] * c + sstrd[1] * h + sstrd[2] * w];
167 else
168 return sptr
169 [((sstrd[0] * (c >> 2) + sstrd[1] * h + sstrd[2] * w) << 2) +
170 (c & 0b11)];
171 };
172 auto visit_src_bd = [&sptr, sstrd, border_val, is_nchw4](
173 size_t c, int h, int w) -> float {
174 if (h != -1 && w != -1) {
175 if (!is_nchw4) {
176 return sptr[sstrd[0] * c + sstrd[1] * h + sstrd[2] * w];
177 } else {
178 return sptr
179 [((sstrd[0] * (c >> 2) + sstrd[1] * h + sstrd[2] * w)
180 << 2) +
181 (c & 0b11)];
182 }
183 } else
184 return border_val;
185 };
186 auto visit_dst = [&dptr, dstrd, is_nchw4](size_t c, int h, int w) -> ctype& {
187 if (!is_nchw4)
188 return dptr[dstrd[0] * c + dstrd[1] * h + dstrd[2] * w];

Callers

nothing calls this directly

Calls 2

get_ptrMethod · 0.80
MIDOUT_BEGINFunction · 0.70

Tested by

no test coverage detected