Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
056f9f6d
M
mindspore
项目概览
magicwindyyd
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mindspore
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
056f9f6d
编写于
7月 06, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
7月 06, 2020
浏览文件
操作
浏览文件
下载
差异文件
!2861 use addparam to replace setparam to reduce overhead
Merge pull request !2861 from xychow/optimize-setparam-to-addparam
上级
ccad0cae
df0d89ed
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
59 addition
and
28 deletion
+59
-28
mindspore/ccsrc/ir/func_graph.cc
mindspore/ccsrc/ir/func_graph.cc
+2
-8
mindspore/ccsrc/ir/func_graph.h
mindspore/ccsrc/ir/func_graph.h
+1
-0
mindspore/ccsrc/ir/manager.cc
mindspore/ccsrc/ir/manager.cc
+41
-19
mindspore/ccsrc/ir/manager.h
mindspore/ccsrc/ir/manager.h
+15
-1
未找到文件。
mindspore/ccsrc/ir/func_graph.cc
浏览文件 @
056f9f6d
...
...
@@ -68,9 +68,7 @@ ParameterPtr FuncGraph::add_parameter() {
void
FuncGraph
::
add_parameter
(
const
ParameterPtr
&
p
)
{
if
(
manager_
.
lock
())
{
std
::
vector
<
AnfNodePtr
>
new_params
=
parameters_
;
new_params
.
push_back
(
p
);
manager_
.
lock
()
->
SetParameters
(
shared_from_base
<
FuncGraph
>
(),
new_params
);
manager_
.
lock
()
->
AddParameter
(
shared_from_base
<
FuncGraph
>
(),
p
);
}
else
{
parameters_
.
push_back
(
p
);
}
...
...
@@ -82,12 +80,8 @@ ParameterPtr FuncGraph::AddWeightParameter(const std::string &name) {
p
->
set_name
(
name
);
p
->
debug_info
()
->
set_name
(
name
);
std
::
vector
<
AnfNodePtr
>
new_params
=
parameters_
;
// append parameter
new_params
.
push_back
(
p
);
if
(
manager_
.
lock
())
{
manager_
.
lock
()
->
SetParameters
(
shared_from_base
<
FuncGraph
>
(),
new_params
);
manager_
.
lock
()
->
AddParameter
(
shared_from_base
<
FuncGraph
>
(),
p
);
}
else
{
parameters_
.
push_back
(
p
);
}
...
...
mindspore/ccsrc/ir/func_graph.h
浏览文件 @
056f9f6d
...
...
@@ -158,6 +158,7 @@ class FuncGraph : public FuncGraphBase {
const
std
::
vector
<
AnfNodePtr
>
&
parameters
()
const
{
return
parameters_
;
}
virtual
ParameterPtr
add_parameter
();
void
add_parameter
(
const
ParameterPtr
&
p
);
void
append_parameter
(
const
ParameterPtr
&
p
)
{
parameters_
.
push_back
(
p
);
}
void
set_parameters
(
const
std
::
vector
<
AnfNodePtr
>
&
params
)
{
parameters_
=
params
;
}
// add a weight parameter with specific name
ParameterPtr
AddWeightParameter
(
const
std
::
string
&
name
);
...
...
mindspore/ccsrc/ir/manager.cc
浏览文件 @
056f9f6d
...
...
@@ -420,6 +420,12 @@ void FuncGraphManager::SetParameters(const FuncGraphPtr &fg, const std::vector<A
tr
.
Commit
();
}
void
FuncGraphManager
::
AddParameter
(
const
FuncGraphPtr
&
fg
,
const
AnfNodePtr
&
parameter
)
{
auto
tr
=
Transact
();
tr
.
AddParameter
(
fg
,
parameter
);
tr
.
Commit
();
}
bool
FuncGraphManager
::
Replace
(
const
AnfNodePtr
&
old_node
,
const
AnfNodePtr
&
new_node
)
{
auto
tr
=
Transact
();
bool
success
=
tr
.
Replace
(
old_node
,
new_node
);
...
...
@@ -532,25 +538,37 @@ void FuncGraphManager::ParseChanges(const std::vector<Change> &changes, EdgeTupl
for
(
auto
&
iter
:
changes
)
{
auto
operation
=
iter
.
op
;
auto
args
=
iter
.
args
;
if
(
operation
==
Change
::
kTxSetEdge
)
{
auto
edge
=
args
.
cast
<
ArgsOfSetEdge
>
();
auto
old_node
=
edge
.
root_node
->
input
(
edge
.
index
);
(
*
rm_edges
)[
std
::
make_pair
(
edge
.
root_node
,
std
::
make_pair
(
edge
.
index
,
old_node
))]
+=
1
;
(
*
add_edges
)[
std
::
make_pair
(
edge
.
root_node
,
std
::
make_pair
(
edge
.
index
,
edge
.
new_node
))]
+=
1
;
(
*
rms
)[
old_node
]
+=
1
;
(
*
adds
)[
edge
.
new_node
]
+=
1
;
edge
.
root_node
->
set_input
(
edge
.
index
,
edge
.
new_node
);
}
else
if
(
operation
==
Change
::
kTxSetParams
)
{
auto
param
=
args
.
cast
<
ArgsOfSetParams
>
();
MS_EXCEPTION_IF_NULL
(
param
.
func_graph
);
auto
old_parameters
=
param
.
func_graph
->
parameters
();
for
(
auto
&
p
:
param
.
params
)
{
(
*
adds
)[
p
]
+=
1
;
}
for
(
auto
&
p
:
old_parameters
)
{
(
*
rms
)[
p
]
+=
1
;
}
param
.
func_graph
->
set_parameters
(
param
.
params
);
switch
(
operation
)
{
case
Change
::
kTxSetEdge
:
{
auto
edge
=
args
.
cast
<
ArgsOfSetEdge
>
();
auto
old_node
=
edge
.
root_node
->
input
(
edge
.
index
);
(
*
rm_edges
)[
std
::
make_pair
(
edge
.
root_node
,
std
::
make_pair
(
edge
.
index
,
old_node
))]
+=
1
;
(
*
add_edges
)[
std
::
make_pair
(
edge
.
root_node
,
std
::
make_pair
(
edge
.
index
,
edge
.
new_node
))]
+=
1
;
(
*
rms
)[
old_node
]
+=
1
;
(
*
adds
)[
edge
.
new_node
]
+=
1
;
edge
.
root_node
->
set_input
(
edge
.
index
,
edge
.
new_node
);
}
break
;
case
Change
::
kTxSetParams
:
{
auto
param
=
args
.
cast
<
ArgsOfSetParams
>
();
MS_EXCEPTION_IF_NULL
(
param
.
func_graph
);
auto
old_parameters
=
param
.
func_graph
->
parameters
();
for
(
auto
&
p
:
param
.
params
)
{
(
*
adds
)[
p
]
+=
1
;
}
for
(
auto
&
p
:
old_parameters
)
{
(
*
rms
)[
p
]
+=
1
;
}
param
.
func_graph
->
set_parameters
(
param
.
params
);
}
break
;
case
Change
::
kTxAddParam
:
{
auto
param
=
args
.
cast
<
ArgsOfAddParam
>
();
MS_EXCEPTION_IF_NULL
(
param
.
func_graph
);
(
*
adds
)[
param
.
param
]
+=
1
;
auto
param_node
=
param
.
param
->
cast
<
ParameterPtr
>
();
param
.
func_graph
->
append_parameter
(
param_node
);
}
break
;
default:
break
;
}
}
}
...
...
@@ -599,6 +617,10 @@ void FuncGraphTransaction::SetParameters(FuncGraphPtr fg, const std::vector<AnfN
changes_
.
emplace_back
(
Change
::
kTxSetParams
,
ArgsOfSetParams
{
fg
,
params
});
}
void
FuncGraphTransaction
::
AddParameter
(
FuncGraphPtr
fg
,
const
AnfNodePtr
&
param
)
{
changes_
.
emplace_back
(
Change
::
kTxAddParam
,
ArgsOfAddParam
{
fg
,
param
});
}
bool
FuncGraphTransaction
::
Replace
(
const
AnfNodePtr
&
old_node
,
const
AnfNodePtr
&
new_node
)
{
MS_EXCEPTION_IF_NULL
(
old_node
);
MS_EXCEPTION_IF_NULL
(
new_node
);
...
...
mindspore/ccsrc/ir/manager.h
浏览文件 @
056f9f6d
...
...
@@ -310,6 +310,7 @@ class FuncGraphManager : public std::enable_shared_from_this<FuncGraphManager> {
void
KeepRoots
(
const
std
::
vector
<
FuncGraphPtr
>
&
roots
=
{});
void
RemoveRoots
();
void
SetParameters
(
const
FuncGraphPtr
&
fg
,
const
std
::
vector
<
AnfNodePtr
>
&
parameters
);
void
AddParameter
(
const
FuncGraphPtr
&
fg
,
const
AnfNodePtr
&
parameter
);
void
MaybeDropFuncGraphs
(
const
FuncGraphSet
&
func_graphs
,
bool
ignore_users
=
false
);
bool
Replace
(
const
AnfNodePtr
&
old_node
,
const
AnfNodePtr
&
new_node
);
void
SetEdge
(
const
AnfNodePtr
&
node
,
int
index
,
const
AnfNodePtr
&
value
);
...
...
@@ -400,6 +401,7 @@ class FuncGraphTransaction {
// set parameters of a func graph
void
SetParameters
(
FuncGraphPtr
fg
,
const
std
::
vector
<
AnfNodePtr
>
&
params
);
void
AddParameter
(
FuncGraphPtr
fg
,
const
AnfNodePtr
&
param
);
// replace old_node with new_node
bool
Replace
(
const
AnfNodePtr
&
old_node
,
const
AnfNodePtr
&
new_node
);
...
...
@@ -427,6 +429,18 @@ struct ArgsOfSetParams {
}
};
// args for add param
struct
ArgsOfAddParam
{
FuncGraphPtr
func_graph
;
AnfNodePtr
param
;
bool
operator
==
(
const
ArgsOfAddParam
&
other
)
const
{
return
&
other
==
this
;
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
ArgsOfAddParam
&
)
{
os
<<
"[ArgsOfAddParam]"
;
return
os
;
}
};
// args for set edge
struct
ArgsOfSetEdge
{
CNodePtr
root_node
;
...
...
@@ -441,7 +455,7 @@ struct ArgsOfSetEdge {
};
struct
Change
{
enum
OpName
{
kTxSetParams
,
kTxSetEdge
};
enum
OpName
{
kTxSetParams
,
kTxSetEdge
,
kTxAddParam
};
OpName
op
;
Any
args
;
Change
(
OpName
name
,
const
Any
&
para
)
:
op
(
name
),
args
(
para
)
{}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录