From 94672fb2af6535adc6ea7fe8b8498580ad8cf3f4 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Wed, 22 Jan 2020 18:36:27 +0000 Subject: COMPMID-3003: Integrate assembly kernels utilizing MMLA instruction. MMLA is a matrix-multiply instruction introduced on armv8.6-A Signed-off-by: Georgios Pinitas Change-Id: I572a54981d48f5a1e0e9e51102cb7ae28ad87806 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/2663 Tested-by: Arm Jenkins Reviewed-by: Michalis Spyrou Comments-Addressed: Arm Jenkins --- src/core/NEON/kernels/arm_gemm/gemm_int8.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/core/NEON/kernels/arm_gemm/gemm_int8.cpp') diff --git a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp index a3446b9ddc..f7d8f65aea 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp @@ -34,10 +34,12 @@ #include "kernels/a64_gemm_s8_12x8.hpp" #include "kernels/a64_gemm_s8_4x4.hpp" #include "kernels/a64_hybrid_s8s32_dot_16x4.hpp" +#include "kernels/a64_interleaved_s8s32_mmla_12x8.hpp" #include "kernels/a64_smallK_hybrid_s8s32_dot_4x6.hpp" #include "kernels/a64_smallK_hybrid_s8s32_dot_4x8.hpp" #include "kernels/sve_hybrid_s8s32_dot_4VLx4.hpp" #include "kernels/sve_interleaved_s8s32_dot_3VLx8.hpp" +#include "kernels/sve_interleaved_s8s32_mmla_3VLx8.hpp" #include "kernels/sve_native_s8s32_dot_4VLx4.hpp" #include "kernels/sve_smallK_hybrid_s8s32_dot_1VLx8.hpp" @@ -45,6 +47,15 @@ namespace arm_gemm { static const GemmImplementation gemm_s8_methods[] = { #ifdef __ARM_FEATURE_SVE +#ifdef V8P6 +{ + GemmMethod::GEMM_INTERLEAVED, + "interleaved_s8s32_mmla_3VLx8", + [](const GemmArgs &args) { return (args._Ksize>8); }, + nullptr, + [](const GemmArgs &args) { return new GemmInterleaved(args); } +}, +#endif { GemmMethod::GEMM_HYBRID, "smallK_hybrid_s8s32_dot_1VLx8", @@ -74,6 +85,15 @@ static const GemmImplementation gemm_s8_methods[] = { [](const GemmArgs &args) { return new GemmInterleaved(args); } }, #endif +#ifdef V8P6 +{ + GemmMethod::GEMM_INTERLEAVED, + "interleaved_s8s32_mmla_12x8", + [](const GemmArgs &args) { return (args._Ksize>8); }, + nullptr, + [](const GemmArgs &args) { return new GemmInterleaved(args); } +}, +#endif { GemmMethod::GEMM_HYBRID, "smallK_hybrid_s8s32_dot_4x8", -- cgit v1.2.1