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

Method exec

dnn/src/naive/padding/opr_impl.cpp:146–205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

144}
145
146void PaddingForwardImpl::exec(_megdnn_tensor_in src, _megdnn_tensor_out dst) {
147#if !MGE_BUILD_WITHOUT_NAIVE_EXEC
148 forward_check_exec(src.layout, dst.layout);
149 SmallVector<size_t> offsets(get_offsets());
150 ShapeParams params;
151 for (size_t i = 0; i < src.layout.ndim; ++i) {
152 params.src_shape[i] = src.layout.shape[i];
153 params.dst_shape[i] = dst.layout.shape[i];
154 params.src_stride[i] = src.layout.stride[i];
155 params.dst_stride[i] = dst.layout.stride[i];
156 params.offsets[i * 2] = offsets[i * 2];
157 params.offsets[i * 2 + 1] = offsets[i * 2 + 1];
158 }
159
160 size_t n = dst.layout.total_nr_elems();
161 switch (param().padding_mode) {
162 case param::Padding::PaddingMode::CONSTANT:
163#define cb(DType) \
164 if (src.layout.dtype.enumv() == DTypeTrait<DType>::enumv) { \
165 using T = typename DTypeTrait<DType>::ctype; \
166 MEGDNN_DISPATCH_CPU_KERN_OPR(exec_const_internal<T>( \
167 src.layout.ndim, n, src.ptr<T>(), dst.ptr<T>(), params, \
168 T(param().padding_val))); \
169 return; \
170 }
171 MEGDNN_FOREACH_COMPUTING_DTYPE(cb)
172 MEGDNN_FOREACH_QUANTIZED_DTYPE(cb)
173#undef cb
174 break;
175 case param::Padding::PaddingMode::REPLICATE:
176#define cb(DType) \
177 if (src.layout.dtype.enumv() == DTypeTrait<DType>::enumv) { \
178 using T = typename DTypeTrait<DType>::ctype; \
179 MEGDNN_DISPATCH_CPU_KERN_OPR(exec_replicate_internal<T>( \
180 src.layout.ndim, n, src.ptr<T>(), dst.ptr<T>(), params)); \
181 return; \
182 }
183 MEGDNN_FOREACH_COMPUTING_DTYPE(cb)
184 MEGDNN_FOREACH_QUANTIZED_DTYPE(cb)
185#undef cb
186 break;
187 case param::Padding::PaddingMode::REFLECT:
188#define cb(DType) \
189 if (src.layout.dtype.enumv() == DTypeTrait<DType>::enumv) { \
190 using T = typename DTypeTrait<DType>::ctype; \
191 MEGDNN_DISPATCH_CPU_KERN_OPR(exec_reflect_internal<T>( \
192 src.layout.ndim, n, src.ptr<T>(), dst.ptr<T>(), params)); \
193 return; \
194 }
195 MEGDNN_FOREACH_COMPUTING_DTYPE(cb)
196 MEGDNN_FOREACH_QUANTIZED_DTYPE(cb)
197#undef cb
198 break;
199 default:
200 megdnn_assert(false, "unsupported padding mode!");
201 }
202#else
203 __builtin_trap();

Callers

nothing calls this directly

Calls 5

get_offsetsFunction · 0.85
access_bytesMethod · 0.80
paramFunction · 0.50
total_nr_elemsMethod · 0.45
raw_ptrMethod · 0.45

Tested by

no test coverage detected