// // ConvWinograd.hpp // MNN // // Created by MNN on 2019/02/01. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef conv_winograd_hpp #define conv_winograd_hpp #include "backend/opencl/execution/image/ConvExecution.hpp" namespace MNN { namespace OpenCL { struct ConvWinoResource { const Convolution2DCommon* mCommon; std::shared_ptr mWeight; std::shared_ptr mBias; }; class ConvWinograd : public CommonExecution { public: virtual ~ConvWinograd() = default; ConvWinograd(const MNN::Op *op, Backend* backend); ConvWinograd(std::shared_ptr resource, const MNN::Op* op, Backend* backend); virtual ErrorCode onEncode(const std::vector& inputs, const std::vector& outputs) override; virtual bool onClone(Backend* bn, const Op* op, Execution** dst) override; static bool valid(const Convolution2DCommon* common, const Tensor* input, const Tensor* output, int maxWidth, int maxHeight, int limit = 8192); private: OpenCLBackend* mOpenCLBackend; std::shared_ptr mResource; int mKernelX; int mKernelY; int mPadX; int mPadY; int mStrideX; int mStrideY; MNN::PadMode mPadMode; std::shared_ptr mSource; std::shared_ptr mDest; std::vector mMaxWGS_S; std::vector mMaxWGS_D; std::vector > mGWS_S; std::vector > mGWS_D; std::vector > mGWS_M; std::vector > mLWS_S; std::vector > mLWS_D; std::vector > mLWS_M; }; } // namespace OpenCL } // namespace MNN #endif /* conv_winograd_hpp */