diff options
Diffstat (limited to 'src/core/NEON/kernels')
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp | 9 | ||||
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_fp32.cpp | 18 | ||||
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_int16.cpp | 4 | ||||
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_int8.cpp | 7 | ||||
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_uint16.cpp | 4 | ||||
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp | 7 |
6 files changed, 36 insertions, 13 deletions
diff --git a/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp b/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp index 829ae325a9..4579ebd307 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp @@ -73,11 +73,16 @@ public: GemmImpl_gemm_fp16_interleaved() : GemmImplementation<__fp16, __fp16>(GemmMethod::GEMM_INTERLEAVED) { } }; +#if defined(__aarch64__) && (defined(__ARM_FEATURE_VECTOR_ARITHMETIC) || defined(FP16_KERNELS)) +static GemmImpl_gemm_fp16_interleaved_fp16 gemm_fp16_interleaved_fp16_impl{}; +#endif +static GemmImpl_gemm_fp16_interleaved gemm_fp16_interleaved_impl{}; + static std::vector<GemmImplementation<__fp16, __fp16> *> gemm_fp16_methods = { #if defined(__aarch64__) && (defined(__ARM_FEATURE_VECTOR_ARITHMETIC) || defined(FP16_KERNELS)) - new GemmImpl_gemm_fp16_interleaved_fp16(), + &gemm_fp16_interleaved_fp16_impl, #endif - new GemmImpl_gemm_fp16_interleaved() + &gemm_fp16_interleaved_impl }; template<> diff --git a/src/core/NEON/kernels/arm_gemm/gemm_fp32.cpp b/src/core/NEON/kernels/arm_gemm/gemm_fp32.cpp index 6e47adbaa4..e840e90eec 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_fp32.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_fp32.cpp @@ -104,15 +104,23 @@ public: GemmImpl_sgemm_gemm_interleaved() : GemmImplementation<float, float>(GemmMethod::GEMM_INTERLEAVED) { } }; +static GemmImpl_gemv_batched<float, float> gemv_batched_impl{}; +#ifdef __aarch64__ +static GemmImpl_sgemm_gemv_pretransposed sgemm_gemv_pretransposed_impl{}; +static GemmImpl_sgemm_gemv_native_transposed sgemm_gemv_native_transposed_impl{}; +static GemmImpl_sgemm_gemm_native sgemm_gemm_native_impl{}; +#endif +static GemmImpl_sgemm_gemm_interleaved sgemm_gemm_interleaved_impl{}; + /* List of implementations (order matters) */ static std::vector<GemmImplementation<float, float> *> SGemmMethods = { - new GemmImpl_gemv_batched<float, float>(), + &gemv_batched_impl, #ifdef __aarch64__ - new GemmImpl_sgemm_gemv_pretransposed(), - new GemmImpl_sgemm_gemv_native_transposed(), - new GemmImpl_sgemm_gemm_native(), + &sgemm_gemv_pretransposed_impl, + &sgemm_gemv_native_transposed_impl, + &sgemm_gemm_native_impl, #endif - new GemmImpl_sgemm_gemm_interleaved() + &sgemm_gemm_interleaved_impl }; /* Templated function to return this list. */ diff --git a/src/core/NEON/kernels/arm_gemm/gemm_int16.cpp b/src/core/NEON/kernels/arm_gemm/gemm_int16.cpp index f61cc1358f..b7e8fa21af 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_int16.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_int16.cpp @@ -41,8 +41,10 @@ public: GemmImpl_gemm_s16_interleaved() : GemmImplementation<int16_t, int32_t>(GemmMethod::GEMM_INTERLEAVED) { } }; +static GemmImpl_gemm_s16_interleaved gemm_s16_interleaved_impl{}; + static std::vector<GemmImplementation<int16_t, int32_t> *> gemm_s16_methods = { - new GemmImpl_gemm_s16_interleaved() + &gemm_s16_interleaved_impl }; template<> diff --git a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp index f50b399de5..dffa056adc 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_int8.cpp @@ -56,9 +56,12 @@ public: GemmImpl_gemm_s8_interleaved() : GemmImplementation<int8_t, int32_t>(GemmMethod::GEMM_INTERLEAVED) { } }; +static GemmImpl_gemm_s8_interleaved_dot gemm_s8_interleaved_dot_impl{}; +static GemmImpl_gemm_s8_interleaved gemm_s8_interleaved_impl{}; + static std::vector<GemmImplementation<int8_t, int32_t> *> gemm_s8_methods = { - new GemmImpl_gemm_s8_interleaved_dot(), - new GemmImpl_gemm_s8_interleaved() + &gemm_s8_interleaved_dot_impl, + &gemm_s8_interleaved_impl }; template<> diff --git a/src/core/NEON/kernels/arm_gemm/gemm_uint16.cpp b/src/core/NEON/kernels/arm_gemm/gemm_uint16.cpp index f4b712c453..feea4829d1 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_uint16.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_uint16.cpp @@ -41,8 +41,10 @@ public: GemmImpl_gemm_u16_interleaved() : GemmImplementation<uint16_t, uint32_t>(GemmMethod::GEMM_INTERLEAVED) { } }; +static GemmImpl_gemm_u16_interleaved gemm_u16_interleaved_impl{}; + static std::vector<GemmImplementation<uint16_t, uint32_t> *> gemm_u16_methods = { - new GemmImpl_gemm_u16_interleaved() + &gemm_u16_interleaved_impl }; template<> diff --git a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp index d97dd5c3de..60b7954db3 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_uint8.cpp @@ -56,9 +56,12 @@ public: GemmImpl_gemm_u8_interleaved() : GemmImplementation<uint8_t, uint32_t>(GemmMethod::GEMM_INTERLEAVED) { } }; +static GemmImpl_gemm_u8_interleaved_dot gemm_u8_interleaved_dot_impl{}; +static GemmImpl_gemm_u8_interleaved gemm_u8_interleaved_impl{}; + static std::vector<GemmImplementation<uint8_t, uint32_t> *> gemm_u8_methods = { - new GemmImpl_gemm_u8_interleaved_dot(), - new GemmImpl_gemm_u8_interleaved() + &gemm_u8_interleaved_dot_impl, + &gemm_u8_interleaved_impl }; template<> |