From cd22cbfd02a4fcb49cb40622372a13b865db80ee Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Wed, 2 Dec 2020 16:06:01 +0000 Subject: Update GEMV heuristics for quantized types for A53 Switch assembly kernels to dispatch a 4x4 blocked GEMM kernel for A53 when M <= 4 instead of the 8x12 u16 based one. Resolves: COMPMID-3983 Signed-off-by: Georgios Pinitas Change-Id: Ic46a1b51a7c075e46dcb5cd578c75260ded0540c Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4640 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- src/core/NEON/kernels/arm_gemm/gemm_int8.cpp | 2 +- src/core/NEON/kernels/arm_gemm/gemm_qint8.cpp | 2 +- src/core/NEON/kernels/arm_gemm/gemm_quint8.cpp | 2 +- src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/core') diff --git a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp index 31f225002e..f081558c40 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp @@ -105,7 +105,7 @@ static const GemmImplementation gemm_s8_methods[] = { GemmMethod::GEMM_INTERLEAVED, "a64_gemm_s16_8x12", nullptr, - [](const GemmArgs &args) { return args._ci->get_cpu_model() == CPUModel::A53 && args._Ksize>4; }, + [](const GemmArgs &args) { return args._ci->get_cpu_model() == CPUModel::A53 && ((args._Msize > 28) || ((args._Msize % 8) > 4)); }, [](const GemmArgs &args) { return new GemmInterleaved(args); }, }, { diff --git a/src/core/NEON/kernels/arm_gemm/gemm_qint8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_qint8.cpp index 05c5116bf3..0ffe8080f4 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_qint8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_qint8.cpp @@ -128,7 +128,7 @@ static const GemmImplementation gemm_qint8_methods GemmMethod::GEMM_INTERLEAVED, "a64_gemm_s16_8x12", nullptr, - [](const GemmArgs &args, const Requantize32 &) { return args._ci->get_cpu_model() == CPUModel::A53; }, + [](const GemmArgs &args, const Requantize32 &) { return args._ci->get_cpu_model() == CPUModel::A53 && ((args._Msize > 28) || ((args._Msize % 8) > 4)); }, [](const GemmArgs &args, const Requantize32 &qp) { return new GemmInterleavedQuantized(args, qp); } }, { diff --git a/src/core/NEON/kernels/arm_gemm/gemm_quint8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_quint8.cpp index 7342fda5d1..84628c0c48 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_quint8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_quint8.cpp @@ -118,7 +118,7 @@ static const GemmImplementation gemm_quint8_meth GemmMethod::GEMM_INTERLEAVED, "a64_gemm_u16_8x12", nullptr, - [](const GemmArgs &args, const Requantize32 &) { return args._ci->get_cpu_model() == CPUModel::A53; }, + [](const GemmArgs &args, const Requantize32 &) { return args._ci->get_cpu_model() == CPUModel::A53 && args._Msize > 4; }, [](const GemmArgs &args, const Requantize32 &qp) { return new GemmInterleavedQuantized(args, qp); }, }, { diff --git a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp index c300b8cdf9..7d24ea68d6 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp @@ -106,7 +106,7 @@ static const GemmImplementation gemm_u8_methods[] = { GemmMethod::GEMM_INTERLEAVED, "a64_gemm_u16_8x12", nullptr, - [](const GemmArgs &args) { return args._ci->get_cpu_model() == CPUModel::A53; }, + [](const GemmArgs &args) { return args._ci->get_cpu_model() == CPUModel::A53 && args._Msize > 4; }, [](const GemmArgs &args) { return new GemmInterleaved(args); }, }, { -- cgit v1.2.1