Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
23a586b6
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看板
提交
23a586b6
编写于
4月 28, 2020
作者:
E
Etone.Chan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
set RefInfo of Buffer Fusion kernel
上级
2e2e7a28
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
1 deletion
+32
-1
mindspore/ccsrc/pre_activate/ascend/buffer_fusion/buffer_fusion.cc
.../ccsrc/pre_activate/ascend/buffer_fusion/buffer_fusion.cc
+32
-1
未找到文件。
mindspore/ccsrc/pre_activate/ascend/buffer_fusion/buffer_fusion.cc
浏览文件 @
23a586b6
...
...
@@ -24,6 +24,7 @@
#include <memory>
#include <string>
#include <algorithm>
#include <iterator>
#include "kernel/kernel_fusion.h"
#include "debug/anf_ir_dump.h"
...
...
@@ -461,6 +462,36 @@ void GetFusionScopeOutputNodeList(session::KernelGraph *kernel_graph,
}
}
void
SetFusionOpRefInfos
(
session
::
KernelGraph
*
kernel_graph
,
const
std
::
vector
<
AnfNodePtr
>
&
outputs_list
,
const
AnfNodePtr
&
fusion_kernel
)
{
MS_EXCEPTION_IF_NULL
(
kernel_graph
);
auto
manager
=
kernel_graph
->
manager
();
MS_EXCEPTION_IF_NULL
(
manager
);
for
(
size_t
idx
=
0
;
idx
<
outputs_list
.
size
();
++
idx
)
{
auto
output
=
outputs_list
[
idx
];
if
(
output
->
isa
<
CNode
>
()
&&
AnfAlgo
::
GetCNodeName
(
output
)
==
prim
::
kPrimTupleGetItem
->
name
())
{
auto
real_output
=
AnfAlgo
::
VisitKernel
(
output
,
0
);
auto
output_cnode
=
output
->
cast
<
CNodePtr
>
();
MS_EXCEPTION_IF_NULL
(
output_cnode
);
auto
input2
=
output_cnode
->
input
(
2
);
auto
output_idx
=
GetValue
<
int
>
(
GetValueNode
(
input2
));
session
::
AnfWithOutIndex
out_pair
(
real_output
.
first
,
output_idx
);
if
(
kernel_graph
->
IsInRefOutputMap
(
out_pair
))
{
auto
origin_pair
=
kernel_graph
->
GetRefCorrespondOutput
(
out_pair
);
session
::
AnfWithOutIndex
fusion_final_pair
(
fusion_kernel
,
idx
);
kernel_graph
->
AddRefCorrespondPairs
(
fusion_final_pair
,
origin_pair
);
}
}
else
{
session
::
AnfWithOutIndex
out_pair
(
output
,
0
);
if
(
kernel_graph
->
IsInRefOutputMap
(
out_pair
))
{
auto
origin_pair
=
kernel_graph
->
GetRefCorrespondOutput
(
out_pair
);
session
::
AnfWithOutIndex
fusion_final_pair
(
fusion_kernel
,
idx
);
kernel_graph
->
AddRefCorrespondPairs
(
fusion_final_pair
,
origin_pair
);
}
}
}
}
void
MatchConvBnreduce
(
const
CNodePtr
&
cnode
,
const
session
::
KernelGraph
&
kernel_graph
,
std
::
unordered_set
<
AnfNodePtr
>
*
fused_set
,
FusedNodeRecord
*
candidate_fusion
)
{
MS_EXCEPTION_IF_NULL
(
cnode
);
...
...
@@ -708,7 +739,7 @@ bool BufferFusion::ReplaceFusionOp(std::unordered_map<int32_t, BufferFusionInfo_
}
AnfAlgo
::
SetOutputInferTypeAndShape
(
types
,
shapes
,
buffer_fusion
.
get
());
AnfAlgo
::
SetKernelMod
(
kernel_ptr
,
buffer_fusion
.
get
());
// replace node
SetFusionOpRefInfos
(
kernel_graph
,
buffer_fusion_info
.
outputs_list
,
buffer_fusion
);
ReplaceOldNode
(
buffer_fusion_infos
,
fusion_id
,
buffer_fusion
,
kernel_graph
);
return
true
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录