From 0886ac4c403378ac0df85ab520a5db319be525a4 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Mon, 27 Apr 2020 09:55:40 +0100 Subject: MLCE-190: Neon and CL Constant Workloads do not support newer DataTypes * Added support for QASYMM8_SIGNED, QSYMM16, QSYMM8 and QSYMM8_PER_CHANNEL to Neon and CL backends * Added unit tests to Neon, CL and Ref backends Signed-off-by: Mike Kelly Change-Id: I4c726b6d86b4d75abedd130dcea372d1e82be5c2 --- .../neon/workloads/NeonConstantWorkload.cpp | 42 ++++++++++++++++++++++ .../neon/workloads/NeonConstantWorkload.hpp | 1 + 2 files changed, 43 insertions(+) (limited to 'src/backends/neon/workloads') diff --git a/src/backends/neon/workloads/NeonConstantWorkload.cpp b/src/backends/neon/workloads/NeonConstantWorkload.cpp index 1cffbe1448..f7c8a73f78 100644 --- a/src/backends/neon/workloads/NeonConstantWorkload.cpp +++ b/src/backends/neon/workloads/NeonConstantWorkload.cpp @@ -19,6 +19,32 @@ namespace armnn { +arm_compute::Status NeonConstantWorkloadValidate(const TensorInfo& output) +{ + const arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output); + + std::array supportedTypes = { + arm_compute::DataType::BFLOAT16, + arm_compute::DataType::F16, + arm_compute::DataType::F32, + arm_compute::DataType::QASYMM8, + arm_compute::DataType::QASYMM8_SIGNED, + arm_compute::DataType::QSYMM16, + arm_compute::DataType::QSYMM8, + arm_compute::DataType::QSYMM8_PER_CHANNEL + }; + auto it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type()); + + if (it != end(supportedTypes)) + { + return arm_compute::Status{}; + } + else + { + return arm_compute::Status{arm_compute::ErrorCode::RUNTIME_ERROR, "Unsupported DataType"}; + } +} + NeonConstantWorkload::NeonConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) : BaseWorkload(descriptor, info) @@ -68,6 +94,22 @@ void NeonConstantWorkload::Execute() const CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor(), output); break; } + case arm_compute::DataType::QASYMM8_SIGNED: + { + CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor(), output); + break; + } + case arm_compute::DataType::QSYMM16: + { + CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor(), output); + break; + } + case arm_compute::DataType::QSYMM8: + case arm_compute::DataType::QSYMM8_PER_CHANNEL: + { + CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor(), output); + break; + } default: { ARMNN_ASSERT_MSG(false, "Unknown data type"); diff --git a/src/backends/neon/workloads/NeonConstantWorkload.hpp b/src/backends/neon/workloads/NeonConstantWorkload.hpp index 18c1547930..f800a45256 100644 --- a/src/backends/neon/workloads/NeonConstantWorkload.hpp +++ b/src/backends/neon/workloads/NeonConstantWorkload.hpp @@ -9,6 +9,7 @@ namespace armnn { +arm_compute::Status NeonConstantWorkloadValidate(const TensorInfo& output); class NeonConstantWorkload : public BaseWorkload { -- cgit v1.2.1