// // Copyright © 2021 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include "Encoders.hpp" #include "Decoders.hpp" namespace armnn { class RefUnidirectionalSequenceLstmWorkload : public BaseWorkload { public: explicit RefUnidirectionalSequenceLstmWorkload(const UnidirectionalSequenceLstmQueueDescriptor& descriptor, const WorkloadInfo& info); void Execute() const override; void ExecuteAsync(WorkingMemDescriptor& workingMemDescriptor) override; private: void Execute(std::vector inputs, std::vector outputs) const; std::unique_ptr m_InputToInputWeightsTensor; std::unique_ptr m_InputToForgetWeightsTensor; std::unique_ptr m_InputToCellWeightsTensor; std::unique_ptr m_InputToOutputWeightsTensor; std::unique_ptr m_RecurrentToInputWeightsTensor; std::unique_ptr m_RecurrentToForgetWeightsTensor; std::unique_ptr m_RecurrentToCellWeightsTensor; std::unique_ptr m_RecurrentToOutputWeightsTensor; std::unique_ptr m_CellToInputWeightsTensor; std::unique_ptr m_CellToForgetWeightsTensor; std::unique_ptr m_CellToOutputWeightsTensor; std::unique_ptr m_InputGateBiasTensor; std::unique_ptr m_ForgetGateBiasTensor; std::unique_ptr m_CellBiasTensor; std::unique_ptr m_OutputGateBiasTensor; std::unique_ptr m_ProjectionWeightsTensor; std::unique_ptr m_ProjectionBiasTensor; std::unique_ptr m_InputLayerNormWeights; std::unique_ptr m_ForgetLayerNormWeights; std::unique_ptr m_CellLayerNormWeights; std::unique_ptr m_OutputLayerNormWeights; float m_LayerNormEpsilon = static_cast(1e-8); }; } //namespace armnn