Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
086edc13
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看板
提交
086edc13
编写于
4月 09, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
4月 09, 2020
浏览文件
操作
浏览文件
下载
差异文件
!65 fix bug of global variable initialization order is not guaranteed during compilation
Merge pull request !65 from mxm/for_prim_map_init
上级
cc75cb35
2f031e15
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
148 addition
and
149 deletion
+148
-149
mindspore/ccsrc/pipeline/static_analysis/prim.cc
mindspore/ccsrc/pipeline/static_analysis/prim.cc
+125
-123
mindspore/ccsrc/pipeline/static_analysis/static_analysis.cc
mindspore/ccsrc/pipeline/static_analysis/static_analysis.cc
+23
-26
未找到文件。
mindspore/ccsrc/pipeline/static_analysis/prim.cc
浏览文件 @
086edc13
...
...
@@ -42,92 +42,95 @@
namespace
mindspore
{
namespace
abstract
{
PrimitiveEvalImplMap
PrimitiveToInferImplMap
=
{
// Statements
{
prim
::
kPrimReturn
,
{
InferImplReturn
,
true
}},
{
prim
::
kPrimTypeOf
,
{
InferImplTypeof
,
false
}},
{
prim
::
kPrimHasType
,
{
InferImplHasType
,
false
}},
{
prim
::
kPrimDot
,
{
InferImplDot
,
true
}},
{
prim
::
kPrimSwitch
,
{
InferImplSwitch
,
true
}},
{
prim
::
kPrimIs_
,
{
InferImplIs_
,
true
}},
{
prim
::
kPrimIsNot
,
{
InferImplIsNot
,
true
}},
// Maths
{
prim
::
kPrimMaximumGrad
,
{
InferImplMinOrMaxGrad
,
true
}},
{
prim
::
kPrimMinimumGrad
,
{
InferImplMinOrMaxGrad
,
true
}},
// Array
{
prim
::
kPrimScalarToArray
,
{
InferImplScalarToArray
,
true
}},
{
prim
::
kPrimArrayToScalar
,
{
InferImplArrayToScalar
,
true
}},
{
prim
::
kPrimBroadcastShape
,
{
InferImplBroadCastShape
,
true
}},
{
prim
::
kPrimShape
,
{
InferImplShape
,
true
}},
{
prim
::
kPrimPack
,
{
InferImplPack
,
true
}},
// Structure
{
prim
::
kPrimMakeTuple
,
{
InferImplMakeTuple
,
true
}},
{
prim
::
kPrimMakeList
,
{
InferImplMakeList
,
true
}},
{
prim
::
kPrimMakeDict
,
{
InferImplMakeDict
,
true
}},
{
prim
::
kPrimMakeSlice
,
{
InferImplMakeSlice
,
true
}},
{
prim
::
kPrimMakeKeywordArg
,
{
InferImplMakeKwarg
,
true
}},
{
prim
::
kPrimExtractKeywordArg
,
{
InferImplExtractKwarg
,
true
}},
{
prim
::
kPrimMakeRecord
,
{
InferImplMakeRecord
,
false
}},
{
prim
::
kPrimTupleGetItem
,
{
InferImplTupleGetItem
,
true
}},
{
prim
::
kPrimListGetItem
,
{
InferImplListGetItem
,
true
}},
{
prim
::
kPrimTupleSetItem
,
{
InferImplTupleSetItem
,
true
}},
{
prim
::
kPrimListSetItem
,
{
InferImplListSetItem
,
true
}},
{
prim
::
kPrimDictGetItem
,
{
InferImplDictGetItem
,
true
}},
{
prim
::
kPrimDictSetItem
,
{
InferImplDictSetItem
,
true
}},
{
prim
::
kPrimListAppend
,
{
InferImplListAppend
,
true
}},
{
prim
::
kPrimTupleLen
,
{
InferImplTupleLen
,
true
}},
{
prim
::
kPrimListLen
,
{
InferImplListLen
,
true
}},
{
prim
::
kPrimArrayLen
,
{
InferImplArrayLen
,
true
}},
{
prim
::
kPrimListMap
,
{
InferImplListMap
,
false
}},
{
prim
::
kPrimListReduce
,
{
InferImplListReduce
,
false
}},
{
prim
::
kPrimTupleReversed
,
{
InferImplTupleReversed
,
false
}},
{
prim
::
kPrimReducedShape
,
{
InferImplReduceShape
,
false
}},
{
prim
::
kPrimTupleDiv
,
{
InferImplTupleDiv
,
false
}},
{
prim
::
kPrimTupleToArray
,
{
InferImplTuple2Array
,
false
}},
{
prim
::
kPrimShapeMul
,
{
InferImplShapeMul
,
false
}},
{
prim
::
kPrimTupleEqual
,
{
InferImplTupleEqual
,
false
}},
{
prim
::
kPrimListEqual
,
{
InferImplListEqual
,
false
}},
{
prim
::
kPrimMakeRange
,
{
InferImplMakeRange
,
false
}},
{
prim
::
kPrimStopGradient
,
{
InferImplStopGradient
,
false
}},
{
prim
::
kPrimStringEqual
,
{
InferImplStringEqual
,
false
}},
{
prim
::
kPrimDictLen
,
{
InferImplDictLen
,
false
}},
// NN
{
prim
::
kPrimPooling
,
{
InferImplPooling
,
true
}},
{
prim
::
kPrimPoolingGrad
,
{
InferImplPoolingGrad
,
true
}},
{
prim
::
kPrimFusedBatchNorm
,
{
InferImplFusedBatchNorm
,
true
}},
{
prim
::
kPrimFusedBatchNormGrad
,
{
InferImplFusedBatchNormGrad
,
true
}},
{
prim
::
kPrimReluGrad
,
{
InferImplReluGrad
,
true
}},
{
prim
::
kPrimConv2DBackpropInput
,
{
InferImplConv2DBackpropInput
,
true
}},
{
prim
::
kPrimConv2DBackpropFilter
,
{
InferImplConv2DBackpropFilter
,
true
}},
{
prim
::
kPrimBiasAddGrad
,
{
InferImplBiasAddGrad
,
true
}},
{
prim
::
kPrimRelu
,
{
InferImplRelu
,
true
}},
{
prim
::
kPrimZerosLikeTensor
,
{
InferImplZerosLikeTensor
,
true
}},
{
prim
::
kPrimFakeBprop
,
{
InferImplFakeBprop
,
false
}},
{
prim
::
kPrimLayerNorm
,
{
InferImplLayerNorm
,
true
}},
{
prim
::
kPrimLayerNormGrad
,
{
InferImplLayerNormGrad
,
true
}},
{
prim
::
kPrimDropoutGenMask
,
{
InferImplDropoutGenMask
,
true
}},
// Others
{
prim
::
kPrimIdentity
,
{
InferImplIdentity
,
true
}},
// Set impl to null as it will use PartialEvaluator;
{
prim
::
kPrimPartial
,
{
nullptr
,
true
}},
{
prim
::
kPrimJ
,
{
InferImplJ
,
false
}},
{
prim
::
kPrimEnvGetItem
,
{
InferImplEnvGetItem
,
true
}},
{
prim
::
kPrimEnvSetItem
,
{
InferImplEnvSetItem
,
true
}},
{
prim
::
kPrimEnvAdd
,
{
InferImplEnvAdd
,
true
}},
{
prim
::
kPrimMakeRefKey
,
{
InferImplMakeRefKey
,
true
}},
{
prim
::
kPrimMakeRef
,
{
InferImplMakeRef
,
true
}},
{
prim
::
kPrimGetRefKey
,
{
InferImplGetRefKey
,
true
}},
{
prim
::
kPrimGetRefValue
,
{
InferImplGetRefValue
,
true
}},
{
prim
::
kPrimGetRefOrigin
,
{
InferImplGetRefOrigin
,
true
}},
{
prim
::
kPrimStateSetItem
,
{
InferImplStateSetItem
,
true
}},
{
prim
::
kPrimDepend
,
{
InferImplDepend
,
true
}},
{
prim
::
kPrimBroadcastGradientArgs
,
{
InferImplBroadcastGradientArgs
,
false
}},
{
prim
::
kPrimControlDepend
,
{
InferImplControlDepend
,
true
}},
// Debug
{
prim
::
kPrimScalarSummary
,
{
InferImplScalarSummary
,
true
}},
{
prim
::
kPrimImageSummary
,
{
InferImplTensorSummary
,
true
}},
{
prim
::
kPrimTensorSummary
,
{
InferImplTensorSummary
,
true
}},
};
PrimitiveEvalImplMap
&
GetPrimitiveToEvalImplMap
()
{
static
PrimitiveEvalImplMap
prim_eval_implement_map
=
{
// Statements
{
prim
::
kPrimReturn
,
{
InferImplReturn
,
true
}},
{
prim
::
kPrimTypeOf
,
{
InferImplTypeof
,
false
}},
{
prim
::
kPrimHasType
,
{
InferImplHasType
,
false
}},
{
prim
::
kPrimDot
,
{
InferImplDot
,
true
}},
{
prim
::
kPrimSwitch
,
{
InferImplSwitch
,
true
}},
{
prim
::
kPrimIs_
,
{
InferImplIs_
,
true
}},
{
prim
::
kPrimIsNot
,
{
InferImplIsNot
,
true
}},
// Maths
{
prim
::
kPrimMaximumGrad
,
{
InferImplMinOrMaxGrad
,
true
}},
{
prim
::
kPrimMinimumGrad
,
{
InferImplMinOrMaxGrad
,
true
}},
// Array
{
prim
::
kPrimScalarToArray
,
{
InferImplScalarToArray
,
true
}},
{
prim
::
kPrimArrayToScalar
,
{
InferImplArrayToScalar
,
true
}},
{
prim
::
kPrimBroadcastShape
,
{
InferImplBroadCastShape
,
true
}},
{
prim
::
kPrimShape
,
{
InferImplShape
,
true
}},
{
prim
::
kPrimPack
,
{
InferImplPack
,
true
}},
// Structure
{
prim
::
kPrimMakeTuple
,
{
InferImplMakeTuple
,
true
}},
{
prim
::
kPrimMakeList
,
{
InferImplMakeList
,
true
}},
{
prim
::
kPrimMakeDict
,
{
InferImplMakeDict
,
true
}},
{
prim
::
kPrimMakeSlice
,
{
InferImplMakeSlice
,
true
}},
{
prim
::
kPrimMakeKeywordArg
,
{
InferImplMakeKwarg
,
true
}},
{
prim
::
kPrimExtractKeywordArg
,
{
InferImplExtractKwarg
,
true
}},
{
prim
::
kPrimMakeRecord
,
{
InferImplMakeRecord
,
false
}},
{
prim
::
kPrimTupleGetItem
,
{
InferImplTupleGetItem
,
true
}},
{
prim
::
kPrimListGetItem
,
{
InferImplListGetItem
,
true
}},
{
prim
::
kPrimTupleSetItem
,
{
InferImplTupleSetItem
,
true
}},
{
prim
::
kPrimListSetItem
,
{
InferImplListSetItem
,
true
}},
{
prim
::
kPrimDictGetItem
,
{
InferImplDictGetItem
,
true
}},
{
prim
::
kPrimDictSetItem
,
{
InferImplDictSetItem
,
true
}},
{
prim
::
kPrimListAppend
,
{
InferImplListAppend
,
true
}},
{
prim
::
kPrimTupleLen
,
{
InferImplTupleLen
,
true
}},
{
prim
::
kPrimListLen
,
{
InferImplListLen
,
true
}},
{
prim
::
kPrimArrayLen
,
{
InferImplArrayLen
,
true
}},
{
prim
::
kPrimListMap
,
{
InferImplListMap
,
false
}},
{
prim
::
kPrimListReduce
,
{
InferImplListReduce
,
false
}},
{
prim
::
kPrimTupleReversed
,
{
InferImplTupleReversed
,
false
}},
{
prim
::
kPrimReducedShape
,
{
InferImplReduceShape
,
false
}},
{
prim
::
kPrimTupleDiv
,
{
InferImplTupleDiv
,
false
}},
{
prim
::
kPrimTupleToArray
,
{
InferImplTuple2Array
,
false
}},
{
prim
::
kPrimShapeMul
,
{
InferImplShapeMul
,
false
}},
{
prim
::
kPrimTupleEqual
,
{
InferImplTupleEqual
,
false
}},
{
prim
::
kPrimListEqual
,
{
InferImplListEqual
,
false
}},
{
prim
::
kPrimMakeRange
,
{
InferImplMakeRange
,
false
}},
{
prim
::
kPrimStopGradient
,
{
InferImplStopGradient
,
false
}},
{
prim
::
kPrimStringEqual
,
{
InferImplStringEqual
,
false
}},
{
prim
::
kPrimDictLen
,
{
InferImplDictLen
,
false
}},
// NN
{
prim
::
kPrimPooling
,
{
InferImplPooling
,
true
}},
{
prim
::
kPrimPoolingGrad
,
{
InferImplPoolingGrad
,
true
}},
{
prim
::
kPrimFusedBatchNorm
,
{
InferImplFusedBatchNorm
,
true
}},
{
prim
::
kPrimFusedBatchNormGrad
,
{
InferImplFusedBatchNormGrad
,
true
}},
{
prim
::
kPrimReluGrad
,
{
InferImplReluGrad
,
true
}},
{
prim
::
kPrimConv2DBackpropInput
,
{
InferImplConv2DBackpropInput
,
true
}},
{
prim
::
kPrimConv2DBackpropFilter
,
{
InferImplConv2DBackpropFilter
,
true
}},
{
prim
::
kPrimBiasAddGrad
,
{
InferImplBiasAddGrad
,
true
}},
{
prim
::
kPrimRelu
,
{
InferImplRelu
,
true
}},
{
prim
::
kPrimZerosLikeTensor
,
{
InferImplZerosLikeTensor
,
true
}},
{
prim
::
kPrimFakeBprop
,
{
InferImplFakeBprop
,
false
}},
{
prim
::
kPrimLayerNorm
,
{
InferImplLayerNorm
,
true
}},
{
prim
::
kPrimLayerNormGrad
,
{
InferImplLayerNormGrad
,
true
}},
{
prim
::
kPrimDropoutGenMask
,
{
InferImplDropoutGenMask
,
true
}},
// Others
{
prim
::
kPrimIdentity
,
{
InferImplIdentity
,
true
}},
// Set impl to null as it will use PartialEvaluator;
{
prim
::
kPrimPartial
,
{
nullptr
,
true
}},
{
prim
::
kPrimJ
,
{
InferImplJ
,
false
}},
{
prim
::
kPrimEnvGetItem
,
{
InferImplEnvGetItem
,
true
}},
{
prim
::
kPrimEnvSetItem
,
{
InferImplEnvSetItem
,
true
}},
{
prim
::
kPrimEnvAdd
,
{
InferImplEnvAdd
,
true
}},
{
prim
::
kPrimMakeRefKey
,
{
InferImplMakeRefKey
,
true
}},
{
prim
::
kPrimMakeRef
,
{
InferImplMakeRef
,
true
}},
{
prim
::
kPrimGetRefKey
,
{
InferImplGetRefKey
,
true
}},
{
prim
::
kPrimGetRefValue
,
{
InferImplGetRefValue
,
true
}},
{
prim
::
kPrimGetRefOrigin
,
{
InferImplGetRefOrigin
,
true
}},
{
prim
::
kPrimStateSetItem
,
{
InferImplStateSetItem
,
true
}},
{
prim
::
kPrimDepend
,
{
InferImplDepend
,
true
}},
{
prim
::
kPrimBroadcastGradientArgs
,
{
InferImplBroadcastGradientArgs
,
false
}},
{
prim
::
kPrimControlDepend
,
{
InferImplControlDepend
,
true
}},
// Debug
{
prim
::
kPrimScalarSummary
,
{
InferImplScalarSummary
,
true
}},
{
prim
::
kPrimImageSummary
,
{
InferImplTensorSummary
,
true
}},
{
prim
::
kPrimTensorSummary
,
{
InferImplTensorSummary
,
true
}},
};
return
prim_eval_implement_map
;
}
using
mindspore
::
parse
::
PyObjectWrapper
;
...
...
@@ -961,10 +964,7 @@ class PartialEvaluator : public Evaluator {
new_nodes_inputs
[
1
]
=
NewValueNode
(
new_signature_value
);
FuncGraphPtr
func_graph
=
cnode
->
func_graph
();
ScopePtr
scope
=
kDefaultScope
;
if
(
out_conf
!=
nullptr
)
{
scope
=
out_conf
->
node
()
->
scope
();
}
ScopePtr
scope
=
out_conf
->
node
()
->
scope
();
ScopeGuard
scope_guard
(
scope
);
CNodePtr
new_cnode
=
func_graph
->
NewCNode
(
new_nodes_inputs
);
...
...
@@ -981,39 +981,41 @@ struct PrimitiveImplInferValue {
};
using
PrimitiveToImplMap
=
std
::
unordered_map
<
PrimitivePtr
,
PrimitiveImplInferValue
,
PrimitiveHasher
,
PrimitiveEqual
>
;
PrimitiveToImplMap
UniformPrimitiveToImplMapValue
=
{
{
prim
::
kPrimScalarAdd
,
{
prim
::
ScalarAdd
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarSub
,
{
prim
::
ScalarSub
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarMul
,
{
prim
::
ScalarMul
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarDiv
,
{
prim
::
ScalarDiv
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarMod
,
{
prim
::
ScalarMod
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarUadd
,
{
prim
::
ScalarUAdd
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarUsub
,
{
prim
::
ScalarUSub
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarLog
,
{
prim
::
ScalarLog
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarEq
,
{
prim
::
ScalarEq
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarLt
,
{
prim
::
ScalarLt
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarGt
,
{
prim
::
ScalarGt
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarNe
,
{
prim
::
ScalarNe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarLe
,
{
prim
::
ScalarLe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarGe
,
{
prim
::
ScalarGe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolNot
,
{
prim
::
BoolNot
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolAnd
,
{
prim
::
BoolAnd
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolEq
,
{
prim
::
BoolEq
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolOr
,
{
prim
::
BoolOr
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
};
PrimitiveToImplMap
&
GetUniformPrimitiveToImplMap
()
{
static
PrimitiveToImplMap
uniform_prim_implement_map
=
{
{
prim
::
kPrimScalarAdd
,
{
prim
::
ScalarAdd
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarSub
,
{
prim
::
ScalarSub
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarMul
,
{
prim
::
ScalarMul
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarDiv
,
{
prim
::
ScalarDiv
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarMod
,
{
prim
::
ScalarMod
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarUadd
,
{
prim
::
ScalarUAdd
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarUsub
,
{
prim
::
ScalarUSub
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarLog
,
{
prim
::
ScalarLog
,
true
,
nullptr
,
true
}},
{
prim
::
kPrimScalarEq
,
{
prim
::
ScalarEq
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarLt
,
{
prim
::
ScalarLt
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarGt
,
{
prim
::
ScalarGt
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarNe
,
{
prim
::
ScalarNe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarLe
,
{
prim
::
ScalarLe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimScalarGe
,
{
prim
::
ScalarGe
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolNot
,
{
prim
::
BoolNot
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolAnd
,
{
prim
::
BoolAnd
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolEq
,
{
prim
::
BoolEq
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
{
prim
::
kPrimBoolOr
,
{
prim
::
BoolOr
,
true
,
std
::
make_shared
<
Bool
>
(),
true
}},
};
return
uniform_prim_implement_map
;
}
PrimEvaluatorMap
PrimEvaluatorConstructors
=
PrimEvaluatorMap
();
std
::
mutex
PrimEvaluatorConstructorMutex
;
void
InitPrimEvaluatorConstructors
(
const
PrimitiveEvalImplMap
&
prim_eval_impl_map
)
{
void
InitPrimEvaluatorConstructors
()
{
PrimEvaluatorMap
&
constructor
=
PrimEvaluatorConstructors
;
for
(
const
auto
&
iter
:
prim_eval_impl_map
)
{
for
(
const
auto
&
iter
:
GetPrimitiveToEvalImplMap
()
)
{
constructor
[
iter
.
first
]
=
InitStandardPrimEvaluator
(
iter
.
first
,
iter
.
second
.
impl_
);
}
for
(
const
auto
&
iter
:
UniformPrimitiveToImplMapValue
)
{
for
(
const
auto
&
iter
:
GetUniformPrimitiveToImplMap
()
)
{
constructor
[
iter
.
first
]
=
InitUniformPrimEvaluator
(
iter
.
first
,
iter
.
second
.
impl_
,
iter
.
second
.
eval_value_
,
iter
.
second
.
specify_out_type_
);
}
...
...
@@ -1028,20 +1030,20 @@ void InitPrimEvaluatorConstructors(const PrimitiveEvalImplMap &prim_eval_impl_ma
void
ClearPrimEvaluatorMap
()
{
PrimEvaluatorConstructors
.
clear
();
PrimitiveToInferImplMap
.
clear
();
UniformPrimitiveToImplMapValue
.
clear
();
GetPrimitiveToEvalImplMap
()
.
clear
();
GetUniformPrimitiveToImplMap
()
.
clear
();
}
bool
IsInWhiteList
(
const
PrimitivePtr
primitive
)
{
MS_EXCEPTION_IF_NULL
(
primitive
);
auto
iter
=
PrimitiveToInferImplMap
.
find
(
primitive
);
if
(
iter
!=
PrimitiveToInferImplMap
.
end
())
{
auto
iter
=
GetPrimitiveToEvalImplMap
()
.
find
(
primitive
);
if
(
iter
!=
GetPrimitiveToEvalImplMap
()
.
end
())
{
return
iter
->
second
.
in_white_list_
;
}
auto
uni_iter
=
UniformPrimitiveToImplMapValue
.
find
(
primitive
);
if
(
uni_iter
!=
UniformPrimitiveToImplMapValue
.
end
())
{
auto
uni_iter
=
GetUniformPrimitiveToImplMap
()
.
find
(
primitive
);
if
(
uni_iter
!=
GetUniformPrimitiveToImplMap
()
.
end
())
{
return
uni_iter
->
second
.
in_white_list_
;
}
...
...
@@ -1050,8 +1052,8 @@ bool IsInWhiteList(const PrimitivePtr primitive) {
StandardPrimitiveEvalImpl
GetPrimitiveInferImpl
(
const
PrimitivePtr
&
primitive
)
{
MS_EXCEPTION_IF_NULL
(
primitive
);
auto
iter
=
PrimitiveToInferImplMap
.
find
(
primitive
);
if
(
iter
==
PrimitiveToInferImplMap
.
end
())
{
auto
iter
=
GetPrimitiveToEvalImplMap
()
.
find
(
primitive
);
if
(
iter
==
GetPrimitiveToEvalImplMap
()
.
end
())
{
return
nullptr
;
}
return
iter
->
second
.
impl_
;
...
...
@@ -1064,7 +1066,7 @@ PrimEvaluatorMap &GetPrimEvaluatorConstructors() {
}
std
::
lock_guard
<
std
::
mutex
>
initLock
(
PrimEvaluatorConstructorMutex
);
if
(
constructor
.
empty
())
{
InitPrimEvaluatorConstructors
(
PrimitiveToInferImplMap
);
InitPrimEvaluatorConstructors
();
}
return
constructor
;
...
...
mindspore/ccsrc/pipeline/static_analysis/static_analysis.cc
浏览文件 @
086edc13
...
...
@@ -296,38 +296,35 @@ EvaluatorPtr GetPrimEvaluator(const PrimitivePtr &prim, const AnalysisEnginePtr
if
(
prim
->
HasPyEvaluator
())
{
auto
prim_py
=
dyn_cast
<
PrimitivePy
>
(
prim
);
if
(
prim_py
!=
nullptr
)
{
evaluator
=
std
::
make_shared
<
PythonPrimEvaluator
>
(
prim_py
);
}
else
{
MS_LOG
(
EXCEPTION
)
<<
"The primitive with python evaluator should be a python primitive."
;
return
std
::
make_shared
<
PythonPrimEvaluator
>
(
prim_py
);
}
MS_LOG
(
EXCEPTION
)
<<
"The primitive with python evaluator should be a python primitive."
;
}
if
(
prim
->
isa
<
PrimitivePy
>
()
||
prim
->
HasAttr
())
{
if
(
engine
==
nullptr
)
{
(
void
)
GetPrimEvaluatorConstructors
();
}
}
else
if
(
prim
->
isa
<
PrimitivePy
>
()
||
prim
->
HasAttr
())
{
// If a primitive may have attr, try to create a new evaluator.
StandardPrimitiveEvalImpl
eval_impl
=
GetPrimitiveInferImpl
(
prim
);
if
(
eval_impl
!=
nullptr
)
{
std
::
shared_ptr
<
StandardPrimEvaluator
>
standard_evaluator
=
std
::
make_shared
<
StandardPrimEvaluator
>
(
prim
,
eval_impl
);
evaluator
=
standard_evaluator
;
return
std
::
make_shared
<
StandardPrimEvaluator
>
(
prim
,
eval_impl
);
}
}
if
(
evaluator
==
nullptr
)
{
if
(
engine
==
nullptr
)
{
// If engine is nullptr, get constructor from default.
const
PrimEvaluatorMap
&
prim_evaluator_map
=
GetPrimEvaluatorConstructors
();
auto
iter
=
prim_evaluator_map
.
find
(
prim
);
if
(
iter
==
prim_evaluator_map
.
end
())
{
evaluator
=
nullptr
;
}
else
{
evaluator
=
iter
->
second
;
}
}
else
{
// If engine is given, get constructor from engine resource.
const
PrimEvaluatorMap
&
prim_evaluator_map
=
engine
->
PrimConstructors
();
auto
iter
=
prim_evaluator_map
.
find
(
prim
);
if
(
iter
==
prim_evaluator_map
.
end
())
{
evaluator
=
nullptr
;
}
else
{
evaluator
=
iter
->
second
;
}
if
(
engine
==
nullptr
)
{
// If engine is nullptr, get constructor from default.
const
PrimEvaluatorMap
&
prim_evaluator_map
=
GetPrimEvaluatorConstructors
();
auto
iter
=
prim_evaluator_map
.
find
(
prim
);
if
(
iter
!=
prim_evaluator_map
.
end
())
{
evaluator
=
iter
->
second
;
}
}
else
{
// If engine is given, get constructor from engine resource.
const
PrimEvaluatorMap
&
prim_evaluator_map
=
engine
->
PrimConstructors
();
auto
iter
=
prim_evaluator_map
.
find
(
prim
);
if
(
iter
!=
prim_evaluator_map
.
end
())
{
evaluator
=
iter
->
second
;
}
}
if
(
evaluator
==
nullptr
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录