提交 3e099787 编写于 作者: Y Yu Yang

Add scope doc

上级 674b1d34
# Scope # What is a scope.
### Define ## Overview
Scope is a context to manage Variables. It mainly contains a map from Variable name to Variable. Net will get and update variable throw scope. 预期使用场景。
```cpp 引出Scope的两个属性。
class Variable; 1. Scope是Variable的Container
using VariablePtr = std::shared_ptr<Variable>; 2. Scope可以共享
class Scope final { ## Scope 是一个Variable的Container
public:
Scope();
Scope(const std::shared_ptr<Scope>& parent);
//! Get Variable in this scope. 解释下为啥Scope是Variable的container。解释下面几个小点的原因。
//! @return nullptr if no such variable.
const VariablePtr& getVar(const std::string& name) const;
//! Create or get a variable in this scope. * 他只包含variable
VariablePtr& createOrGetVar(const std::string& name); * 每一个variable也只属于一个Scope
* 每一个Scope析构的时候,会同时析构variable
* 只能通过Scope创建Vairable。
* 只能通过Scope获取Variable。
private: ## Scope 可以被继承或者叫共享
/// variable name -> variable
std::unordered_map<std::string, VariablePtr> vars_;
std::shared_ptr<Scope> parent_{nullptr};
};
```
You need to specify a scope to run a Net. One net can run in different scopes and update different variable in the scope. If you did not specify one, It will run in a default scope. 解释下Scope如何被共享,如何查找Variable的算法。
* Scope永远从本地寻找Variable,找不到会从他的父亲Scope寻找Variable
* 嵌套深度不做要求。
```cpp # 接口实现
Scope global;
auto x = newVar("X"); // x is created in scope global, implicitly.
auto y = newVar("Y");
Net net1;
net1.addOp("add", {x, y}, {x}); // x = x + y;
net1.run();
for (size_t i=0; i<10; ++i) { C++ code.
Scope local;
auto tmp = newVar("tmp"); // tmp is created in scope local.
Net net2;
net2.addOp("add", {x, y}, {tmp});
net2.run(); // tmp = x + y;
}
Net net3;
net3.addOp("add", {x, y}, {"tmp"}); // error! cannot found "tmp" in global scope.
``` ## 各个接口是啥意思,为啥这么设计
### Chain structure
Scope has a pointer point to it's parent scope, this is mainly used in RNN when it need to create many stepNet.
### Scope Guard
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册