// // StaticModule.hpp // MNN // // Created by MNN on 2020/09/10. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef StaticModule_hpp #define StaticModule_hpp #include #include #include "core/Schedule.hpp" #include "core/Session.hpp" namespace MNN { class Session; class Backend; struct BufferStorage; namespace Express { class StaticModule : public Module { public: StaticModule(std::vector inputs, std::vector outputs, std::vector>&& buffer, Schedule::ScheduleInfo&& scheduleInfo, std::shared_ptr sharedConst, Session::ModeGroup&& mode, std::shared_ptr rt, const Module::Config& config); virtual ~ StaticModule(); virtual std::vector onForward(const std::vector& inputs) override; virtual void onClearCache() override; virtual int onOptimize(Interpreter::SessionMode stage) override; const Session* getSession() const { return mSession.get(); } private: ErrorCode _resize(const std::vector& inputs); ErrorCode _execute(); StaticModule() = default; void resetInputOutputs(); Module* clone(CloneContext* ctx) const override; struct Resource { std::vector mInputs; std::vector mOutputs; int mOutputNumbers; Backend::Info mBnInfo; BackendConfig mBnConfig; // First: outputIndex, Second: outputTensor Index std::vector mOutputFromTensor; // First: outputIndex, Second: input var index std::vector> mOutputFromInput; bool mUseContentInputs = false; std::shared_ptr mSharedConst; Session::ModeGroup mModes; std::vector> mBuffer; std::vector mInputNeedCPU; }; std::shared_ptr mSession; std::vector mInputTensors; std::vector> mPrevInputTensor; std::vector mOutputTensors; std::shared_ptr mResource; bool mShapeInferSeperate = false; std::vector mOutputVars; std::shared_ptr mRuntimeManager; }; } } #endif