1 /** 2 * Copyright 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_STRUCTURE_OPS_H_ 18 #define MINDSPORE_CORE_BASE_STRUCTURE_OPS_H_ 19 20 #include <iostream> 21 #include <memory> 22 #include <string> 23 #include "ir/anf.h" 24 #include "ir/primitive.h" 25 #include "ops/structure_op_name.h" 26 #include "utils/hash_map.h" 27 #include "ops/image_op_name.h" 28 29 namespace mindspore { 30 static constexpr char kDoSignaturePrimitivePrefix[] = "S_Prim_"; 31 namespace prim { 32 // String 33 GVAR_DEF(PrimitivePtr, kPrimStringEq, std::make_shared<Primitive>(kStringEqOpName)); 34 GVAR_DEF(PrimitivePtr, kPrimStringLt, std::make_shared<Primitive>(kStringLtOpName)); 35 GVAR_DEF(PrimitivePtr, kPrimStringGt, std::make_shared<Primitive>(kStringGtOpName)); 36 GVAR_DEF(PrimitivePtr, kPrimStringLe, std::make_shared<Primitive>(kStringLeOpName)); 37 GVAR_DEF(PrimitivePtr, kPrimStringGe, std::make_shared<Primitive>(kStringGeOpName)); 38 GVAR_DEF(PrimitivePtr, kPrimStringConcat, std::make_shared<Primitive>(kStringConcatOpName)); 39 GVAR_DEF(PrimitivePtr, kPrimStringNot, std::make_shared<Primitive>(kStringNotOpName)); 40 GVAR_DEF(PrimitivePtr, kPrimStringIn, std::make_shared<Primitive>(kStringInOpName)); 41 GVAR_DEF(PrimitivePtr, kPrimStringMul, std::make_shared<Primitive>(kStringMulOpName)); 42 GVAR_DEF(PrimitivePtr, kPrimStringGetItem, std::make_shared<Primitive>(kStringGetItemOpName)); 43 44 // Stack ops 45 GVAR_DEF(PrimitivePtr, kPrimStackInit, std::make_shared<Primitive>("StackInit")); 46 GVAR_DEF(PrimitivePtr, kPrimStackDestroy, std::make_shared<Primitive>("StackDestroy")); 47 GVAR_DEF(PrimitivePtr, kPrimStackPush, std::make_shared<Primitive>("StackPush")); 48 GVAR_DEF(PrimitivePtr, kPrimStackPop, std::make_shared<Primitive>("StackPop")); 49 50 // TensorList 51 GVAR_DEF(PrimitivePtr, kPrimTensorListFromTensor, std::make_shared<Primitive>("TensorListFromTensor")); 52 GVAR_DEF(PrimitivePtr, kPrimTensorListReserve, std::make_shared<Primitive>("TensorListReserve")); 53 GVAR_DEF(PrimitivePtr, kPrimTensorListStack, std::make_shared<Primitive>("TensorListStack")); 54 GVAR_DEF(PrimitivePtr, kPrimTensorListSetItem, std::make_shared<Primitive>("TensorListSetItem")); 55 56 // Structures 57 GVAR_DEF(PrimitivePtr, kPrimMakeKeywordArg, std::make_shared<Primitive>("make_keyword_arg")); 58 GVAR_DEF(PrimitivePtr, kPrimReducedShape, std::make_shared<Primitive>("reduced_shape")); 59 GVAR_DEF(PrimitivePtr, kPrimStopGradient, std::make_shared<Primitive>("StopGradient")); 60 GVAR_DEF(PrimitivePtr, kPrimFakeBprop, std::make_shared<Primitive>("fake_bprop")); 61 GVAR_DEF(PrimitivePtr, kPrimBroadcastGradientArgs, std::make_shared<Primitive>("BroadcastGradientArgs")); 62 GVAR_DEF(PrimitivePtr, kPrimDynamicBroadcastGradientArgs, 63 std::make_shared<Primitive>(kDynamicBroadcastGradientArgsOpName)); 64 GVAR_DEF(PrimitivePtr, kPrimConvertToAdapterTensor, std::make_shared<Primitive>("ConvertToAdapterTensor")); 65 GVAR_DEF(PrimitivePtr, kPrimConvertToMsTensor, std::make_shared<Primitive>("ConvertToMsTensor")); 66 GVAR_DEF(PrimitivePtr, kPrimDtypeToEnum, std::make_shared<Primitive>("DtypeToEnum")); 67 68 // Statements 69 GVAR_DEF(PrimitivePtr, kPrimUnroll, std::make_shared<Primitive>("Unroll")); 70 GVAR_DEF(PrimitivePtr, kPrimVmapStackAssign, std::make_shared<Primitive>(kVmapStackAssignOpName)); 71 GVAR_DEF(PrimitivePtr, kPrimVmapUnstackAssign, std::make_shared<Primitive>(kVmapUnstackAssignOpName)); 72 GVAR_DEF(PrimitivePtr, kPrimMakeSlice, std::make_shared<Primitive>(kMakeSliceOpName)); 73 GVAR_DEF(PrimitivePtr, kPrimSliceGetItem, std::make_shared<Primitive>(kSliceGetItemOpName)); 74 GVAR_DEF(PrimitivePtr, kPrimGetAttr, std::make_shared<Primitive>("getattr")); 75 GVAR_DEF(PrimitivePtr, kPrimTileShape, std::make_shared<Primitive>("tile_shape")); 76 GVAR_DEF(PrimitivePtr, kPrimGenerateShapeIndex, std::make_shared<Primitive>("generate_shape_index")); 77 GVAR_DEF(PrimitivePtr, kPrimGenerateInverseIndex, std::make_shared<Primitive>("generate_inverse_index")); 78 GVAR_DEF(PrimitivePtr, kPrimCond, std::make_shared<Primitive>(kCondOpName)); 79 GVAR_DEF(PrimitivePtr, kPrimJoinedStr, std::make_shared<Primitive>(kJoinedStrOpName)); 80 GVAR_DEF(PrimitivePtr, kPrimTileSize, std::make_shared<Primitive>("TileSize")); 81 GVAR_DEF(PrimitivePtr, kPrimNormalizeSlice, std::make_shared<Primitive>("NormalizeSlice")); 82 GVAR_DEF(PrimitivePtr, kPrimNormalizeDimIndex, std::make_shared<Primitive>("NormalizeDimIndex")); 83 GVAR_DEF(PrimitivePtr, kPrimRemakeTupleIndex, std::make_shared<Primitive>("RemakeTupleIndex")); 84 GVAR_DEF(PrimitivePtr, kPrimNormalizeTupleIndex, std::make_shared<Primitive>("NormalizeTupleIndex")); 85 GVAR_DEF(PrimitivePtr, kPrimEllipsisToSlice, std::make_shared<Primitive>("EllipsisToSlice")); 86 GVAR_DEF(PrimitivePtr, kPrimGetSqueezeSliceShape, std::make_shared<Primitive>("GetSqueezeSliceShape")); 87 GVAR_DEF(PrimitivePtr, kPrimRemoveExpandedDims, std::make_shared<Primitive>("RemoveExpandedDims")); 88 GVAR_DEF(PrimitivePtr, kPrimGetTupleIndexInfo, std::make_shared<Primitive>("GetTupleIndexInfo")); 89 90 // Debug ops 91 GVAR_DEF(PrimitivePtr, kPrimAssert, std::make_shared<Primitive>("Assert")); 92 #ifndef ENABLE_SECURITY 93 GVAR_DEF(PrimitivePtr, kPrimScalarSummary, std::make_shared<Primitive>("ScalarSummary")); 94 GVAR_DEF(PrimitivePtr, kPrimImageSummary, std::make_shared<Primitive>("ImageSummary")); 95 GVAR_DEF(PrimitivePtr, kPrimTensorSummary, std::make_shared<Primitive>("TensorSummary")); 96 GVAR_DEF(PrimitivePtr, kPrimHistogramSummary, std::make_shared<Primitive>("HistogramSummary")); 97 GVAR_DEF(PrimitivePtr, kPrimHistogramFixedWidth, std::make_shared<Primitive>("HistogramFixedWidth")); 98 GVAR_DEF(PrimitivePtr, kPrimTensorDump, std::make_shared<Primitive>(kTensorDump)); 99 #endif 100 GVAR_DEF(PrimitivePtr, kPrimDebug, std::make_shared<Primitive>("Debug")); 101 102 // Dynamic shape testing 103 GVAR_DEF(PrimitivePtr, kPrimConvertToDynamic, std::make_shared<Primitive>("ConvertToDynamic")); 104 GVAR_DEF(PrimitivePtr, kPrimGpuConvertToDynamicShape, std::make_shared<Primitive>("GpuConvertToDynamicShape")); 105 GVAR_DEF(PrimitivePtr, kPrimErrorOnDynamicShapeInput, std::make_shared<Primitive>("ErrorOnDynamicShapeInput")); 106 107 // Dynamic shape. 108 GVAR_DEF(PrimitivePtr, kPrimIsDimUnknown, std::make_shared<Primitive>("IsDimUnKnown")); 109 GVAR_DEF(PrimitivePtr, kPrimIsShapeUnknown, std::make_shared<Primitive>("IsShapeUnKnown")); 110 GVAR_DEF(PrimitivePtr, kPrimIsElementUnknown, std::make_shared<Primitive>("IsElementUnknown")); 111 GVAR_DEF(PrimitivePtr, kPrimIsTensorBoolCond, std::make_shared<Primitive>("IsTensorBoolCond")); 112 113 // GetNext 114 GVAR_DEF(PrimitivePtr, kPrimGetNext, std::make_shared<Primitive>(kGetNextOpName)); 115 GVAR_DEF(PrimitivePtr, kPrimGetNextFromQueue, std::make_shared<Primitive>(kGetNextFromQueueOpName)); 116 GVAR_DEF(PrimitivePtr, kPrimDynamicGetNextV2, std::make_shared<Primitive>(kDynamicGetNextV2OpName)); 117 GVAR_DEF(PrimitivePtr, kPrimDynamicGetNextAscend, std::make_shared<Primitive>(kDynamicGetNextAscendOpName)); 118 119 class DoSignaturePrimitive : public Primitive { 120 public: DoSignaturePrimitive(const std::string & name,const ValuePtr & function)121 explicit DoSignaturePrimitive(const std::string &name, const ValuePtr &function) 122 : Primitive(kDoSignaturePrimitivePrefix + name), function_(function) {} 123 124 ~DoSignaturePrimitive() override = default; 125 MS_DECLARE_PARENT(DoSignaturePrimitive,Primitive)126 MS_DECLARE_PARENT(DoSignaturePrimitive, Primitive) 127 128 const ValuePtr function() const { return function_; } 129 130 private: 131 ValuePtr function_; 132 }; 133 using DoSignaturePrimitivePtr = std::shared_ptr<DoSignaturePrimitive>; 134 135 class DoTransPrimitiveFunction : public Primitive { 136 public: DoTransPrimitiveFunction(const PrimitivePtr & prim)137 explicit DoTransPrimitiveFunction(const PrimitivePtr &prim) : Primitive("T-PrimFunc-" + prim->name()), prim_(prim) {} 138 139 ~DoTransPrimitiveFunction() override = default; 140 MS_DECLARE_PARENT(DoTransPrimitiveFunction,Primitive)141 MS_DECLARE_PARENT(DoTransPrimitiveFunction, Primitive) 142 143 const PrimitivePtr function() const { return prim_; } 144 has_given_init_size()145 bool has_given_init_size() const { return has_given_init_size_; } 146 set_given_init_size(size_t args_size)147 void set_given_init_size(size_t args_size) { 148 has_given_init_size_ = true; 149 given_init_size_ = args_size; 150 } 151 given_init_size()152 size_t given_init_size() const { return given_init_size_; } 153 154 private: 155 PrimitivePtr prim_; 156 size_t given_init_size_; 157 bool has_given_init_size_{false}; 158 }; 159 using DoTransPrimitiveFunctionPtr = std::shared_ptr<DoTransPrimitiveFunction>; 160 } // namespace prim 161 } // namespace mindspore 162 163 #endif // MINDSPORE_CORE_BASE_STRUCTURE_OPS_H_ 164