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