提交 742a6153 编写于 作者: W wangliu

simplify the interfaces in operatorBase & dynamic release variable menmory

上级 333ff13f
...@@ -32,9 +32,6 @@ OperatorBase<Dtype>::OperatorBase(const std::string &type, ...@@ -32,9 +32,6 @@ OperatorBase<Dtype>::OperatorBase(const std::string &type,
scope_(scope) { scope_(scope) {
CheckAllInputOutputSet(); CheckAllInputOutputSet();
} }
template <typename Dtype> void OperatorBase<Dtype>::Run() { RunImpl(); }
template <typename Dtype> template <typename Dtype>
void OperatorBase<Dtype>::CheckAllInputOutputSet() const {} void OperatorBase<Dtype>::CheckAllInputOutputSet() const {}
......
...@@ -41,11 +41,18 @@ public: ...@@ -41,11 +41,18 @@ public:
const VariableNameMap &outputs, const AttributeMap &attrs, const VariableNameMap &outputs, const AttributeMap &attrs,
std::shared_ptr<Scope> scope); std::shared_ptr<Scope> scope);
virtual ~OperatorBase() {} virtual ~OperatorBase() {}
virtual void Run(); virtual void Run() const = 0;
const VariableNameMap &Inputs() const { return inputs_; } const VariableNameMap &Inputs() const { return inputs_; }
const VariableNameMap &Outputs() const { return outputs_; } const VariableNameMap &Outputs() const { return outputs_; }
const std::string &Type() const { return type_; } const std::string &Type() const { return type_; }
const AttributeMap &Attrs() const { return attrs_; } const AttributeMap &Attrs() const { return attrs_; }
void ClearVariables() const {
if (this->scope_) {
this->scope_->EraseVars(this->inputs_.at("Filter"));
this->scope_->EraseVars(this->inputs_.at("Input"));
}
}
protected: protected:
std::shared_ptr<Scope> scope_; std::shared_ptr<Scope> scope_;
...@@ -56,7 +63,6 @@ protected: ...@@ -56,7 +63,6 @@ protected:
private: private:
void CheckAllInputOutputSet() const; void CheckAllInputOutputSet() const;
virtual void RunImpl() const = 0;
}; };
template <typename Dtype> template <typename Dtype>
...@@ -68,10 +74,7 @@ public: ...@@ -68,10 +74,7 @@ public:
: OperatorBase<Dtype>(type, inputs, outputs, attrs, scope) {} : OperatorBase<Dtype>(type, inputs, outputs, attrs, scope) {}
virtual void InferShape() const = 0; virtual void InferShape() const = 0;
protected: virtual void Run() const = 0;
virtual void RunImpl() const = 0;
private:
}; };
template <typename Dtype, typename P> class OpKernelBase : PaddleMobileObject { template <typename Dtype, typename P> class OpKernelBase : PaddleMobileObject {
......
...@@ -29,9 +29,6 @@ namespace paddle_mobile { ...@@ -29,9 +29,6 @@ namespace paddle_mobile {
namespace framework { namespace framework {
class Variable : public PaddleMobileObject { class Variable : public PaddleMobileObject {
public: public:
Variable() {}
~Variable() {}
template <typename T> const T *Get() const { template <typename T> const T *Get() const {
return static_cast<const T *>(holder_->Ptr()); return static_cast<const T *>(holder_->Ptr());
} }
......
...@@ -39,12 +39,13 @@ public: ...@@ -39,12 +39,13 @@ public:
using framework::OperatorWithKernel<DeviceType>::OperatorWithKernel; using framework::OperatorWithKernel<DeviceType>::OperatorWithKernel;
void InferShape() const override; void InferShape() const override;
protected: void Run() const {
void RunImpl() const {
operators::ConvKernel<DeviceType, T, ConvParam> kernel; operators::ConvKernel<DeviceType, T, ConvParam> kernel;
kernel.Compute(param_); kernel.Compute(param_);
this->ClearVariables();
} }
private:
ConvParam param_; ConvParam param_;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册