// // VulkanLayernorm.hpp // MNN // // Created by MNN on 2019/01/31. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef VulkanLayernorm_hpp #define VulkanLayernorm_hpp #include #include #include #include "VulkanBasicExecution.hpp" namespace MNN { class VulkanLayernorm : public VulkanBasicExecution { public: VulkanLayernorm(const Op* op, Backend* bn, Tensor * tensor); virtual ~VulkanLayernorm(); virtual ErrorCode onEncode(const std::vector& inputs, const std::vector& outputs, const VulkanCommandPool::Buffer* cmdBuffer) override; virtual bool onClone(Backend* bn, const Op* op, VulkanBasicExecution** dst) override; private: VulkanLayernorm(Backend* bn, const VulkanLayernorm* src); std::shared_ptr mParam; std::shared_ptr mGamma; std::shared_ptr mBias; const VulkanPipeline* mPipeline = nullptr; std::shared_ptr mDesSet; const VulkanPipeline* mOptPipeline = nullptr; std::shared_ptr mOptDesSet; std::string mKey; std::string mOptKey; std::vector mDesTypes; float mEps; bool mHasScale = false; bool mUseRMSNorm = false; int mGroup = 0; int mAxisSize = 0; bool mFP16{false}; }; } // namespace MNN #endif /* VulkanLayernorm_hpp */