Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
84d36a71
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看板
提交
84d36a71
编写于
7月 21, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
7月 21, 2020
浏览文件
操作
浏览文件
下载
差异文件
!3128 deal with maketuple nodes properly when splits graphs
Merge pull request !3128 from Etone.Chan/July
上级
69a10fcb
a0aa25a6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
5 deletion
+42
-5
mindspore/core/ir/anf.cc
mindspore/core/ir/anf.cc
+42
-5
未找到文件。
mindspore/core/ir/anf.cc
浏览文件 @
84d36a71
...
...
@@ -23,10 +23,10 @@
#include <vector>
#include <unordered_map>
#include "base/core_ops.h"
#include "ir/func_graph.h"
#include "ir/primitive.h"
#include "utils/context/ms_context.h"
#include "base/core_ops.h"
namespace
mindspore
{
// namespace to support intermediate representation definition
...
...
@@ -191,6 +191,41 @@ std::string get_id(const AnfNodePtr &node) {
void
reset_id
()
{
node_ids
.
clear
();
}
}
// namespace id_generator
namespace
{
std
::
string
GetMaketupleNodeTarget
(
const
CNodePtr
&
cnode
)
{
MS_EXCEPTION_IF_NULL
(
cnode
);
auto
func_graph
=
cnode
->
func_graph
();
MS_EXCEPTION_IF_NULL
(
func_graph
);
auto
manager
=
func_graph
->
manager
();
MS_EXCEPTION_IF_NULL
(
manager
);
auto
users
=
manager
->
node_users
()[
cnode
];
std
::
string
first_user_target
=
GetCNodeTarget
(
users
.
back
().
first
);
bool
is_used_by_different_target
=
std
::
any_of
(
std
::
begin
(
users
),
std
::
end
(
users
),
[
&
first_user_target
](
const
std
::
pair
<
AnfNodePtr
,
int
>
&
u
)
->
bool
{
return
GetCNodeTarget
(
u
.
first
)
!=
first_user_target
;
});
if
(
!
is_used_by_different_target
)
{
return
first_user_target
;
}
auto
inputs
=
cnode
->
inputs
();
std
::
vector
<
AnfNodePtr
>
real_inputs
;
std
::
copy
(
inputs
.
begin
()
+
1
,
inputs
.
end
(),
std
::
back_inserter
(
real_inputs
));
std
::
string
first_input_target
=
GetCNodeTarget
(
real_inputs
[
0
]);
bool
is_from_different_target
=
std
::
any_of
(
std
::
begin
(
real_inputs
),
std
::
end
(
real_inputs
),
[
&
first_input_target
](
const
AnfNodePtr
&
n
)
->
bool
{
return
GetCNodeTarget
(
n
)
!=
first_input_target
;
});
if
(
!
is_from_different_target
)
{
return
first_input_target
;
}
auto
context_ptr
=
MsContext
::
GetInstance
();
MS_EXCEPTION_IF_NULL
(
context_ptr
);
std
::
string
default_target
=
context_ptr
->
device_target
();
return
default_target
;
}
}
// namespace
std
::
string
GetCNodeTarget
(
const
AnfNodePtr
&
node
)
{
auto
context_ptr
=
MsContext
::
GetInstance
();
MS_EXCEPTION_IF_NULL
(
context_ptr
);
...
...
@@ -220,10 +255,9 @@ std::string GetCNodeTarget(const AnfNodePtr &node) {
if
(
att_target
!=
nullptr
)
{
if
(
IsPrimitive
(
attr_input
,
prim
::
kPrimImageSummary
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimScalarSummary
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimTensorSummary
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimHistogramSummary
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimMakeTuple
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimStateSetItem
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimDepend
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimTupleGetItem
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimControlDepend
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimReturn
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimPartial
))
{
IsPrimitive
(
attr_input
,
prim
::
kPrimStateSetItem
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimDepend
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimTupleGetItem
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimControlDepend
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimReturn
)
||
IsPrimitive
(
attr_input
,
prim
::
kPrimPartial
))
{
primitive
->
EraseAttr
(
"primitive_target"
);
return
default_target
;
}
...
...
@@ -236,6 +270,9 @@ std::string GetCNodeTarget(const AnfNodePtr &node) {
}
return
target
;
}
if
(
IsPrimitive
(
node
,
prim
::
kPrimMakeTuple
))
{
return
GetMaketupleNodeTarget
(
cnode
);
}
return
default_target
;
}
}
// namespace mindspore
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录