// // CPUConvolution3D.hpp // MNN // // Created by MNN on 2019/09/03. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef CPUConvolution3D_hpp #define CPUConvolution3D_hpp #include #include "core/Execution.hpp" #include "MNN_generated.h" namespace MNN { class CPUConvolution3D : public Execution { public: CPUConvolution3D(const std::vector &inputs, const std::vector &outputs, const MNN::Op *op, Backend *b); virtual ~CPUConvolution3D(); virtual ErrorCode onResize(const std::vector &inputs, const std::vector &outputs) override; virtual ErrorCode onExecute(const std::vector &inputs, const std::vector &outputs) override; typedef void (*POSTFUNCTION)(float *dst, const float *bias, size_t planeNumber, size_t biasNumber); static POSTFUNCTION getPostFunction(const Convolution3DCommon* common); private: void convertToDepthMajor(float* dst, const float* src, uint32_t planeNumber, uint32_t depth, uint32_t outsideNumber); void convertDNC4HW4toNC4DHW4(float* dst, const float* src, uint32_t planeNumber, uint32_t depth, uint32_t outsideNumber, bool add); const Convolution3DCommon* mCommon; std::vector mDilates; std::vector mStrides; std::vector mKernels; std::vector mPads; int mInputCount; int mOutputCount; PadMode mPadMode; POSTFUNCTION mPostFunction; std::shared_ptr mBias; std::shared_ptr mWeights; std::shared_ptr mInputStorage; std::shared_ptr mSubOutputTensor; std::vector> mSubInputTensors; std::vector> mSubExecution; bool mBreakDown; bool mCrossDepth; }; } // namespace MNN #endif /* CPUConvolution3D_hpp */