aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Richardson <john.richardson@arm.com>2017-10-04 15:27:37 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:35:24 +0000
commit3c5f949ad73fff961a7d193c9275b73df13b8096 (patch)
treef7285b4223d2f40907ac5edb4d32bfe3c2883830 /src
parent0063380ca6e43d04722707c707e610b59e1f8dde (diff)
downloadComputeLibrary-3c5f949ad73fff961a7d193c9275b73df13b8096.tar.gz
COMPMID-575: Port Magnitude to new validation
Change-Id: I2600947bef30853d00adfa4b919dbcb860de9bfd Reviewed-on: http://mpd-gerrit.cambridge.arm.com/91717 Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/NEON/kernels/NEMagnitudePhaseKernel.cpp7
-rw-r--r--src/runtime/CL/functions/CLMagnitude.cpp4
-rw-r--r--src/runtime/NEON/functions/NEMagnitude.cpp32
3 files changed, 30 insertions, 13 deletions
diff --git a/src/core/NEON/kernels/NEMagnitudePhaseKernel.cpp b/src/core/NEON/kernels/NEMagnitudePhaseKernel.cpp
index 2424ec139e..646cb84444 100644
--- a/src/core/NEON/kernels/NEMagnitudePhaseKernel.cpp
+++ b/src/core/NEON/kernels/NEMagnitudePhaseKernel.cpp
@@ -143,7 +143,7 @@ inline float32x4_t sqrtv(float32x4_t x)
inline int16x8_t magnitude_l1(int16x8_t input1, int16x8_t input2)
{
- return vqaddq_s16(vabsq_s16(input1), vabsq_s16(input2));
+ return vqaddq_s16(vqabsq_s16(input1), vqabsq_s16(input2));
}
inline int16x8_t magnitude_l2(int16x8_t input1, int16x8_t input2)
@@ -575,11 +575,8 @@ inline int16x8_t magnitude_l2(int16x8_t input1, int16x8_t input2)
inline int16x8_t magnitude_l1(int16x8_t input1, int16x8_t input2)
{
- int16x8_t gx_abs = vabsq_s16(input1);
- int16x8_t gy_abs = vabsq_s16(input2);
-
/* Saturating add */
- return vqaddq_s16(gx_abs, gy_abs);
+ return vqaddq_s16(vqabsq_s16(input1), vqabsq_s16(input2));
}
inline uint8x8_t phase_signed(int16x8_t input1, int16x8_t input2)
diff --git a/src/runtime/CL/functions/CLMagnitude.cpp b/src/runtime/CL/functions/CLMagnitude.cpp
index 68b8c3545a..9d6ac7a11a 100644
--- a/src/runtime/CL/functions/CLMagnitude.cpp
+++ b/src/runtime/CL/functions/CLMagnitude.cpp
@@ -30,8 +30,10 @@
using namespace arm_compute;
-void CLMagnitude::configure(const ICLTensor *input1, const ICLTensor *input2, ICLTensor *output, MagnitudeType mag_type)
+void CLMagnitude::configure(const ICLTensor *input1, const ICLTensor *input2, ICLTensor *output, MagnitudeType mag_type, bool use_fp16)
{
+ ARM_COMPUTE_UNUSED(use_fp16); //TODO(COMPMID-644): Add half float support
+
auto k = arm_compute::support::cpp14::make_unique<CLMagnitudePhaseKernel>();
k->configure(input1, input2, output, nullptr, mag_type);
_kernel = std::move(k);
diff --git a/src/runtime/NEON/functions/NEMagnitude.cpp b/src/runtime/NEON/functions/NEMagnitude.cpp
index 7877995d6b..f86505449f 100644
--- a/src/runtime/NEON/functions/NEMagnitude.cpp
+++ b/src/runtime/NEON/functions/NEMagnitude.cpp
@@ -31,18 +31,36 @@
using namespace arm_compute;
-void NEMagnitude::configure(const ITensor *input1, const ITensor *input2, ITensor *output, bool use_fp16)
+void NEMagnitude::configure(const ITensor *input1, const ITensor *input2, ITensor *output, MagnitudeType mag_type, bool use_fp16)
{
if(use_fp16)
{
- auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseFP16Kernel<MagnitudeType::L2NORM, PhaseType::SIGNED>>();
- k->configure(input1, input2, output, nullptr);
- _kernel = std::move(k);
+ if(mag_type == MagnitudeType::L1NORM)
+ {
+ auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseFP16Kernel<MagnitudeType::L1NORM, PhaseType::SIGNED>>();
+ k->configure(input1, input2, output, nullptr);
+ _kernel = std::move(k);
+ }
+ else
+ {
+ auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseFP16Kernel<MagnitudeType::L2NORM, PhaseType::SIGNED>>();
+ k->configure(input1, input2, output, nullptr);
+ _kernel = std::move(k);
+ }
}
else
{
- auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseKernel<MagnitudeType::L2NORM, PhaseType::SIGNED>>();
- k->configure(input1, input2, output, nullptr);
- _kernel = std::move(k);
+ if(mag_type == MagnitudeType::L1NORM)
+ {
+ auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseKernel<MagnitudeType::L1NORM, PhaseType::SIGNED>>();
+ k->configure(input1, input2, output, nullptr);
+ _kernel = std::move(k);
+ }
+ else
+ {
+ auto k = arm_compute::support::cpp14::make_unique<NEMagnitudePhaseKernel<MagnitudeType::L2NORM, PhaseType::SIGNED>>();
+ k->configure(input1, input2, output, nullptr);
+ _kernel = std::move(k);
+ }
}
}