From fd5bec4cc0e6ef192a580621f225c971d605c261 Mon Sep 17 00:00:00 2001 From: Cathal Corbett Date: Thu, 3 Mar 2022 15:13:23 +0000 Subject: Revert "Revert "IVGCVSW-6268 Add support of Unidirectional Sequence Lstm fp32/fp16 to Neon"" This reverts commit f87b90e4dbb906436cf205a2a19e199bfe9224ed. Reason for revert: 22.02 release. Change-Id: I1ca5a79a8957908f655a6c4e79eefa24c5aec645 --- src/backends/aclCommon/ArmComputeTensorUtils.cpp | 32 ++++++++++++++++++++++++ src/backends/aclCommon/ArmComputeTensorUtils.hpp | 3 +++ src/backends/aclCommon/ArmComputeUtils.hpp | 24 ++++++++++++++++++ 3 files changed, 59 insertions(+) (limited to 'src/backends/aclCommon') diff --git a/src/backends/aclCommon/ArmComputeTensorUtils.cpp b/src/backends/aclCommon/ArmComputeTensorUtils.cpp index 9ed7b7b437..2dc6d2a2b2 100644 --- a/src/backends/aclCommon/ArmComputeTensorUtils.cpp +++ b/src/backends/aclCommon/ArmComputeTensorUtils.cpp @@ -45,6 +45,38 @@ arm_compute::DataType GetArmComputeDataType(armnn::DataType dataType, bool multi } } +armnn::DataType GetArmNNDataType(arm_compute::DataType dataType) +{ + switch(dataType) + { + case arm_compute::DataType::BFLOAT16: + return armnn::DataType::BFloat16; + case arm_compute::DataType::U8: + return armnn::DataType::Boolean; + case arm_compute::DataType::F16: + return armnn::DataType::Float16; + case arm_compute::DataType::F32: + return armnn::DataType::Float32; + case arm_compute::DataType::QASYMM8_SIGNED: + return armnn::DataType::QAsymmS8; + case arm_compute::DataType::QASYMM8: + return armnn::DataType::QAsymmU8; + case arm_compute::DataType::QSYMM16: + return armnn::DataType::QSymmS16; + case arm_compute::DataType::S64: + return armnn::DataType::Signed64; + case arm_compute::DataType::QSYMM8_PER_CHANNEL: + return armnn::DataType::QSymmS8; + case arm_compute::DataType::QSYMM8: + return armnn::DataType::QSymmS8; + case arm_compute::DataType::S32: + return armnn::DataType::Signed32; + default: + ARMNN_ASSERT_MSG(false, "Unknown data type"); + return armnn::DataType::Float32; + } +} + arm_compute::Coordinates BuildArmComputeReductionCoordinates(size_t inputDimensions, unsigned int originalInputRank, const std::vector& armnnAxes) diff --git a/src/backends/aclCommon/ArmComputeTensorUtils.hpp b/src/backends/aclCommon/ArmComputeTensorUtils.hpp index 30df31b79d..ba6ef6a3fe 100644 --- a/src/backends/aclCommon/ArmComputeTensorUtils.hpp +++ b/src/backends/aclCommon/ArmComputeTensorUtils.hpp @@ -25,6 +25,9 @@ namespace armcomputetensorutils /// Utility function to map an armnn::DataType to corresponding arm_compute::DataType. arm_compute::DataType GetArmComputeDataType(armnn::DataType dataType, bool multiScales); +/// Utility function to map an arm_compute::DataType to corresponding armnn::DataType. +armnn::DataType GetArmNNDataType(arm_compute::DataType datatype); + /// Utility function used to set up an arm_compute::Coordinates from a vector of ArmNN Axes for reduction functions arm_compute::Coordinates BuildArmComputeReductionCoordinates(size_t inputDimensions, unsigned int originalInputRank, diff --git a/src/backends/aclCommon/ArmComputeUtils.hpp b/src/backends/aclCommon/ArmComputeUtils.hpp index e76af02765..fab52ffb0f 100644 --- a/src/backends/aclCommon/ArmComputeUtils.hpp +++ b/src/backends/aclCommon/ArmComputeUtils.hpp @@ -112,6 +112,30 @@ ConvertAdditionalInfoToAclActivationLayerInfo(const QueueDescriptor& queueDescri return arm_compute::ActivationLayerInfo(); } +inline arm_compute::ActivationLayerInfo +ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction) +{ + // For preparing the object for the class ActivationLayerInfo, we need to consider 5 situations. + switch (activationFunction) + { + case 0: + return arm_compute::ActivationLayerInfo(); // no activation, do nothing + case 1: + return arm_compute::ActivationLayerInfo(arm_compute::ActivationLayerInfo::ActivationFunction::RELU); + case 3: + return arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0); + case 4: + return arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0); + case 6: + return arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC); + default: + throw armnn::Exception("Wrong Type of Activation Function!"); + } +} + inline arm_compute::ComparisonOperation ConvertComparisonOperationToAcl(const ComparisonDescriptor& descriptor) { switch (descriptor.m_Operation) -- cgit v1.2.1