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

Method kern_fallback

dnn/src/fallback/warp_perspective/opr_impl.cpp:212–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

210
211template <typename ctype, typename mtype>
212void WarpPerspectiveImpl::kern_fallback(const KernParam<ctype, mtype>& kern_param) {
213 UNPACK_WARP_PERSPECTIVE_FWD_KERN_PARAM(kern_param);
214
215 // cause error if accidentally used
216 sptr = nullptr;
217 mptr = nullptr;
218 dptr = nullptr;
219 MEGDNN_MARK_USED_VAR(sptr);
220 MEGDNN_MARK_USED_VAR(mptr);
221 MEGDNN_MARK_USED_VAR(dptr);
222 MEGDNN_MARK_USED_VAR(border_val);
223
224 KernParam<ctype, mtype> sub_param = kern_param;
225 sub_param.n_src = 1;
226 sub_param.n_mat = 1;
227 sub_param.midx_ptr = RefPtr();
228 sub_param.src_ptr = RefPtr(kern_param.src_ptr.get_ptr());
229 sub_param.mat_ptr = RefPtr(kern_param.mat_ptr.get_ptr());
230 sub_param.dst_ptr = RefPtr(kern_param.dst_ptr.get_ptr());
231 rep(n, N_MAT) {
232 if (midx_ptr) {
233 size_t idx = midx_ptr[n];
234 megdnn_assert(
235 idx < N_SRC, "mat_idx out of bound: mat_idx[%zu]=%zu src_batch=%zu",
236 n, idx, N_SRC);
237 sub_param.src_ptr.reset(
238 static_cast<ctype*>(kern_param.src_ptr.get_ptr()) +
239 idx * (C * IH * IW));
240 } else if (n) {
241 sub_param.src_ptr.reset(
242 static_cast<ctype*>(kern_param.src_ptr.get_ptr()) +
243 n * C * IH * IW);
244 }
245 if (is_resize_optimizable(static_cast<mtype*>(sub_param.mat_ptr.get_ptr()))) {
246 if (bmode == BorderMode::CONSTANT) {
247 MIDOUT_BEGIN(
248 megdnn_fallback_warpperspective, midout_iv(1), midout_iv(true),
249 ctype, mtype) {
250 kern_resize<true, ctype, mtype>(sub_param);
251 }
252 MIDOUT_END();
253 } else {
254 MIDOUT_BEGIN(
255 megdnn_fallback_warpperspective, midout_iv(1), midout_iv(false),
256 ctype, mtype) {
257 kern_resize<false, ctype, mtype>(sub_param);
258 }
259 MIDOUT_END();
260 }
261 } else {
262 MIDOUT_BEGIN(megdnn_fallback_warpperspective, midout_iv(2), ctype, mtype) {
263 rep(oh, OH) kern_naive<ctype, mtype>(sub_param, oh);
264 }
265 MIDOUT_END();
266 }
267 sub_param.mat_ptr += 3 * 3 * sizeof(mtype);
268 sub_param.dst_ptr += C * OH * OW * sizeof(ctype);
269 }

Callers

nothing calls this directly

Calls 2

RefPtrClass · 0.85
get_ptrMethod · 0.80

Tested by

no test coverage detected