aboutsummaryrefslogtreecommitdiff
path: root/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2020-01-22 18:36:27 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2020-01-31 11:36:14 +0000
commit94672fb2af6535adc6ea7fe8b8498580ad8cf3f4 (patch)
tree189c68e7ff2c29d7800e09239da6d9a6364d5b05 /src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp
parent6a342648ae50beb8457871862f14fc9baef6b74f (diff)
downloadComputeLibrary-94672fb2af6535adc6ea7fe8b8498580ad8cf3f4.tar.gz
COMPMID-3003: Integrate assembly kernels utilizing MMLA instruction.
MMLA is a matrix-multiply instruction introduced on armv8.6-A Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Change-Id: I572a54981d48f5a1e0e9e51102cb7ae28ad87806 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/2663 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp')
-rw-r--r--src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp
index aead814d7e..430d35e06d 100644
--- a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp
+++ b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp
@@ -34,10 +34,12 @@
#include "kernels/a64_gemm_u8_12x8.hpp"
#include "kernels/a64_gemm_u8_4x4.hpp"
#include "kernels/a64_hybrid_u8u32_dot_16x4.hpp"
+#include "kernels/a64_interleaved_u8u32_mmla_12x8.hpp"
#include "kernels/a64_smallK_hybrid_u8u32_dot_4x6.hpp"
#include "kernels/a64_smallK_hybrid_u8u32_dot_4x8.hpp"
#include "kernels/sve_hybrid_u8u32_dot_4VLx4.hpp"
#include "kernels/sve_interleaved_u8u32_dot_3VLx8.hpp"
+#include "kernels/sve_interleaved_u8u32_mmla_3VLx8.hpp"
#include "kernels/sve_native_u8u32_dot_4VLx4.hpp"
#include "kernels/sve_smallK_hybrid_u8u32_dot_1VLx8.hpp"
@@ -45,6 +47,15 @@ namespace arm_gemm {
static const GemmImplementation<uint8_t, uint32_t> gemm_u8_methods[] = {
#ifdef __ARM_FEATURE_SVE
+#ifdef V8P6
+{
+ GemmMethod::GEMM_INTERLEAVED,
+ "interleaved_u8u32_mmla_3VLx8",
+ [](const GemmArgs &args) { return (args._Ksize>8); },
+ nullptr,
+ [](const GemmArgs &args) { return new GemmInterleaved<interleaved_u8u32_mmla_3VLx8, uint8_t, uint32_t>(args); }
+},
+#endif
{
GemmMethod::GEMM_HYBRID,
"smallK_hybrid_u8u32_dot_1VLx8",
@@ -74,6 +85,15 @@ static const GemmImplementation<uint8_t, uint32_t> gemm_u8_methods[] = {
[](const GemmArgs &args) { return new GemmInterleaved<interleaved_u8u32_dot_3VLx8, uint8_t, uint32_t>(args); }
},
#endif
+#ifdef V8P6
+{
+ GemmMethod::GEMM_INTERLEAVED,
+ "interleaved_u8u32_mmla_12x8",
+ [](const GemmArgs &args) { return (args._Ksize>8); },
+ nullptr,
+ [](const GemmArgs &args) { return new GemmInterleaved<interleaved_u8u32_mmla_12x8, uint8_t, uint32_t>(args); }
+},
+#endif
{
GemmMethod::GEMM_HYBRID,
"smallK_hybrid_u8u32_dot_4x8",