// // CPULayerNorm.hpp // MNN // // Created by MNN on 2023/07/11 // Copyright © 2018, Alibaba Group Holding Limited // #ifndef CPULayerNorm_hpp #define CPULayerNorm_hpp #include "core/Execution.hpp" #include "core/Macro.h" #include "core/BufferAllocator.hpp" namespace MNN { class CPULayerNorm : public Execution { public: struct Resource { int mGroup = 1; float mEpsilon = 0.001; std::unique_ptr mGamma; std::unique_ptr mBeta; bool mIniGammaBeta = false; bool mRMSNorm = false; int mAxis = 0; }; CPULayerNorm(std::shared_ptr res, Backend* backend); virtual ~CPULayerNorm(); virtual ErrorCode onExecute(const std::vector& inputs, const std::vector& outputs) override; virtual ErrorCode onResize(const std::vector& inputs, const std::vector& outputs) override; virtual bool onClone(Backend* bn, const Op* op, Execution** dst) override; static std::shared_ptr makeResource(const MNN::Op* op, Backend* backend); private: std::shared_ptr mResource; int mInnerSize = 1; int mOutterSize = 1; MemChunk mTmpInputFloat; MemChunk mTmpOutputFloat; bool mNeedUnpackC4 = false; }; } // namespace MNN #endif /* CPULayerNorm_hpp */