Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
正统之独孤求败
mindspore
提交
58ec5244
M
mindspore
项目概览
正统之独孤求败
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
0
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
58ec5244
编写于
7月 29, 2020
作者:
G
Giancarlo Colmenares
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Converted RowTensorEliminater and IndexedSlicesEliminater to use Pattern Matcher
上级
dc961e46
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
69 deletion
+17
-69
mindspore/ccsrc/frontend/optimizer/irpass/row_tensor_eliminate.h
...re/ccsrc/frontend/optimizer/irpass/row_tensor_eliminate.h
+8
-35
mindspore/ccsrc/frontend/optimizer/irpass/sparse_tensor_eliminate.h
...ccsrc/frontend/optimizer/irpass/sparse_tensor_eliminate.h
+7
-34
mindspore/core/ir/pattern_matcher.h
mindspore/core/ir/pattern_matcher.h
+2
-0
未找到文件。
mindspore/ccsrc/frontend/optimizer/irpass/row_tensor_eliminate.h
浏览文件 @
58ec5244
...
...
@@ -20,10 +20,10 @@
#include <vector>
#include <algorithm>
#include "frontend/operator/ops.h"
#include "frontend/optimizer/anf_visitor.h"
#include "frontend/optimizer/irpass.h"
#include "frontend/optimizer/optimizer.h"
#include "frontend/optimizer/anf_visitor.h"
#include "frontend/operator/ops.h"
namespace
mindspore
{
namespace
opt
{
...
...
@@ -31,43 +31,16 @@ namespace irpass {
// {prim::kPrimRowTensorGetIndices, {prim::kPrimMakeRowTensor, Xs}}
// {prim::kPrimRowTensorGetValues, {prim::kPrimMakeRowTensor, Xs}}
// {prim::kPrimRowTensorGetDenseShape, {prim::kPrimMakeRowTensor, Xs}}
class
RowTensorEliminater
:
public
AnfVisito
r
{
class
RowTensorEliminater
:
public
OptimizerCalle
r
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
Reset
();
AnfVisitor
::
Match
(
prim
::
kPrimRowTensorGetIndices
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
1
);
}
AnfVisitor
::
Match
(
prim
::
kPrimRowTensorGetValues
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
2
);
}
AnfVisitor
::
Match
(
prim
::
kPrimRowTensorGetDenseShape
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
3
);
}
PatternNode
x
,
y
,
z
;
auto
slices
=
PPrimitive
(
prim
::
kPrimMakeRowTensor
,
x
,
y
,
z
).
MinExtraNodes
(
0
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimRowTensorGetIndices
,
slices
),
x
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimRowTensorGetValues
,
slices
),
y
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimRowTensorGetDenseShape
,
slices
),
z
);
return
nullptr
;
}
void
Visit
(
const
CNodePtr
&
cnode
)
override
{
if
(
IsPrimitiveCNode
(
cnode
,
prim
::
kPrimMakeRowTensor
))
{
tuple_
=
cnode
;
is_match_
=
true
;
}
}
void
Reset
()
{
tuple_
=
nullptr
;
is_match_
=
false
;
}
private:
bool
is_match_
{
false
};
CNodePtr
tuple_
{
nullptr
};
};
}
// namespace irpass
}
// namespace opt
...
...
mindspore/ccsrc/frontend/optimizer/irpass/sparse_tensor_eliminate.h
浏览文件 @
58ec5244
...
...
@@ -20,10 +20,10 @@
#include <vector>
#include <algorithm>
#include "frontend/operator/ops.h"
#include "frontend/optimizer/irpass.h"
#include "frontend/optimizer/optimizer.h"
#include "ir/visitor.h"
#include "frontend/operator/ops.h"
namespace
mindspore
{
namespace
opt
{
...
...
@@ -31,43 +31,16 @@ namespace irpass {
// {prim::kPrimSparseTensorGetIndices, {prim::kPrimMakeSparseTensor, Xs}}
// {prim::kPrimSparseTensorGetValues, {prim::kPrimMakeSparseTensor, Xs}}
// {prim::kPrimSparseTensorGetDenseShape, {prim::kPrimMakeSparseTensor, Xs}}
class
SparseTensorEliminater
:
public
AnfVisito
r
{
class
SparseTensorEliminater
:
public
OptimizerCalle
r
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
Reset
();
AnfVisitor
::
Match
(
prim
::
kPrimSparseTensorGetIndices
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
1
);
}
AnfVisitor
::
Match
(
prim
::
kPrimSparseTensorGetValues
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
2
);
}
AnfVisitor
::
Match
(
prim
::
kPrimSparseTensorGetDenseShape
,
{
IsCNode
})(
node
);
if
(
is_match_
)
{
return
tuple_
->
input
(
3
);
}
PatternNode
x
,
y
,
z
;
auto
sparse
=
PPrimitive
(
prim
::
kPrimMakeSparseTensor
,
x
,
y
,
z
).
MinExtraNodes
(
0
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimSparseTensorGetIndices
,
sparse
),
x
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimSparseTensorGetValues
,
sparse
),
y
);
MATCH_REPLACE
(
node
,
PPrimitive
(
prim
::
kPrimSparseTensorGetDenseShape
,
sparse
),
z
);
return
nullptr
;
}
void
Visit
(
const
CNodePtr
&
cnode
)
override
{
if
(
IsPrimitiveCNode
(
cnode
,
prim
::
kPrimMakeSparseTensor
))
{
tuple_
=
cnode
;
is_match_
=
true
;
}
}
void
Reset
()
{
tuple_
=
nullptr
;
is_match_
=
false
;
}
private:
bool
is_match_
{
false
};
CNodePtr
tuple_
{
nullptr
};
};
}
// namespace irpass
}
// namespace opt
...
...
mindspore/core/ir/pattern_matcher.h
浏览文件 @
58ec5244
...
...
@@ -372,6 +372,8 @@ class PPrimitive : public PBase<PPrimitive<TArgs...> > {
return
*
this
;
}
const
AnfNodePtrList
&
GetCapturedExtraNodes
()
const
{
return
extra_nodes_
;
}
/// Returns the FuncGraph of the original node captured by this Primitive Pattern.
/// Throws exception if a node was not captured before.
FuncGraphPtr
GetFuncGraph
()
const
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录