aboutsummaryrefslogtreecommitdiff
path: root/src/backends/aclCommon
diff options
context:
space:
mode:
authorCathal Corbett <cathal.corbett@arm.com>2022-01-28 12:17:19 +0000
committerCathal Corbett <cathal.corbett@arm.com>2022-02-21 09:29:38 +0000
commitb0baff73b1574a198e57d46fcd704cedc43cea16 (patch)
tree0db88ad2d0f9e32dec916822d9a42d5d5ab81723 /src/backends/aclCommon
parent23a08cc51569077e057c57fdd2c2b99c0aa982e2 (diff)
downloadarmnn-b0baff73b1574a198e57d46fcd704cedc43cea16.tar.gz
IVGCVSW-6268 Add support of Unidirectional Sequence Lstm fp32/fp16 to Neon
!ComputeLibrary:7150 Signed-off-by: Cathal Corbett <cathal.corbett@arm.com> Change-Id: I3de48ffc8d08c95a22705e2b68d069791bddae73
Diffstat (limited to 'src/backends/aclCommon')
-rw-r--r--src/backends/aclCommon/ArmComputeTensorUtils.cpp32
-rw-r--r--src/backends/aclCommon/ArmComputeTensorUtils.hpp3
-rw-r--r--src/backends/aclCommon/ArmComputeUtils.hpp24
3 files changed, 59 insertions, 0 deletions
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<unsigned int>& 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)