step1:primitive A compile first time
step2:python change attribute of primitive A [not sync change to prim adapter]
step3:primitive A compile second time[compile depend on prim adapter, result
wrang]
used the flag "opt_level" to control GraphKernel,
0 means disabled while non-zero value means enabled.
the default value is controlled by context "enable_graph_kernel",
but if it's also set in "graph_kernel_flags", then the flag will prevail.
supported the whitelist and blacklist operators for GraphKernelExpander.
"enable_expand_ops", "enable_expand_ops_only", "disable_expand_ops".
The basic idea is: exploits data dependency to control the execution order
of side-effect operations, and keep the semantics of ANF unchanged.
The ControlDepend primitive is removed and there are two primitives added:
1. UpdateState:
```
a = Assign(para, value)
```
became:
```
a = Assign(para, value, u)
u = UpdateState(u, a)
```
2. Load:
```
x = Add(para, value)
```
became:
```
p = Load(para, u)
x = Add(p, value)
u = UpdateState(u, p)
```
1. add env_config_path for ms_context
2. add EnvConfigParser to parse config
3. add in CMakeLists
4. clang-format, cpplint
5. fix spelling in ms_context
Use EnvConfigParser in the constructed function of base_recorder,
when a recorder is initialized, its direcctory will be set as the
value from config file. In addition, recorder_manager will get the
'enable' from config file. If 'enable' is true and the path is not a
valid value, it will be the default value: './rdr'.