Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
172a4687
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看板
提交
172a4687
编写于
8月 05, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
8月 05, 2020
浏览文件
操作
浏览文件
下载
差异文件
!3968 Ignore node with _side_effect attr in cse
Merge pull request !3968 from YuJianfeng/cse
上级
c552e8d9
bff3600f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
25 deletion
+39
-25
mindspore/ccsrc/backend/optimizer/pass/common_subexpression_elimination.cc
...ackend/optimizer/pass/common_subexpression_elimination.cc
+39
-25
未找到文件。
mindspore/ccsrc/backend/optimizer/pass/common_subexpression_elimination.cc
浏览文件 @
172a4687
...
...
@@ -16,6 +16,8 @@
#include "backend/optimizer/pass/common_subexpression_elimination.h"
#include <memory>
#include "runtime/device/kernel_info.h"
#include "backend/session/anf_runtime_algorithm.h"
#include "utils/flags.h"
namespace
mindspore
{
namespace
opt
{
...
...
@@ -33,48 +35,60 @@ bool CheckEqualKernelBuildInfo(const AnfNodePtr &main, const AnfNodePtr &node) {
}
return
false
;
}
bool
HasSideEffectAttr
(
const
AnfNodePtr
&
node
)
{
MS_EXCEPTION_IF_NULL
(
node
);
auto
cnode
=
node
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
cnode
);
if
(
!
AnfAlgo
::
HasNodeAttr
(
GRAPH_FLAG_SIDE_EFFECT
,
cnode
))
{
return
false
;
}
return
AnfAlgo
::
GetNodeAttr
<
bool
>
(
cnode
,
GRAPH_FLAG_SIDE_EFFECT
);
}
}
// namespace
bool
BackendCSE
::
CheckReplace
(
const
AnfNodePtr
&
main
,
const
AnfNodePtr
&
node
,
bool
)
const
{
bool
BackendCSE
::
CheckReplace
(
const
AnfNodePtr
&
main
,
const
AnfNodePtr
&
node
,
bool
check_side_effect
)
const
{
MS_EXCEPTION_IF_NULL
(
main
);
MS_EXCEPTION_IF_NULL
(
node
);
bool
replace
=
false
;
if
(
main
->
isa
<
ValueNode
>
()
&&
node
->
isa
<
ValueNode
>
())
{
auto
main_value
=
GetValueNode
(
main
);
auto
node_value
=
GetValueNode
(
node
);
if
(
main_value
->
isa
<
Primitive
>
()
&&
node_value
->
isa
<
Primitive
>
())
{
re
place
=
false
;
re
turn
false
;
}
else
if
(
main_value
->
isa
<
tensor
::
Tensor
>
()
&&
node_value
->
isa
<
tensor
::
Tensor
>
())
{
re
place
=
(
AbsOf
(
main
)
==
AbsOf
(
node
))
&&
CheckEqualKernelBuildInfo
(
main
,
node
);
re
turn
(
AbsOf
(
main
)
==
AbsOf
(
node
))
&&
CheckEqualKernelBuildInfo
(
main
,
node
);
}
else
{
re
place
=
(
AbsOf
(
main
)
==
AbsOf
(
node
))
&&
(
*
main_value
==
*
node_value
);
re
turn
(
AbsOf
(
main
)
==
AbsOf
(
node
))
&&
(
*
main_value
==
*
node_value
);
}
}
else
if
(
main
->
isa
<
CNode
>
()
&&
node
->
isa
<
CNode
>
())
{
if
(
check_side_effect
&&
HasSideEffectAttr
(
main
))
{
return
false
;
}
if
(
!
CheckEqualKernelBuildInfo
(
main
,
node
))
{
replace
=
false
;
}
else
{
auto
c_main
=
main
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
c_main
);
auto
c_node
=
node
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
c_node
);
const
auto
&
inp1
=
c_main
->
inputs
();
const
auto
&
inp2
=
c_node
->
inputs
();
if
(
inp1
.
size
()
==
inp2
.
size
())
{
bool
appsame
=
true
;
for
(
size_t
j
=
0
;
j
<
inp1
.
size
();
j
++
)
{
MS_EXCEPTION_IF_NULL
(
inp1
[
j
]);
MS_EXCEPTION_IF_NULL
(
inp2
[
j
]);
if
(
!
(
*
inp1
[
j
]
==
*
inp2
[
j
]))
{
appsame
=
false
;
break
;
}
}
replace
=
appsame
;
return
false
;
}
auto
c_main
=
main
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
c_main
);
auto
c_node
=
node
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
c_node
);
const
auto
&
inp1
=
c_main
->
inputs
();
const
auto
&
inp2
=
c_node
->
inputs
();
if
(
inp1
.
size
()
!=
inp2
.
size
())
{
return
false
;
}
for
(
size_t
j
=
0
;
j
<
inp1
.
size
();
j
++
)
{
auto
inp1_j
=
inp1
[
j
];
auto
inp2_j
=
inp2
[
j
];
MS_EXCEPTION_IF_NULL
(
inp1_j
);
MS_EXCEPTION_IF_NULL
(
inp2_j
);
if
(
!
(
*
inp1_j
==
*
inp2_j
))
{
return
false
;
}
}
return
true
;
}
return
replac
e
;
return
fals
e
;
}
bool
CommonSubexpressionElimination
::
Run
(
const
FuncGraphPtr
&
func_graph
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录