| 463 | } // namespace megdnn |
| 464 | |
| 465 | void 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 |
nothing calls this directly
no test coverage detected