Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
2899aaad
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看板
提交
2899aaad
编写于
7月 22, 2020
作者:
W
Wei Luning
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bug in remove phiphi should replace the inner ones first
上级
031ce815
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
12 addition
and
6 deletion
+12
-6
mindspore/ccsrc/pipeline/jit/parse/parse.cc
mindspore/ccsrc/pipeline/jit/parse/parse.cc
+11
-5
mindspore/ccsrc/utils/ordered_map.h
mindspore/ccsrc/utils/ordered_map.h
+1
-1
未找到文件。
mindspore/ccsrc/pipeline/jit/parse/parse.cc
浏览文件 @
2899aaad
...
...
@@ -17,6 +17,8 @@
*/
#include "pipeline/jit/parse/parse.h"
#include <utility>
#include <string>
#include <memory>
#include <sstream>
...
...
@@ -1480,21 +1482,25 @@ AnfNodePtr FindPhis(const std::unordered_map<ParameterPtr, AnfNodePtr> &removabl
void
Parser
::
RemoveUnnecessaryPhis
()
{
// merge all removable phis to one map;
std
::
unordered_map
<
ParameterPtr
,
AnfNodePtr
>
removable_phis
;
std
::
vector
<
ParameterPtr
>
phis
;
for
(
FunctionBlockPtr
&
block
:
func_block_list_
)
{
MS_EXCEPTION_IF_NULL
(
block
);
removable_phis
.
insert
(
block
->
removable_phis
().
begin
(),
block
->
removable_phis
().
end
());
std
::
transform
(
block
->
removable_phis
().
begin
(),
block
->
removable_phis
().
end
(),
std
::
back_inserter
(
phis
),
[](
std
::
pair
<
ParameterPtr
,
AnfNodePtr
>
pair
)
{
return
pair
.
first
;
});
}
if
(
removable_phis
.
size
()
==
0
)
{
return
;
}
auto
fg_name
=
func_graph_
->
ToString
();
auto
mng
=
Manage
(
func_graph_
,
false
);
// replace the nodes
for
(
auto
iter
:
removable_phis
)
{
auto
new_node
=
FindPhis
(
removable_phis
,
iter
.
first
);
MS_LOG
(
DEBUG
)
<<
"phi "
<<
iter
.
first
->
DebugString
()
<<
" to "
<<
new_node
->
DebugString
();
mng
->
Replace
(
iter
.
first
,
new_node
);
// remove from inside to outside
for
(
int
idx
=
SizeToInt
(
phis
.
size
()
-
1
);
idx
>=
0
;
idx
--
)
{
auto
phi
=
phis
[
IntToSize
(
idx
)];
auto
new_node
=
FindPhis
(
removable_phis
,
phi
);
MS_LOG
(
DEBUG
)
<<
"phi "
<<
phi
->
DebugString
()
<<
" to "
<<
new_node
->
DebugString
();
mng
->
Replace
(
phi
,
new_node
);
}
// remove the parameter
for
(
FunctionBlockPtr
&
block
:
func_block_list_
)
{
...
...
mindspore/ccsrc/utils/ordered_map.h
浏览文件 @
2899aaad
...
...
@@ -124,7 +124,7 @@ class OrderedMap {
std
::
pair
<
iterator
,
bool
>
insert
(
const
pair_type
&
kv
)
{
auto
result
=
add
(
kv
.
first
);
if
(
result
.
second
)
{
*
(
result
.
first
)
=
kv
.
second
;
*
(
result
.
first
)
=
kv
;
return
std
::
make_pair
(
std
::
prev
(
end
()),
true
);
}
return
std
::
make_pair
(
result
.
first
,
false
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录