// // CPULSTM.hpp // MNN // // Created by MNN on 2018/07/17. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef CPULSTM_hpp #define CPULSTM_hpp #include "backend/cpu/compute/StrassenMatmulComputor.hpp" #include "core/Execution.hpp" #include "MNN_generated.h" namespace MNN { class CPULSTM : public Execution { public: CPULSTM(Backend *backend, const LSTM *LSTM); virtual ~CPULSTM(); virtual ErrorCode onResize(const std::vector &inputs, const std::vector &outputs) override; virtual ErrorCode onExecute(const std::vector &inputs, const std::vector &outputs) override; private: const LSTM *mLSTM; bool mInit = false; bool mGateHaveBias = false; std::shared_ptr mWeightI; std::shared_ptr mWeightH; std::shared_ptr mBiasC; Tensor mInput; Tensor mCont; Tensor mGates; Tensor mCell; Tensor mOutput; struct Unit { std::shared_ptr mTempWeight; std::shared_ptr mTempGates; std::vector mTempInputVector; std::vector mTempOutputVector; std::shared_ptr mStracssenComputor; }; Unit mUnits[4]; std::function mTransposeInputFunction; std::function mRetriveOutputFunction; }; } // namespace MNN #endif /* CPULSTM_hpp */