diff options
author | Cathal Corbett <cathal.corbett@arm.com> | 2022-02-22 14:43:32 +0000 |
---|---|---|
committer | Teresa Charlin <teresa.charlinreyes@arm.com> | 2022-02-23 10:03:52 +0000 |
commit | f87b90e4dbb906436cf205a2a19e199bfe9224ed (patch) | |
tree | 30e51b634be94e12720c5b3841c44b64341b3615 /src/backends/cl/workloads | |
parent | 79cef69b1ec58f9ce010461eaaad04c896a4fe15 (diff) | |
download | armnn-f87b90e4dbb906436cf205a2a19e199bfe9224ed.tar.gz |
Revert "IVGCVSW-6268 Add support of Unidirectional Sequence Lstm fp32/fp16 to Neon"
This reverts commit b0baff73b1574a198e57d46fcd704cedc43cea16.
Reason for revert: cannot update ACL pin until 22.02 release.
Change-Id: I049a125ba3b6a9b1cd6514ef9dd14d807773ed00
Diffstat (limited to 'src/backends/cl/workloads')
-rw-r--r-- | src/backends/cl/workloads/ClLstmFloatWorkload.cpp | 71 |
1 files changed, 62 insertions, 9 deletions
diff --git a/src/backends/cl/workloads/ClLstmFloatWorkload.cpp b/src/backends/cl/workloads/ClLstmFloatWorkload.cpp index e190f33bbc..37dfab6a5f 100644 --- a/src/backends/cl/workloads/ClLstmFloatWorkload.cpp +++ b/src/backends/cl/workloads/ClLstmFloatWorkload.cpp @@ -7,7 +7,6 @@ #include <cl/ClTensorHandle.hpp> #include <armnn/backends/TensorHandle.hpp> #include <cl/ClLayerSupport.hpp> -#include <aclCommon/ArmComputeUtils.hpp> #include <aclCommon/ArmComputeTensorUtils.hpp> #include <armnn/utility/NumericCast.hpp> @@ -20,8 +19,8 @@ namespace armnn { using namespace armcomputetensorutils; -ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor& descriptor, - const WorkloadInfo& info, +ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor &descriptor, + const WorkloadInfo &info, const arm_compute::CLCompileContext& clCompileContext) : FloatWorkload<LstmQueueDescriptor>(descriptor, info) { @@ -29,7 +28,7 @@ ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor& descriptor, ARMNN_REPORT_PROFILING_WORKLOAD_DESC("ClLstmFloatWorkload_Construct", descriptor.m_Parameters, info, - GetGuid()); + this->GetGuid()); arm_compute::LSTMParams<arm_compute::ICLTensor> lstm_param; @@ -164,8 +163,35 @@ ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor& descriptor, float projection_threshold = m_Data.m_Parameters.m_ClippingThresProj; // for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations - arm_compute::ActivationLayerInfo activationLayerInfo = - ConvertLstmActivationFuncToAclLayerInfo(m_Data.m_Parameters.m_ActivationFunc); + arm_compute::ActivationLayerInfo activationLayerInfo; + if (m_Data.m_Parameters.m_ActivationFunc == 0) + { + // no activation, do nothing + } + else if (m_Data.m_Parameters.m_ActivationFunc == 1) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::RELU); + } + else if (m_Data.m_Parameters.m_ActivationFunc == 3) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0); + } + else if (m_Data.m_Parameters.m_ActivationFunc == 4) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0); + } + else if (m_Data.m_Parameters.m_ActivationFunc == 6) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC); + } + else + { + throw armnn::Exception("Wrong Type of Activation Function!"); + } { ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "ClLstmFloatWorkload_configure"); @@ -237,7 +263,7 @@ ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor& descriptor, void ClLstmFloatWorkload::Execute() const { - ARMNN_SCOPED_PROFILING_EVENT_CL_GUID("ClLstmFloatWorkload_Execute", GetGuid()); + ARMNN_SCOPED_PROFILING_EVENT_CL_GUID("ClLstmFloatWorkload_Execute", this->GetGuid()); RunClFunction(m_LstmLayer, CHECK_LOCATION()); } @@ -328,8 +354,35 @@ arm_compute::Status ClLstmFloatWorkloadValidate(const TensorInfo& input, const T float projection_threshold = descriptor.m_ClippingThresProj; // for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations - arm_compute::ActivationLayerInfo activationLayerInfo = - ConvertLstmActivationFuncToAclLayerInfo(descriptor.m_ActivationFunc); + arm_compute::ActivationLayerInfo activationLayerInfo; + if (descriptor.m_ActivationFunc == 0) + { + // no activation, do nothing + } + else if (descriptor.m_ActivationFunc == 1) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::RELU); + } + else if (descriptor.m_ActivationFunc == 3) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0); + } + else if (descriptor.m_ActivationFunc == 4) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0); + } + else if (descriptor.m_ActivationFunc == 6) + { + activationLayerInfo = arm_compute::ActivationLayerInfo( + arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC); + } + else + { + throw armnn::Exception("Wrong Type of Activation Function!"); + } if (descriptor.m_LayerNormEnabled) { |