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

Method exec

dnn/src/aarch64/relayout/opr_impl.cpp:465–500  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

463} // namespace megdnn
464
465void aarch64::RelayoutForwardImpl::exec(
466 _megdnn_tensor_in src0, _megdnn_tensor_out dst0, Handle* src_handle) {
467 check_cpu_handle(src_handle);
468 TensorND src = src0, dst = dst0;
469 check_layout_and_canonize(src.layout, dst.layout);
470
471 // FIXME: optimize for lowbit cases
472 if (src.layout.dtype.enumv() == DTypeEnum::QuantizedS4 ||
473 src.layout.dtype.enumv() == DTypeEnum::Quantized4Asymm) {
474 fallback::RelayoutForwardImpl::exec(src0, dst0, src_handle);
475 return;
476 }
477 relayout::TransposeParam trans_param;
478 bool trans = relayout::is_transpose(src.layout, dst.layout, trans_param, true);
479 if (trans && trans_param.c == 1 && src0.layout.dtype.size() == 1) {
480 MEGDNN_DISPATCH_CPU_KERN_OPR(transpose_fallback::transpose<TransposeByte>(
481 trans_param.batch, trans_param.m, trans_param.n,
482 static_cast<TransposeByte*>(src.raw_ptr()),
483 static_cast<TransposeByte*>(dst.raw_ptr()), trans_param.stride_m));
484 return;
485 } else if (trans && trans_param.c == 1 && src0.layout.dtype.size() == 2) {
486 MEGDNN_DISPATCH_CPU_KERN_OPR(transpose_fallback::transpose<Transpose2Byte>(
487 trans_param.batch, trans_param.m, trans_param.n,
488 static_cast<Transpose2Byte*>(src.raw_ptr()),
489 static_cast<Transpose2Byte*>(dst.raw_ptr()), trans_param.stride_m));
490 return;
491 } else if (trans && trans_param.c == 1 && src0.layout.dtype.size() == 4) {
492 MEGDNN_DISPATCH_CPU_KERN_OPR(transpose_fallback::transpose<Transpose4Byte>(
493 trans_param.batch, trans_param.m, trans_param.n,
494 static_cast<Transpose4Byte*>(src.raw_ptr()),
495 static_cast<Transpose4Byte*>(dst.raw_ptr()), trans_param.stride_m));
496 return;
497 }
498
499 exec_after_preprocess(src, dst, trans ? &trans_param : nullptr);
500}
501
502// vim: syntax=cpp.doxygen

Callers

nothing calls this directly

Calls 5

execFunction · 0.50
enumvMethod · 0.45
sizeMethod · 0.45
raw_ptrMethod · 0.45

Tested by

no test coverage detected