Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
d638578d
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看板
提交
d638578d
编写于
6月 19, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
6月 19, 2020
浏览文件
操作
浏览文件
下载
差异文件
!2322 Optimizer Caller class
Merge pull request !2322 from Giancarlo/OptimizerCaller
上级
9958bc47
cfc19a62
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
43 addition
and
18 deletion
+43
-18
mindspore/ccsrc/ir/optimizer_caller.h
mindspore/ccsrc/ir/optimizer_caller.h
+29
-0
mindspore/ccsrc/ir/visitor.cc
mindspore/ccsrc/ir/visitor.cc
+1
-2
mindspore/ccsrc/ir/visitor.h
mindspore/ccsrc/ir/visitor.h
+2
-4
mindspore/ccsrc/optimizer/irpass/branch_culling.h
mindspore/ccsrc/optimizer/irpass/branch_culling.h
+11
-12
未找到文件。
mindspore/ccsrc/ir/optimizer_caller.h
0 → 100644
浏览文件 @
d638578d
/**
* Copyright 2020 Huawei Technologies Co., Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MINDSPORE_CCSRC_IR_OPTIMIZER_CALLER_H_
#define MINDSPORE_CCSRC_IR_OPTIMIZER_CALLER_H_
#include "ir/anf.h"
#include "optimizer/opt.h"
namespace
mindspore
{
class
OptimizerCaller
{
public:
virtual
AnfNodePtr
operator
()(
const
opt
::
OptimizerPtr
&
,
const
AnfNodePtr
&
)
{
return
nullptr
;
}
};
}
// namespace mindspore
#endif // MINDSPORE_CCSRC_IR_OPTIMIZER_CALLER_H_
mindspore/ccsrc/ir/visitor.cc
浏览文件 @
d638578d
...
...
@@ -14,11 +14,10 @@
* limitations under the License.
*/
#include "ir/visitor.h"
#include "ir/func_graph.h"
#include "ir/visitor.h"
namespace
mindspore
{
AnfNodePtr
AnfVisitor
::
operator
()(
const
opt
::
OptimizerPtr
&
,
const
AnfNodePtr
&
)
{
return
nullptr
;
}
void
AnfVisitor
::
Visit
(
const
AnfNodePtr
&
node
)
{
node
->
accept
(
this
);
}
void
AnfVisitor
::
Visit
(
const
CNodePtr
&
cnode
)
{
...
...
mindspore/ccsrc/ir/visitor.h
浏览文件 @
d638578d
...
...
@@ -18,14 +18,12 @@
#define MINDSPORE_CCSRC_IR_VISITOR_H_
#include <vector>
#include "ir/anf.h"
#include "optimizer/opt.h"
#include "ir/optimizer_caller.h"
namespace
mindspore
{
using
VisitFuncType
=
std
::
function
<
void
(
const
AnfNodePtr
&
)
>
;
class
AnfVisitor
{
class
AnfVisitor
:
public
OptimizerCaller
{
public:
virtual
AnfNodePtr
operator
()(
const
opt
::
OptimizerPtr
&
,
const
AnfNodePtr
&
);
virtual
void
Visit
(
const
AnfNodePtr
&
);
virtual
void
Visit
(
const
CNodePtr
&
);
virtual
void
Visit
(
const
ValueNodePtr
&
);
...
...
mindspore/ccsrc/optimizer/irpass/branch_culling.h
浏览文件 @
d638578d
...
...
@@ -20,22 +20,21 @@
#include <vector>
#include <algorithm>
#include "optimizer/optimizer.h"
#include "optimizer/irpass.h"
#include "ir/visitor.h"
#include "ir/func_graph.h"
#include "ir/func_graph_cloner.h"
#include "
operator/ops
.h"
#include "
ir/optimizer_caller
.h"
#include "ir/pattern_matcher.h"
#include "operator/ops.h"
#include "optimizer/irpass.h"
namespace
mindspore
{
namespace
opt
{
namespace
irpass
{
// {prim::kPrimSwitch, true, X, Y}
// {prim::kPrimSwitch, false, X, Y}
class
SwitchSimplify
{
class
SwitchSimplify
:
public
OptimizerCaller
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
{
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
PatternNode
<
AnfNodePtr
>
cond
,
true_br
,
false_br
;
auto
SwitchSimplLambda
=
[
&
node
,
&
cond
,
&
true_br
,
&
false_br
]()
->
AnfNodePtr
{
auto
cond_value_
=
GetValue
<
bool
>
(
GetValueNode
(
cond
.
GetNode
(
node
)));
...
...
@@ -54,9 +53,9 @@ class SwitchSimplify {
// {prim::kPrimTupleGetItem, {prim::kPrimSwith, X0, X1, X2}, C} =>
// {prim::kPrimSwith, X0, {prim::kPrimTupleGetItem, X1, C}, {prim::kPrimTupleGetItem, X2, C}}
class
FloatTupleGetItemSwitch
{
class
FloatTupleGetItemSwitch
:
public
OptimizerCaller
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
{
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
PatternNode
<
AnfNodePtr
>
cond
,
true_br
,
false_br
,
x
;
MATCH_REPLACE_IF
(
node
,
PPrimitive
(
prim
::
kPrimTupleGetItem
,
PPrimitive
(
prim
::
kPrimSwitch
,
cond
,
true_br
,
false_br
),
x
),
...
...
@@ -69,9 +68,9 @@ class FloatTupleGetItemSwitch {
// {prim::kPrimEnvGetItem, {prim::kPrimSwitch, X1, X2, X3}, X4, X5} =>
// {prim::kPrimSwitch, X1, {prim::kPrimEnvGetItem, X2, X4, X5}, {prim::kPrimEnvGetItem, X3, X4, X5}}
class
FloatEnvGetItemSwitch
{
class
FloatEnvGetItemSwitch
:
public
OptimizerCaller
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
{
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
PatternNode
<
AnfNodePtr
>
cond
,
true_br
,
false_br
,
x
,
x2
;
MATCH_REPLACE_IF
(
node
,
PPrimitive
(
prim
::
kPrimEnvGetItem
,
PPrimitive
(
prim
::
kPrimSwitch
,
cond
,
true_br
,
false_br
),
x
,
x2
),
...
...
@@ -93,9 +92,9 @@ AnfNodePtr TransformMergeBranches(const AnfNodePtr &true_output_node, const AnfN
}
// namespace internal
// {{prim::kPrimSwitch, X, G1, G2}, Xs}
class
ConvertSwitchReplacement
{
class
ConvertSwitchReplacement
:
public
OptimizerCaller
{
public:
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
{
AnfNodePtr
operator
()(
const
OptimizerPtr
&
,
const
AnfNodePtr
&
node
)
override
{
if
(
!
node
->
isa
<
CNode
>
()
||
node
->
func_graph
()
==
nullptr
)
{
return
nullptr
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录