• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2019-2023 Huawei Technologies Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MINDSPORE_CORE_BASE_FRAMEWORK_OPS_H_
18 #define MINDSPORE_CORE_BASE_FRAMEWORK_OPS_H_
19 
20 #include <iostream>
21 #include <memory>
22 #include <string>
23 #include "ir/anf.h"
24 #include "ir/primitive.h"
25 #include "ir/scalar.h"
26 #include "ir/value.h"
27 #include "ops/framework_op_name.h"
28 #include "utils/flags.h"
29 #include "utils/hash_map.h"
30 
31 namespace mindspore {
32 namespace prim {
33 /*
34  * The origin core_ops.h has been decomposed to following files:
35  * arithmetic_ops.h, array_ops.h, comparison_ops.h,
36  * image_ops.h, lite_ops.h, math_ops.h, nn_ops.h,
37  * nn_optimizer_ops.h, other_ops.h, conv_pool_ops.h,
38  * random_ops.h, sequence_ops.h, sparse_ops.h,
39  * sparse_tensor_ops.h, structure_ops.h.
40  *
41  * The const strings, which were in core_ops.h and common/utils/utils.h
42  * were moved to the following *_op_name files:
43  * framework_op_name.h, arithmetic_op_name.h, array_op_name.h,
44  * comparison_op_name.h, image_op_name.h, lite_op_name.h,
45  * math_op_name.h, nn_op_name.h, nn_optimizer_op_name.h,
46  * other_op_name.h, conv_pool_op_name.h, random_op_name.h,
47  * sequence_op_name.h, sparse_op_name.h, structure_op_name.h.
48  */
49 GVAR_DEF(ValuePtr, kValueOne, std::make_shared<Int64Imm>(1));
50 #define COMMA ,
51 GVAR_DEF(mindspore::HashMap<std::string COMMA ValuePtr>, kSideEffectPropagate,
52          {{mindspore::GRAPH_FLAG_SIDE_EFFECT_PROPAGATE COMMA kValueOne}});
53 #undef COMMA
54 GVAR_DEF(PrimitivePtr, kPrimIdentityMath, std::make_shared<Primitive>("Identity", kSideEffectPropagate));
55 
56 // Shape
57 GVAR_DEF(PrimitivePtr, kPrimShapeMul, std::make_shared<Primitive>("shape_mul"));
58 GVAR_DEF(PrimitivePtr, kPrimShapeMulGrad, std::make_shared<Primitive>("ShapeMulGrad"));
59 GVAR_DEF(PrimitivePtr, kPrimDType, std::make_shared<Primitive>("DType"));
60 
61 // SideEffectPropagate
62 GVAR_DEF(PrimitivePtr, kPrimDepend, std::make_shared<Primitive>(kDependOpName, kSideEffectPropagate));
63 GVAR_DEF(PrimitivePtr, kPrimPartial, std::make_shared<Primitive>("Partial", kSideEffectPropagate));
64 GVAR_DEF(PrimitivePtr, kPrimidentity, std::make_shared<Primitive>(kidentityOpName, kSideEffectPropagate));
65 
66 // Other primitive not used by backend but used in core;
67 GVAR_DEF(PrimitivePtr, kPrimStateSetItem, std::make_shared<Primitive>("state_setitem"));
68 GVAR_DEF(PrimitivePtr, kPrimJ, std::make_shared<Primitive>(kJOpName, kSideEffectPropagate));
69 GVAR_DEF(PrimitivePtr, kPrimVmap, std::make_shared<Primitive>(kVmapOpName, kSideEffectPropagate));
70 GVAR_DEF(PrimitivePtr, kPrimShard, std::make_shared<Primitive>("Shard", kSideEffectPropagate));
71 GVAR_DEF(PrimitivePtr, kPrimReshard, std::make_shared<Primitive>("Reshard"));
72 GVAR_DEF(PrimitivePtr, kPrimTaylor, std::make_shared<Primitive>(kTaylorOpName));
73 GVAR_DEF(PrimitivePtr, kPrimReusing, std::make_shared<Primitive>("Reusing"));
74 // Control ops
75 GVAR_DEF(PrimitivePtr, kPrimMerge, std::make_shared<Primitive>("Merge"));
76 
77 // Other miscellaneous
78 GVAR_DEF(PrimitivePtr, kPrimEnvironCreate, std::make_shared<Primitive>(kEnvironCreateOpName));
79 GVAR_DEF(PrimitivePtr, kPrimEnvironSet, std::make_shared<Primitive>(kEnvironSetOpName));
80 GVAR_DEF(PrimitivePtr, kPrimEnvironGet, std::make_shared<Primitive>(kEnvironGetOpName));
81 GVAR_DEF(PrimitivePtr, kPrimEnvironAdd, std::make_shared<Primitive>(kEnvironAddOpName));
82 GVAR_DEF(PrimitivePtr, kPrimEnvironDestroyAll, std::make_shared<Primitive>(kEnvironDestroyAllOpName));
83 GVAR_DEF(PrimitivePtr, kPrimSetSize, std::make_shared<Primitive>(kSetSizeOpName));
84 
85 // Other miscellaneous
86 GVAR_DEF(PrimitivePtr, kPrimPyFunc, std::make_shared<Primitive>("PyFunc"));
87 GVAR_DEF(PrimitivePtr, kPrimCheckValid, std::make_shared<Primitive>("CheckValid"));
88 GVAR_DEF(PrimitivePtr, kPrimReformat, std::make_shared<Primitive>("Reformat"));
89 GVAR_DEF(PrimitivePtr, kPrimLoad, std::make_shared<Primitive>(kLoadOpName));
90 GVAR_DEF(PrimitivePtr, kPrimMutable, std::make_shared<Primitive>(kMutableOpName));
91 GVAR_DEF(PrimitivePtr, kPrimGetGrad, std::make_shared<Primitive>(kGetGradOpName));
92 GVAR_DEF(PrimitivePtr, kPrimHookBackward, std::make_shared<Primitive>("HookBackward"));
93 GVAR_DEF(PrimitivePtr, kPrimCellBackwardHook, std::make_shared<Primitive>("CellBackwardHook"));
94 GVAR_DEF(PrimitivePtr, kPrimPrintShapeType, std::make_shared<Primitive>("PrintShapeType"));
95 GVAR_DEF(PrimitivePtr, kPrimSameTypeShape, std::make_shared<Primitive>("SameTypeShape"));
96 GVAR_DEF(PrimitivePtr, kPrimPrint, std::make_shared<Primitive>("Print"));
97 GVAR_DEF(PrimitivePtr, kPrimIs_, std::make_shared<Primitive>("is_"));
98 GVAR_DEF(PrimitivePtr, kPrimIsNot, std::make_shared<Primitive>("is_not"));
99 GVAR_DEF(PrimitivePtr, kPrimInDict, std::make_shared<Primitive>("in_dict"));
100 GVAR_DEF(PrimitivePtr, kPrimNotInDict, std::make_shared<Primitive>("not_in_dict"));
101 GVAR_DEF(PrimitivePtr, kPrimIsConstant, std::make_shared<Primitive>("IsConstant"));
102 GVAR_DEF(PrimitivePtr, kPrimEquivFormat, std::make_shared<Primitive>("EquivFormat"));
103 GVAR_DEF(PrimitivePtr, kPrimLshProjection, std::make_shared<Primitive>("LshProjection"));
104 GVAR_DEF(PrimitivePtr, kPrimHashtableLookup, std::make_shared<Primitive>("HashtableLookup"));
105 GVAR_DEF(PrimitivePtr, kPrimCustomPredict, std::make_shared<Primitive>("CustomPredict"));
106 GVAR_DEF(PrimitivePtr, kPrimPriorBox, std::make_shared<Primitive>("PriorBox"));
107 GVAR_DEF(PrimitivePtr, kPrimQuantDTypeCast, std::make_shared<Primitive>("QuantDTypeCast"));
108 GVAR_DEF(PrimitivePtr, kPrimWhile, std::make_shared<Primitive>("While"));
109 GVAR_DEF(PrimitivePtr, kPrimPull, std::make_shared<Primitive>("Pull"));
110 GVAR_DEF(PrimitivePtr, kPrimPush, std::make_shared<Primitive>("Push"));
111 
112 // JIT Fallback ops
113 // We add IO side-effect for them in advance.
114 GVAR_DEF(PrimitivePtr, kPrimPyInterpret,
115          std::make_shared<Primitive>("PyInterpret", mindspore::HashMap<std::string, ValuePtr>(
116                                                       {{std::string(GRAPH_FLAG_SIDE_EFFECT_IO), MakeValue(true)}})));
117 GVAR_DEF(PrimitivePtr, kPrimPyExecute,
118          std::make_shared<Primitive>("PyExecute", mindspore::HashMap<std::string, ValuePtr>(
119                                                     {{std::string(GRAPH_FLAG_SIDE_EFFECT_IO), MakeValue(true)},
120                                                      {std::string("primitive_target"), MakeValue("CPU")}})));
121 GVAR_DEF(PrimitivePtr, kPrimSetAttr,
122          std::make_shared<Primitive>(kSetAttrOpName, mindspore::HashMap<std::string, ValuePtr>(
123                                                        {{std::string(GRAPH_FLAG_SIDE_EFFECT_IO), MakeValue(true)}})));
124 
125 // Used to build graph which have keyword arguments
126 GVAR_DEF(PrimitivePtr, kPrimExtractKeywordArg, std::make_shared<Primitive>("extract_keyword_arg"));
127 GVAR_DEF(PrimitivePtr, kPrimMakeDict, std::make_shared<Primitive>("make_dict"));
128 
129 // GraphKernel ops
130 GVAR_DEF(PrimitivePtr, kPrimGraphKernel, std::make_shared<Primitive>("GraphKernel"));
131 
132 // Custom
133 GVAR_DEF(PrimitivePtr, kPrimCustom, std::make_shared<Primitive>("Custom"));
134 
135 // Type introspection
136 GVAR_DEF(PrimitivePtr, kPrimTypeOf, std::make_shared<Primitive>("typeof"));
137 GVAR_DEF(PrimitivePtr, kPrimTopTypeOf, std::make_shared<Primitive>("TopTypeof"));
138 GVAR_DEF(PrimitivePtr, kPrimHasType, std::make_shared<Primitive>("hastype"));
139 GVAR_DEF(PrimitivePtr, kPrimIsInstance, std::make_shared<Primitive>(kIsInstanceOpName));
140 GVAR_DEF(PrimitivePtr, kPrimResolve, std::make_shared<Primitive>("resolve"));
141 GVAR_DEF(PrimitivePtr, kPrimEmbed, std::make_shared<Primitive>("embed"));
142 GVAR_DEF(PrimitivePtr, kPrimRefToEmbed, std::make_shared<Primitive>("RefToEmbed"));
143 GVAR_DEF(PrimitivePtr, kPrimCreateInstance, std::make_shared<Primitive>("create_instance"));
144 GVAR_DEF(PrimitivePtr, kPrimWithEnter, std::make_shared<Primitive>("with_enter"));
145 GVAR_DEF(PrimitivePtr, kPrimWithExit, std::make_shared<Primitive>("with_exit"));
146 
147 // Other miscellaneous
148 GVAR_DEF(PrimitivePtr, kPrimInsertGradientOf, std::make_shared<Primitive>("InsertGradientOf"));
149 GVAR_DEF(PrimitivePtr, kPrimCheckBprop, std::make_shared<Primitive>("CheckBprop"));
150 GVAR_DEF(PrimitivePtr, kPrimMixedPrecisionCast, std::make_shared<Primitive>("MixedPrecisionCast"));
151 
152 // Sponge Ops
153 GVAR_DEF(PrimitivePtr, kPrimAngleAtomEnergy, std::make_shared<Primitive>("AngleAtomEnergy"));
154 
155 // Framework ops
156 GVAR_DEF(PrimitivePtr, kPrimStreamSend, std::make_shared<Primitive>(kStreamSendOpName));
157 GVAR_DEF(PrimitivePtr, kPrimStreamRecv, std::make_shared<Primitive>(kStreamRecvOpName));
158 GVAR_DEF(PrimitivePtr, kPrimSliceToIndices, std::make_shared<Primitive>("SliceToIndices"));
159 GVAR_DEF(PrimitivePtr, kPrimTensorMove, std::make_shared<Primitive>("TensorMove"));
160 GVAR_DEF(PrimitivePtr, kPrimMemCpyAsync, std::make_shared<Primitive>("memcpy_async"));
161 GVAR_DEF(PrimitivePtr, kPrimSend, std::make_shared<Primitive>("Send"));
162 GVAR_DEF(PrimitivePtr, kPrimReceive, std::make_shared<Primitive>("Receive"));
163 GVAR_DEF(PrimitivePtr, kPrimRpcSend, std::make_shared<Primitive>("RpcSend"));
164 GVAR_DEF(PrimitivePtr, kPrimRpcRecv, std::make_shared<Primitive>("RpcRecv"));
165 GVAR_DEF(PrimitivePtr, kPrimUpdateState, std::make_shared<Primitive>(kUpdateStateOpName));
166 GVAR_DEF(PrimitivePtr, kPrimReturn, std::make_shared<Primitive>(kReturnOpName));
167 GVAR_DEF(PrimitivePtr, kPrimSwitch, std::make_shared<Primitive>(kSwitchOpName));
168 GVAR_DEF(PrimitivePtr, kPrimCall, std::make_shared<Primitive>(kCallOpName));
169 GVAR_DEF(PrimitivePtr, kPrimRaise,
170          std::make_shared<Primitive>(kRaiseOpName, mindspore::HashMap<std::string, ValuePtr>(
171                                                      {{std::string(GRAPH_FLAG_SIDE_EFFECT_IO), MakeValue(true)}})));
172 GVAR_DEF(PrimitivePtr, kPrimSwitchLayer, std::make_shared<Primitive>("switch_layer"));
173 GVAR_DEF(PrimitivePtr, kPrimStringUpper, std::make_shared<Primitive>(kStringUpperOpName));
174 GVAR_DEF(PrimitivePtr, kPrimStringLower, std::make_shared<Primitive>(kStringLowerOpName));
175 GVAR_DEF(PrimitivePtr, kPrimFormat, std::make_shared<Primitive>(kFormatOpName));
176 
177 // Backend Inline
178 GVAR_DEF(PrimitivePtr, kPrimCallInline, std::make_shared<Primitive>("CallInline"));
179 GVAR_DEF(PrimitivePtr, kPrimPartialInline, std::make_shared<Primitive>("PartialInline"));
180 GVAR_DEF(PrimitivePtr, kPrimConditionSwitch, std::make_shared<Primitive>("ConditionSwitch"));
181 GVAR_DEF(PrimitivePtr, kPrimConditionGather, std::make_shared<Primitive>("ConditionGather"));
182 }  // namespace prim
183 }  // namespace mindspore
184 
185 #endif  // MINDSPORE_CORE_BASE_FRAMEWORK_OPS_H_
186