You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ops.cc 18 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /**
  2. * Copyright 2019-2020 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. #include "operator/ops.h"
  17. #include <memory>
  18. #include <string>
  19. namespace mindspore {
  20. // namespace to support primitive operators
  21. namespace prim {
  22. // Arithmetic
  23. const PrimitivePtr kPrimScalarAdd = std::make_shared<Primitive>("scalar_add");
  24. const PrimitivePtr kPrimScalarSub = std::make_shared<Primitive>("scalar_sub");
  25. const PrimitivePtr kPrimScalarMul = std::make_shared<Primitive>("scalar_mul");
  26. const PrimitivePtr kPrimScalarDiv = std::make_shared<Primitive>("scalar_div");
  27. const PrimitivePtr kPrimScalarFloordiv = std::make_shared<Primitive>("scalar_floordiv");
  28. const PrimitivePtr kPrimScalarMod = std::make_shared<Primitive>("scalar_mod");
  29. const PrimitivePtr kPrimScalarPow = std::make_shared<Primitive>("scalar_pow");
  30. const PrimitivePtr kPrimScalarTrunc = std::make_shared<Primitive>("scalar_trunc");
  31. const PrimitivePtr kPrimScalarFloor = std::make_shared<Primitive>("scalar_floor");
  32. const PrimitivePtr kPrimScalarUadd = std::make_shared<Primitive>("scalar_uadd");
  33. const PrimitivePtr kPrimScalarUsub = std::make_shared<Primitive>("scalar_usub");
  34. const PrimitivePtr kPrimScalarExp = std::make_shared<Primitive>("scalar_exp");
  35. const PrimitivePtr kPrimScalarLog = std::make_shared<Primitive>("scalar_log");
  36. const PrimitivePtr kPrimScalarSin = std::make_shared<Primitive>("scalar_sin");
  37. const PrimitivePtr kPrimScalarCos = std::make_shared<Primitive>("scalar_cos");
  38. const PrimitivePtr kPrimScalarTan = std::make_shared<Primitive>("scalar_tan");
  39. // Comparisons
  40. const PrimitivePtr kPrimScalarEq = std::make_shared<Primitive>("scalar_eq");
  41. const PrimitivePtr kPrimScalarLt = std::make_shared<Primitive>("scalar_lt");
  42. const PrimitivePtr kPrimScalarGt = std::make_shared<Primitive>("scalar_gt");
  43. const PrimitivePtr kPrimScalarNe = std::make_shared<Primitive>("scalar_ne");
  44. const PrimitivePtr kPrimScalarLe = std::make_shared<Primitive>("scalar_le");
  45. const PrimitivePtr kPrimScalarGe = std::make_shared<Primitive>("scalar_ge");
  46. const PrimitivePtr kPrimBoolNot = std::make_shared<Primitive>("bool_not");
  47. const PrimitivePtr kPrimBoolAnd = std::make_shared<Primitive>("bool_and");
  48. const PrimitivePtr kPrimBoolOr = std::make_shared<Primitive>("bool_or");
  49. const PrimitivePtr kPrimBoolEq = std::make_shared<Primitive>("bool_eq");
  50. // Type introspection
  51. const PrimitivePtr kPrimTypeOf = std::make_shared<Primitive>("typeof");
  52. const PrimitivePtr kPrimHasType = std::make_shared<Primitive>("hastype");
  53. // Statements
  54. const PrimitivePtr kPrimSwitch = std::make_shared<Primitive>("switch");
  55. const PrimitivePtr kPrimSwitchLayer = std::make_shared<Primitive>("switch_layer");
  56. const PrimitivePtr kPrimReturn = std::make_shared<Primitive>("return");
  57. const PrimitivePtr kPrimAssign = std::make_shared<Primitive>("Assign");
  58. const PrimitivePtr kPrimAssignAdd = std::make_shared<Primitive>("AssignAdd");
  59. const PrimitivePtr kPrimAssignSub = std::make_shared<Primitive>("AssignSub");
  60. const PrimitivePtr kPrimSelect = std::make_shared<Primitive>("Select");
  61. const PrimitivePtr kPrimCall = std::make_shared<Primitive>("call");
  62. const PrimitivePtr kPrimDistribute = std::make_shared<Primitive>("distribute");
  63. const PrimitivePtr kPrimDot = std::make_shared<Primitive>("dot");
  64. const PrimitivePtr kPrimIm2Col = std::make_shared<Primitive>("im2col");
  65. const PrimitivePtr kPrimCol2Im = std::make_shared<Primitive>("col2im");
  66. const PrimitivePtr kPrimIm2ColV1 = std::make_shared<Primitive>("im2col_v1");
  67. const PrimitivePtr kPrimCol2ImV1 = std::make_shared<Primitive>("col2im_v1");
  68. const PrimitivePtr kPrimResolve = std::make_shared<Primitive>("resolve");
  69. const PrimitivePtr kPrimEmbed = std::make_shared<Primitive>("embed");
  70. const PrimitivePtr kPrimRefToEmbed = std::make_shared<Primitive>("RefToEmbed");
  71. const PrimitivePtr kPrimCreateInstance = std::make_shared<Primitive>("create_instance");
  72. const PrimitivePtr kPrimLabelGoto = std::make_shared<Primitive>("LabelGoto");
  73. const PrimitivePtr kPrimLabelSwitch = std::make_shared<Primitive>("LabelSwitch");
  74. const PrimitivePtr kPrimLabelSet = std::make_shared<Primitive>("LabelSet");
  75. // Structure
  76. const PrimitivePtr kPrimStringEqual = std::make_shared<Primitive>("string_equal");
  77. const PrimitivePtr kPrimStringConcat = std::make_shared<Primitive>("string_concat");
  78. const PrimitivePtr kPrimMakeTuple = std::make_shared<Primitive>("make_tuple");
  79. const PrimitivePtr kPrimMakeList = std::make_shared<Primitive>("make_list");
  80. const PrimitivePtr kPrimMakeDict = std::make_shared<Primitive>("make_dict");
  81. const PrimitivePtr kPrimMakeKeywordArg = std::make_shared<Primitive>("make_keyword_arg");
  82. const PrimitivePtr kPrimExtractKeywordArg = std::make_shared<Primitive>("extract_keyword_arg");
  83. const PrimitivePtr kPrimMakeSlice = std::make_shared<Primitive>("make_slice");
  84. const PrimitivePtr kPrimMakeRecord = std::make_shared<Primitive>("make_record");
  85. const PrimitivePtr kPrimTupleGetItem = std::make_shared<Primitive>("tuple_getitem");
  86. const PrimitivePtr kPrimListGetItem = std::make_shared<Primitive>("list_getitem");
  87. const PrimitivePtr kPrimArrayGetItem = std::make_shared<Primitive>("array_getitem");
  88. const PrimitivePtr kPrimTupleSetItem = std::make_shared<Primitive>("tuple_setitem");
  89. const PrimitivePtr kPrimListSetItem = std::make_shared<Primitive>("list_setitem");
  90. const PrimitivePtr kPrimArraySetItem = std::make_shared<Primitive>("array_setitem");
  91. const PrimitivePtr kPrimDictGetItem = std::make_shared<Primitive>("dict_getitem");
  92. const PrimitivePtr kPrimDictSetItem = std::make_shared<Primitive>("dict_setitem");
  93. const PrimitivePtr kPrimListAppend = std::make_shared<Primitive>("list_append");
  94. const PrimitivePtr kPrimGetAttr = std::make_shared<Primitive>("getattr");
  95. const PrimitivePtr kPrimTupleLen = std::make_shared<Primitive>("tuple_len");
  96. const PrimitivePtr kPrimDictLen = std::make_shared<Primitive>("dict_len");
  97. const PrimitivePtr kPrimListLen = std::make_shared<Primitive>("list_len");
  98. const PrimitivePtr kPrimArrayLen = std::make_shared<Primitive>("array_len");
  99. const PrimitivePtr kPrimListMap = std::make_shared<Primitive>("list_map");
  100. const PrimitivePtr kPrimListReduce = std::make_shared<Primitive>("list_reduce");
  101. const PrimitivePtr kPrimTupleReversed = std::make_shared<Primitive>("tuple_reversed");
  102. const PrimitivePtr kPrimTileShape = std::make_shared<Primitive>("tile_shape");
  103. const PrimitivePtr kPrimReducedShape = std::make_shared<Primitive>("reduced_shape");
  104. const PrimitivePtr kPrimTupleDiv = std::make_shared<Primitive>("tuple_div");
  105. const PrimitivePtr kPrimTupleToArray = std::make_shared<Primitive>("tuple_to_array");
  106. const PrimitivePtr kPrimShapeMul = std::make_shared<Primitive>("shape_mul");
  107. const PrimitivePtr kPrimGenerateShapeIndex = std::make_shared<Primitive>("generate_shape_index");
  108. const PrimitivePtr kPrimGenerateInverseIndex = std::make_shared<Primitive>("generate_inverse_index");
  109. const PrimitivePtr kPrimTupleEqual = std::make_shared<Primitive>("tuple_equal");
  110. const PrimitivePtr kPrimListEqual = std::make_shared<Primitive>("list_equal");
  111. const PrimitivePtr kPrimMakeRange = std::make_shared<Primitive>("make_range");
  112. const PrimitivePtr kPrimStopGradient = std::make_shared<Primitive>("stop_gradient");
  113. // Arrays
  114. const PrimitivePtr kPrimScalarToArray = std::make_shared<Primitive>("scalar_to_array");
  115. const PrimitivePtr kPrimArrayToScalar = std::make_shared<Primitive>("array_to_scalar");
  116. const PrimitivePtr kPrimBroadcastShape = std::make_shared<Primitive>("broadcast_shape");
  117. const PrimitivePtr kPrimArrayMap = std::make_shared<Primitive>("array_map");
  118. const PrimitivePtr kPrimArrayReduce = std::make_shared<Primitive>("array_reduce");
  119. const PrimitivePtr kPrimShape = std::make_shared<Primitive>("Shape");
  120. const PrimitivePtr kPrimCast = std::make_shared<Primitive>("Cast");
  121. const PrimitivePtr kPrimConcat = std::make_shared<Primitive>("Concat");
  122. const PrimitivePtr kPrimSqueeze = std::make_shared<Primitive>("Squeeze");
  123. const PrimitivePtr kPrimTranspose = std::make_shared<Primitive>("Transpose");
  124. const PrimitivePtr kPrimGatherV2 = std::make_shared<Primitive>("GatherV2");
  125. const PrimitivePtr kPrimEmbeddingLookup = std::make_shared<Primitive>("EmbeddingLookup");
  126. const PrimitivePtr kPrimEmbeddingLookupCommGrad = std::make_shared<Primitive>("EmbeddingLookupCommGrad");
  127. const PrimitivePtr kPrimSize = std::make_shared<Primitive>("Size");
  128. const PrimitivePtr kPrimArgMax = std::make_shared<Primitive>("Argmax");
  129. const PrimitivePtr kPrimPack = std::make_shared<Primitive>("Pack");
  130. const PrimitivePtr kPrimUnsortedSegmentSum = std::make_shared<Primitive>("UnsortedSegmentSum");
  131. const PrimitivePtr kPrimUnsortedSegmentMin = std::make_shared<Primitive>("UnsortedSegmentMin");
  132. const PrimitivePtr kPrimConcatOffset = std::make_shared<Primitive>("ConcatOffset");
  133. const PrimitivePtr kPrimReshape = std::make_shared<Primitive>("Reshape");
  134. const PrimitivePtr kPrimTile = std::make_shared<Primitive>("Tile");
  135. const PrimitivePtr kPrimAddN = std::make_shared<Primitive>("AddN");
  136. const PrimitivePtr KPrimTransData = std::make_shared<Primitive>("TransData");
  137. const PrimitivePtr kPrimNMSWithMask = std::make_shared<Primitive>("NMSWithMask");
  138. const PrimitivePtr kPrimPad = std::make_shared<Primitive>("Pad");
  139. // Maths
  140. const PrimitivePtr kPrimTensorAdd = std::make_shared<Primitive>("TensorAdd");
  141. const PrimitivePtr kPrimMatMul = std::make_shared<Primitive>("MatMul");
  142. const PrimitivePtr kPrimBatchMatMul = std::make_shared<Primitive>("BatchMatMul");
  143. const PrimitivePtr kPrimMaximumGrad = std::make_shared<Primitive>("MaximumGrad");
  144. const PrimitivePtr kPrimMinimumGrad = std::make_shared<Primitive>("MinimumGrad");
  145. const PrimitivePtr kPrimReduceMean = std::make_shared<Primitive>("ReduceMean");
  146. const PrimitivePtr kPrimReduceSum = std::make_shared<Primitive>("ReduceSum");
  147. const PrimitivePtr kPrimReduceAll = std::make_shared<Primitive>("ReduceAll");
  148. const PrimitivePtr kPrimReduceMax = std::make_shared<Primitive>("ReduceMax");
  149. const PrimitivePtr kPrimReduceMin = std::make_shared<Primitive>("ReduceMin");
  150. const PrimitivePtr kPrimNeg = std::make_shared<Primitive>("Neg");
  151. const PrimitivePtr kPrimSub = std::make_shared<Primitive>("Sub");
  152. const PrimitivePtr kPrimMul = std::make_shared<Primitive>("Mul");
  153. const PrimitivePtr kPrimMinimum = std::make_shared<Primitive>("Minimum");
  154. const PrimitivePtr kPrimMaximum = std::make_shared<Primitive>("Maximum");
  155. const PrimitivePtr kPrimSquare = std::make_shared<Primitive>("Square");
  156. const PrimitivePtr kPrimEqual = std::make_shared<Primitive>("Equal");
  157. const PrimitivePtr kPrimLess = std::make_shared<Primitive>("Less");
  158. const PrimitivePtr kPrimLessEqual = std::make_shared<Primitive>("LessEqual");
  159. const PrimitivePtr kPrimCumSum = std::make_shared<Primitive>("CumSum");
  160. const PrimitivePtr kPrimCumProd = std::make_shared<Primitive>("CumProd");
  161. const PrimitivePtr kPrimSubscalar = std::make_shared<Primitive>("Subscalar");
  162. // NN
  163. const PrimitivePtr kPrimFlatten = std::make_shared<Primitive>("Flatten");
  164. const PrimitivePtr kPrimLogSoftmax = std::make_shared<Primitive>("LogSoftmax");
  165. const PrimitivePtr kPrimLogSoftmaxGrad = std::make_shared<Primitive>("LogSoftmaxGrad");
  166. const PrimitivePtr kPrimTanh = std::make_shared<Primitive>("Tanh");
  167. const PrimitivePtr kPrimTanhGrad = std::make_shared<Primitive>("TanhGrad");
  168. const PrimitivePtr kPrimPooling = std::make_shared<Primitive>("Pooling");
  169. const PrimitivePtr kPrimPoolingGrad = std::make_shared<Primitive>("PoolingGrad");
  170. const PrimitivePtr kPrimMaxPool = std::make_shared<Primitive>("MaxPool");
  171. const PrimitivePtr kPrimMaxPoolGrad = std::make_shared<Primitive>("MaxPoolGrad");
  172. const PrimitivePtr kPrimApplyCenteredRMSProp = std::make_shared<Primitive>("ApplyCenteredRMSProp");
  173. const PrimitivePtr kPrimAvgPoolGrad = std::make_shared<Primitive>("AvgPoolGrad");
  174. const PrimitivePtr kPrimFusedBatchNorm = std::make_shared<Primitive>("FusedBatchNorm");
  175. const PrimitivePtr kPrimConv2D = std::make_shared<Primitive>("Conv2D");
  176. const PrimitivePtr kPrimFusedBatchNormGrad = std::make_shared<Primitive>("FusedBatchNormGrad");
  177. const PrimitivePtr kPrimBatchNorm = std::make_shared<Primitive>("BatchNorm");
  178. const PrimitivePtr kPrimBatchNormGrad = std::make_shared<Primitive>("BatchNormGrad");
  179. const PrimitivePtr kPrimReluGrad = std::make_shared<Primitive>("ReluGrad");
  180. const PrimitivePtr kPrimConv2DBackpropInput = std::make_shared<Primitive>("Conv2DBackpropInput");
  181. const PrimitivePtr kPrimConv2DBackpropFilter = std::make_shared<Primitive>("Conv2DBackpropFilter");
  182. const PrimitivePtr kPrimDepthwiseConv2dNative = std::make_shared<Primitive>("DepthwiseConv2dNative");
  183. const PrimitivePtr kPrimDepthwiseConv2dNativeBackpropFilter =
  184. std::make_shared<Primitive>("DepthwiseConv2dNativeBackpropFilter");
  185. const PrimitivePtr kPrimDepthwiseConv2dNativeBackpropInput =
  186. std::make_shared<Primitive>("DepthwiseConv2dNativeBackpropInput");
  187. const PrimitivePtr kPrimBiasAddGrad = std::make_shared<Primitive>("BiasAddGrad");
  188. const PrimitivePtr kPrimSoftmaxCrossEntropyWithLogits = std::make_shared<Primitive>("SoftmaxCrossEntropyWithLogits");
  189. const PrimitivePtr kPrimSparseSoftmaxCrossEntropyWithLogits =
  190. std::make_shared<Primitive>("SparseSoftmaxCrossEntropyWithLogits");
  191. const PrimitivePtr kPrimMomentum = std::make_shared<Primitive>("Momentum");
  192. const PrimitivePtr kPrimApplyMomentum = std::make_shared<Primitive>("ApplyMomentum");
  193. const PrimitivePtr kPrimLayerNorm = std::make_shared<Primitive>("LayerNorm");
  194. const PrimitivePtr kPrimLayerNormGrad = std::make_shared<Primitive>("LayerNormGrad");
  195. const PrimitivePtr kPrimLayerNormXBackprop = std::make_shared<Primitive>("LayerNormXBackprop");
  196. const PrimitivePtr kPrimLayerNormBetaGammaBackprop = std::make_shared<Primitive>("LayerNormBetaGammaBackprop");
  197. const PrimitivePtr kPrimDropoutGenMask = std::make_shared<Primitive>("DropoutGenMask");
  198. const PrimitivePtr kPrimDropoutDoMask = std::make_shared<Primitive>("DropoutDoMask");
  199. const PrimitivePtr kPrimOneHot = std::make_shared<Primitive>("OneHot");
  200. const PrimitivePtr kPrimGelu = std::make_shared<Primitive>("Gelu");
  201. const PrimitivePtr kPrimGeluGrad = std::make_shared<Primitive>("GeluGrad");
  202. const PrimitivePtr kPrimRelu = std::make_shared<Primitive>("ReLU");
  203. const PrimitivePtr kPrimReluV2 = std::make_shared<Primitive>("ReLUV2");
  204. const PrimitivePtr kPrimZerosLike = std::make_shared<Primitive>("ZerosLike");
  205. const PrimitivePtr kPrimFakeBprop = std::make_shared<Primitive>("fake_bprop");
  206. const PrimitivePtr kPrimBpropCut = std::make_shared<Primitive>("bprop_cut");
  207. // Other miscellaneous
  208. const PrimitivePtr kPrimIdentity = std::make_shared<Primitive>("identity");
  209. const PrimitivePtr kPrimPartial = std::make_shared<Primitive>("Partial");
  210. const PrimitivePtr kPrimJ = std::make_shared<Primitive>("J");
  211. const PrimitivePtr kPrimEnvSetItem = std::make_shared<Primitive>("env_setitem");
  212. const PrimitivePtr kPrimEnvGetItem = std::make_shared<Primitive>("env_getitem");
  213. const PrimitivePtr kPrimEnvAdd = std::make_shared<Primitive>("env_add");
  214. const PrimitivePtr kPrimMakeRefKey = std::make_shared<Primitive>("MakeRefKey");
  215. const PrimitivePtr kPrimGetRefKey = std::make_shared<Primitive>("get_ref_key");
  216. const PrimitivePtr kPrimGetRefValue = std::make_shared<Primitive>("get_ref_value");
  217. const PrimitivePtr kPrimGetRefOrigin = std::make_shared<Primitive>("get_ref_origin");
  218. const PrimitivePtr kPrimInsertGradientOf = std::make_shared<Primitive>("InsertGradientOf");
  219. const PrimitivePtr kPrimHookBackward = std::make_shared<Primitive>("HookBackward");
  220. const PrimitivePtr kPrimPrintShapeType = std::make_shared<Primitive>("PrintShapeType");
  221. const PrimitivePtr kPrimSameTypeShape = std::make_shared<Primitive>("SameTypeShape");
  222. const PrimitivePtr kPrimCheckBprop = std::make_shared<Primitive>("CheckBprop");
  223. const PrimitivePtr kPrimPrint = std::make_shared<Primitive>("Print");
  224. const PrimitivePtr kPrimMakeRef = std::make_shared<Primitive>("make_ref");
  225. const PrimitivePtr kPrimDepend = std::make_shared<Primitive>("Depend");
  226. const PrimitivePtr kPrimStateSetItem = std::make_shared<Primitive>("state_setitem");
  227. const PrimitivePtr kPrimBroadcastGradientArgs = std::make_shared<Primitive>("BroadcastGradientArgs");
  228. const PrimitivePtr kPrimControlDepend = std::make_shared<Primitive>("ControlDepend");
  229. const PrimitivePtr kPrimIs_ = std::make_shared<Primitive>("is_");
  230. const PrimitivePtr kPrimIsNot = std::make_shared<Primitive>("is_not");
  231. const PrimitivePtr kPrimInDict = std::make_shared<Primitive>("in_dict");
  232. const PrimitivePtr kPrimNotInDict = std::make_shared<Primitive>("not_in_dict");
  233. const PrimitivePtr kPrimMixedPrecisionCast = std::make_shared<Primitive>("mixed_precision_cast");
  234. const PrimitivePtr kPrimIsConsant = std::make_shared<Primitive>("is_constant");
  235. // Comm ops
  236. const PrimitivePtr kPrimMirror = std::make_shared<Primitive>("_MirrorOperator");
  237. const PrimitivePtr kPrimVirtualDiv = std::make_shared<Primitive>("_VirtualDiv");
  238. const PrimitivePtr kPrimVirtualDataset = std::make_shared<Primitive>("_VirtualDataset");
  239. const PrimitivePtr kPrimAllReduce = std::make_shared<Primitive>("AllReduce");
  240. // Debug ops
  241. const PrimitivePtr kPrimScalarSummary = std::make_shared<Primitive>("ScalarSummary");
  242. const PrimitivePtr kPrimImageSummary = std::make_shared<Primitive>("ImageSummary");
  243. const PrimitivePtr kPrimTensorSummary = std::make_shared<Primitive>("TensorSummary");
  244. const PrimitivePtr kPrimHistogramSummary = std::make_shared<Primitive>("HistogramSummary");
  245. } // namespace prim
  246. } // namespace mindspore