// // Convolution1x1Strassen.hpp // MNN // // Created by MNN on 2019/02/12. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef Convolution1x1Strassen_hpp #define Convolution1x1Strassen_hpp #include #include "backend/cpu/CPUConvolution.hpp" #include "backend/cpu/compute/StrassenMatmulComputor.hpp" namespace MNN { #ifndef MNN_REDUCE_SIZE class Convolution1x1Strassen : public CPUConvolution { public: Convolution1x1Strassen(const Convolution2DCommon *common, Backend *b, const float *originWeight, size_t originWeightSize, const float *bias, size_t biasSize); Convolution1x1Strassen(std::shared_ptr resource, const Convolution2DCommon *common, Backend* b); virtual ~Convolution1x1Strassen(); 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; private: std::shared_ptr mResource; struct Unit { bool mValid = true; int offset[4];//Input, Weight, Output, Bias std::shared_ptr mStracssenComputor; }; std::vector mUnits; int mWeightBytes = 4; }; #endif } // namespace MNN #endif /* Convolution1x1Strassen_hpp */