aboutsummaryrefslogtreecommitdiff
path: root/src/backends/neon/NeonLayerSupport.cpp
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/neon/NeonLayerSupport.cpp
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/neon/NeonLayerSupport.cpp')
-rw-r--r--src/backends/neon/NeonLayerSupport.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp
index 2b2229a4de..8901e47a0a 100644
--- a/src/backends/neon/NeonLayerSupport.cpp
+++ b/src/backends/neon/NeonLayerSupport.cpp
@@ -76,6 +76,7 @@
#include "workloads/NeonSubtractionWorkload.hpp"
#include "workloads/NeonTransposeConvolution2dWorkload.hpp"
#include "workloads/NeonTransposeWorkload.hpp"
+#include "workloads/NeonUnidirectionalSequenceLstmFloatWorkload.hpp"
#endif
namespace armnn
@@ -344,6 +345,17 @@ bool NeonLayerSupport::IsLayerSupported(const LayerType& type,
*(PolymorphicDowncast<const QLstmDescriptor*>(&descriptor)),
lstmParamsInfo.value(),
reasonIfUnsupported);
+ case LayerType::UnidirectionalSequenceLstm:
+ return IsUnidirectionalSequenceLstmSupported(infos[0],
+ infos[1],
+ infos[2],
+ infos[3],
+ infos[4],
+ infos[5],
+ *(PolymorphicDowncast<const
+ UnidirectionalSequenceLstmDescriptor*>(&descriptor)),
+ lstmParamsInfo.value(),
+ reasonIfUnsupported);
case LayerType::Maximum:
return IsMaximumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);
case LayerType::Mean:
@@ -1421,4 +1433,26 @@ bool NeonLayerSupport::IsTransposeSupported(const TensorInfo& input,
FORWARD_WORKLOAD_VALIDATE_FUNC(NeonTransposeWorkloadValidate, reasonIfUnsupported, input, output, descriptor);
}
+bool NeonLayerSupport::IsUnidirectionalSequenceLstmSupported(const TensorInfo& input,
+ const TensorInfo& outputStateIn,
+ const TensorInfo& cellStateIn,
+ const TensorInfo& output,
+ const Optional<TensorInfo>& hiddenStateOutput,
+ const Optional<TensorInfo>& cellStateOutput,
+ const UnidirectionalSequenceLstmDescriptor& descriptor,
+ const LstmInputParamsInfo& paramsInfo,
+ Optional<std::string&> reasonIfUnsupported) const
+{
+ FORWARD_WORKLOAD_VALIDATE_FUNC(NeonUnidirectionalSequenceLstmFloatWorkloadValidate,
+ reasonIfUnsupported,
+ input,
+ outputStateIn,
+ cellStateIn,
+ output,
+ hiddenStateOutput,
+ cellStateOutput,
+ descriptor,
+ paramsInfo);
+}
+
} // namespace armnn