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.

trace_info.h 17 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. /**
  2. * Copyright 2019 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. #ifndef MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_
  17. #define MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_
  18. #include <iostream>
  19. #include <string>
  20. #include <memory>
  21. #include <stack>
  22. #include <utility>
  23. #include <vector>
  24. #include "ir/base.h"
  25. namespace mindspore {
  26. class TraceInfo;
  27. using TraceInfoPtr = std::shared_ptr<TraceInfo>;
  28. class Location;
  29. using LocationPtr = std::shared_ptr<Location>;
  30. class DebugInfo;
  31. using DebugInfoPtr = std::shared_ptr<DebugInfo>;
  32. // namespace to support intermediate representation definition
  33. class TraceInfo : public Base {
  34. public:
  35. TraceInfo(const DebugInfoPtr &info, const std::string &full_name, const std::string &symbol) {
  36. symbol_ = symbol;
  37. full_name_ = full_name;
  38. name_ = full_name_;
  39. debug_info_ = info;
  40. }
  41. TraceInfo(const TraceInfo &info)
  42. : Base(), debug_info_(info.debug_info_), symbol_(info.symbol_), full_name_(info.full_name_), name_(info.name_) {}
  43. ~TraceInfo() override = default;
  44. MS_DECLARE_PARENT(TraceInfo, Base);
  45. virtual std::string name() { return name_; }
  46. virtual std::string symbol() { return symbol_; }
  47. virtual std::string full_name() { return full_name_; }
  48. virtual TraceInfoPtr clone() { return shared_from_base<TraceInfo>(); }
  49. virtual std::string action_name() { return ""; }
  50. virtual std::string GetActionBetweenNode(const DebugInfoPtr &info);
  51. void set_debug_info(const DebugInfoPtr &info) { debug_info_ = info; }
  52. DebugInfoPtr debug_info() { return debug_info_; }
  53. DebugInfoPtr DebugInfoHasLoc();
  54. std::vector<std::pair<DebugInfoPtr, TraceInfoPtr>> GetSourceCodeDebugInfo();
  55. protected:
  56. DebugInfoPtr debug_info_;
  57. std::string symbol_;
  58. std::string full_name_;
  59. std::string name_;
  60. };
  61. class TracePhi : public TraceInfo {
  62. public:
  63. explicit TracePhi(const DebugInfoPtr &info) : TraceInfo(info, "phi", "Φ") {}
  64. MS_DECLARE_PARENT(TracePhi, TraceInfo);
  65. ~TracePhi() override = default;
  66. TraceInfoPtr clone() override { return std::make_shared<TracePhi>(*shared_from_base<TracePhi>()); }
  67. };
  68. class TraceIfStmtTrueBranch : public TraceInfo {
  69. public:
  70. TraceIfStmtTrueBranch(const TraceIfStmtTrueBranch &) = default;
  71. explicit TraceIfStmtTrueBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_true", "✓") {}
  72. MS_DECLARE_PARENT(TraceIfStmtTrueBranch, TraceInfo);
  73. ~TraceIfStmtTrueBranch() override = default;
  74. TraceInfoPtr clone() override {
  75. return std::make_shared<TraceIfStmtTrueBranch>(*shared_from_base<TraceIfStmtTrueBranch>());
  76. }
  77. };
  78. class TraceIfStmtFalseBranch : public TraceInfo {
  79. public:
  80. TraceIfStmtFalseBranch(const TraceIfStmtFalseBranch &) = default;
  81. explicit TraceIfStmtFalseBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_false", "✗") {}
  82. MS_DECLARE_PARENT(TraceIfStmtFalseBranch, TraceInfo);
  83. ~TraceIfStmtFalseBranch() override = default;
  84. TraceInfoPtr clone() override {
  85. return std::make_shared<TraceIfStmtFalseBranch>(*shared_from_base<TraceIfStmtFalseBranch>());
  86. }
  87. };
  88. class TraceIfStmtAfterBranch : public TraceInfo {
  89. public:
  90. explicit TraceIfStmtAfterBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_after", "↓") {}
  91. MS_DECLARE_PARENT(TraceIfStmtAfterBranch, TraceInfo);
  92. ~TraceIfStmtAfterBranch() override = default;
  93. TraceInfoPtr clone() override {
  94. return std::make_shared<TraceIfStmtAfterBranch>(*shared_from_base<TraceIfStmtAfterBranch>());
  95. }
  96. };
  97. class TraceIfExpTrueBranch : public TraceInfo {
  98. public:
  99. explicit TraceIfExpTrueBranch(const DebugInfoPtr &info) : TraceInfo(info, "ifexp_true", "↰") {}
  100. MS_DECLARE_PARENT(TraceIfExpTrueBranch, TraceInfo);
  101. ~TraceIfExpTrueBranch() override = default;
  102. TraceInfoPtr clone() override {
  103. return std::make_shared<TraceIfExpTrueBranch>(*shared_from_base<TraceIfExpTrueBranch>());
  104. }
  105. };
  106. class TraceIfExpFalseBranch : public TraceInfo {
  107. public:
  108. explicit TraceIfExpFalseBranch(const DebugInfoPtr &info) : TraceInfo(info, "ifexp_false", "↱") {}
  109. MS_DECLARE_PARENT(TraceIfExpFalseBranch, TraceInfo);
  110. ~TraceIfExpFalseBranch() override = default;
  111. TraceInfoPtr clone() override {
  112. return std::make_shared<TraceIfExpFalseBranch>(*shared_from_base<TraceIfExpFalseBranch>());
  113. }
  114. };
  115. class TraceCopy : public TraceInfo {
  116. public:
  117. TraceCopy() : TraceInfo(nullptr, "copy", "") {}
  118. explicit TraceCopy(const DebugInfoPtr &info) : TraceInfo(info, "copy", "") {}
  119. MS_DECLARE_PARENT(TraceCopy, TraceInfo);
  120. ~TraceCopy() override = default;
  121. TraceInfoPtr clone() override { return std::make_shared<TraceCopy>(*shared_from_base<TraceCopy>()); }
  122. };
  123. class TraceIterator : public TraceInfo {
  124. public:
  125. explicit TraceIterator(const DebugInfoPtr &info) : TraceInfo(info, "iterator", "@") {}
  126. MS_DECLARE_PARENT(TraceIterator, TraceInfo);
  127. ~TraceIterator() override = default;
  128. TraceInfoPtr clone() override { return std::make_shared<TraceIterator>(*shared_from_base<TraceIterator>()); }
  129. };
  130. class TraceWhileHeader : public TraceInfo {
  131. public:
  132. explicit TraceWhileHeader(const DebugInfoPtr &info) : TraceInfo(info, "while_header", "⤾") {}
  133. MS_DECLARE_PARENT(TraceWhileHeader, TraceInfo);
  134. ~TraceWhileHeader() override = default;
  135. TraceInfoPtr clone() override { return std::make_shared<TraceWhileHeader>(*shared_from_base<TraceWhileHeader>()); }
  136. };
  137. class TraceWhileBody : public TraceInfo {
  138. public:
  139. explicit TraceWhileBody(const DebugInfoPtr &info) : TraceInfo(info, "while_body", "⥁") {}
  140. MS_DECLARE_PARENT(TraceWhileBody, TraceInfo);
  141. ~TraceWhileBody() override = default;
  142. TraceInfoPtr clone() override { return std::make_shared<TraceWhileBody>(*shared_from_base<TraceWhileBody>()); }
  143. };
  144. class TraceWhileAfter : public TraceInfo {
  145. public:
  146. explicit TraceWhileAfter(const DebugInfoPtr &info) : TraceInfo(info, "while_after", "↓") {}
  147. MS_DECLARE_PARENT(TraceWhileAfter, TraceInfo);
  148. ~TraceWhileAfter() override = default;
  149. TraceInfoPtr clone() override { return std::make_shared<TraceWhileAfter>(*shared_from_base<TraceWhileAfter>()); }
  150. };
  151. class TraceForHeader : public TraceInfo {
  152. public:
  153. explicit TraceForHeader(const DebugInfoPtr &info) : TraceInfo(info, "for_header", "⤾") {}
  154. MS_DECLARE_PARENT(TraceForHeader, TraceInfo);
  155. ~TraceForHeader() override = default;
  156. TraceInfoPtr clone() override { return std::make_shared<TraceForHeader>(*shared_from_base<TraceForHeader>()); }
  157. };
  158. class TraceForBody : public TraceInfo {
  159. public:
  160. explicit TraceForBody(const DebugInfoPtr &info) : TraceInfo(info, "for_body", "⥁") {}
  161. MS_DECLARE_PARENT(TraceForBody, TraceInfo);
  162. ~TraceForBody() override = default;
  163. TraceInfoPtr clone() override { return std::make_shared<TraceForBody>(*shared_from_base<TraceForBody>()); }
  164. };
  165. class TraceForAfter : public TraceInfo {
  166. public:
  167. explicit TraceForAfter(const DebugInfoPtr &info) : TraceInfo(info, "for_after", "↓") {}
  168. MS_DECLARE_PARENT(TraceForAfter, TraceInfo);
  169. ~TraceForAfter() override = default;
  170. TraceInfoPtr clone() override { return std::make_shared<TraceForAfter>(*shared_from_base<TraceForAfter>()); }
  171. };
  172. class TraceLoopEnd : public TraceInfo {
  173. public:
  174. explicit TraceLoopEnd(const DebugInfoPtr &info) : TraceInfo(info, "loop_end", "↓↓") {}
  175. MS_DECLARE_PARENT(TraceLoopEnd, TraceInfo);
  176. ~TraceLoopEnd() override = default;
  177. TraceInfoPtr clone() override { return std::make_shared<TraceLoopEnd>(*shared_from_base<TraceLoopEnd>()); }
  178. };
  179. class TraceEquiv : public TraceInfo {
  180. public:
  181. explicit TraceEquiv(const DebugInfoPtr &info) : TraceInfo(info, "equiv", "equiv") {}
  182. MS_DECLARE_PARENT(TraceEquiv, TraceInfo);
  183. ~TraceEquiv() override = default;
  184. TraceInfoPtr clone() override { return std::make_shared<TraceEquiv>(*shared_from_base<TraceEquiv>()); }
  185. };
  186. class TraceGradFpropApp : public TraceInfo {
  187. public:
  188. TraceGradFpropApp() : TraceInfo(nullptr, "grad_fprop_app", "▲") {}
  189. explicit TraceGradFpropApp(const DebugInfoPtr &info) : TraceInfo(info, "grad_fprop_app", "▲") {}
  190. MS_DECLARE_PARENT(TraceGradFpropApp, TraceInfo);
  191. ~TraceGradFpropApp() override = default;
  192. TraceInfoPtr clone() override { return std::make_shared<TraceGradFpropApp>(*shared_from_base<TraceGradFpropApp>()); }
  193. };
  194. class TraceGradBpropApp : public TraceInfo {
  195. public:
  196. TraceGradBpropApp() : TraceInfo(nullptr, "grad_bprop_app", "▼") {}
  197. explicit TraceGradBpropApp(const DebugInfoPtr &info) : TraceInfo(info, "grad_bprop_app", "▼") {}
  198. MS_DECLARE_PARENT(TraceGradBpropApp, TraceInfo);
  199. ~TraceGradBpropApp() override = default;
  200. TraceInfoPtr clone() override { return std::make_shared<TraceGradBpropApp>(*shared_from_base<TraceGradBpropApp>()); }
  201. };
  202. class TraceGradFprop : public TraceInfo {
  203. public:
  204. TraceGradFprop() : TraceInfo(nullptr, "grad_fprop", "▶") {}
  205. explicit TraceGradFprop(const DebugInfoPtr &info) : TraceInfo(info, "grad_fprop", "▶") {}
  206. MS_DECLARE_PARENT(TraceGradFprop, TraceInfo);
  207. ~TraceGradFprop() override = default;
  208. TraceInfoPtr clone() override { return std::make_shared<TraceGradFprop>(*shared_from_base<TraceGradFprop>()); }
  209. };
  210. class TraceGradBprop : public TraceInfo {
  211. public:
  212. TraceGradBprop() : TraceInfo(nullptr, "grad_bprop", "◀") {}
  213. explicit TraceGradBprop(const DebugInfoPtr &info) : TraceInfo(info, "grad_bprop", "◀") {}
  214. MS_DECLARE_PARENT(TraceGradBprop, TraceInfo);
  215. ~TraceGradBprop() override = default;
  216. TraceInfoPtr clone() override { return std::make_shared<TraceGradBprop>(*shared_from_base<TraceGradBprop>()); }
  217. };
  218. class TraceGradSens : public TraceInfo {
  219. public:
  220. TraceGradSens() : TraceInfo(nullptr, "grad_sens", "∇") {}
  221. explicit TraceGradSens(const DebugInfoPtr &info) : TraceInfo(info, "grad_sens", "∇") {}
  222. MS_DECLARE_PARENT(TraceGradSens, TraceInfo);
  223. ~TraceGradSens() override = default;
  224. TraceInfoPtr clone() override { return std::make_shared<TraceGradSens>(*shared_from_base<TraceGradSens>()); }
  225. };
  226. class TraceSpecialize : public TraceInfo {
  227. public:
  228. explicit TraceSpecialize(const std::string &counter) : TraceInfo(nullptr, "specialize", "") { counter_ = counter; }
  229. MS_DECLARE_PARENT(TraceSpecialize, TraceInfo);
  230. std::string name() override { return full_name_ + counter_; }
  231. std::string symbol() override { return counter_ + "_"; }
  232. std::string full_name() override { return full_name_ + counter_ + "_"; }
  233. ~TraceSpecialize() override = default;
  234. TraceInfoPtr clone() override { return std::make_shared<TraceSpecialize>(*shared_from_base<TraceSpecialize>()); }
  235. std::string counter_;
  236. };
  237. class TraceGradOperation : public TraceInfo {
  238. public:
  239. explicit TraceGradOperation(const DebugInfoPtr &info) : TraceInfo(info, "grad_ops", "") {}
  240. MS_DECLARE_PARENT(TraceGradOperation, TraceInfo);
  241. ~TraceGradOperation() override = default;
  242. TraceInfoPtr clone() override {
  243. return std::make_shared<TraceGradOperation>(*shared_from_base<TraceGradOperation>());
  244. }
  245. };
  246. class TraceForceBool : public TraceInfo {
  247. public:
  248. explicit TraceForceBool(const DebugInfoPtr &info) : TraceInfo(info, "force_bool", "") {}
  249. MS_DECLARE_PARENT(TraceForceBool, TraceInfo);
  250. ~TraceForceBool() override = default;
  251. TraceInfoPtr clone() override { return std::make_shared<TraceForceBool>(*shared_from_base<TraceForceBool>()); }
  252. };
  253. class TraceForceWhileCond : public TraceInfo {
  254. public:
  255. explicit TraceForceWhileCond(const DebugInfoPtr &info) : TraceInfo(info, "force_while_cond", "") {}
  256. MS_DECLARE_PARENT(TraceForceWhileCond, TraceInfo);
  257. ~TraceForceWhileCond() override = default;
  258. TraceInfoPtr clone() override {
  259. return std::make_shared<TraceForceWhileCond>(*shared_from_base<TraceForceWhileCond>());
  260. }
  261. };
  262. class TraceExpandJ : public TraceInfo {
  263. public:
  264. explicit TraceExpandJ(const DebugInfoPtr &info) : TraceInfo(info, "expand_j", "") {}
  265. MS_DECLARE_PARENT(TraceExpandJ, TraceInfo);
  266. ~TraceExpandJ() override = default;
  267. TraceInfoPtr clone() override { return std::make_shared<TraceExpandJ>(*shared_from_base<TraceExpandJ>()); }
  268. };
  269. class TraceGenMetaFuncGraph : public TraceInfo {
  270. public:
  271. explicit TraceGenMetaFuncGraph(const DebugInfoPtr &info) : TraceInfo(info, "GenMetaFuncGraph", "") {}
  272. MS_DECLARE_PARENT(TraceGenMetaFuncGraph, TraceInfo);
  273. ~TraceGenMetaFuncGraph() override = default;
  274. TraceInfoPtr clone() override {
  275. return std::make_shared<TraceGenMetaFuncGraph>(*shared_from_base<TraceGenMetaFuncGraph>());
  276. }
  277. };
  278. class TraceEvaluatorGenGraph : public TraceInfo {
  279. public:
  280. explicit TraceEvaluatorGenGraph(const DebugInfoPtr &info) : TraceInfo(info, "GenEvaluatorGraph", "") {}
  281. MS_DECLARE_PARENT(TraceEvaluatorGenGraph, TraceInfo);
  282. ~TraceEvaluatorGenGraph() override = default;
  283. TraceInfoPtr clone() override {
  284. return std::make_shared<TraceEvaluatorGenGraph>(*shared_from_base<TraceEvaluatorGenGraph>());
  285. }
  286. };
  287. class TraceResolve : public TraceInfo {
  288. public:
  289. explicit TraceResolve(const DebugInfoPtr &info) : TraceInfo(info, "resolve", "") {}
  290. MS_DECLARE_PARENT(TraceResolve, TraceInfo);
  291. ~TraceResolve() override = default;
  292. TraceInfoPtr clone() override { return std::make_shared<TraceResolve>(*shared_from_base<TraceResolve>()); }
  293. };
  294. class TraceTransform : public TraceInfo {
  295. public:
  296. TraceTransform() : TraceInfo(nullptr, "transform", "") { transform_name_ = ""; }
  297. explicit TraceTransform(const std::string &transform_name) : TraceInfo(nullptr, "transform", "") {
  298. transform_name_ = transform_name;
  299. }
  300. std::string full_name() override { return full_name_ + transform_name_; }
  301. MS_DECLARE_PARENT(TraceTransform, TraceInfo);
  302. std::string symbol() override {
  303. if (transform_name_.empty()) {
  304. return "";
  305. }
  306. return transform_name_ + "_";
  307. }
  308. ~TraceTransform() override = default;
  309. TraceInfoPtr clone() override { return std::make_shared<TraceTransform>(*shared_from_base<TraceTransform>()); }
  310. std::string transform_name_;
  311. };
  312. class TraceGenerateVarArg : public TraceInfo {
  313. public:
  314. explicit TraceGenerateVarArg(const DebugInfoPtr &info) : TraceInfo(info, "GenerateVarArg", "") {}
  315. MS_DECLARE_PARENT(TraceGenerateVarArg, TraceInfo);
  316. ~TraceGenerateVarArg() override = default;
  317. TraceInfoPtr clone() override {
  318. return std::make_shared<TraceGenerateVarArg>(*shared_from_base<TraceGenerateVarArg>());
  319. }
  320. };
  321. class TraceGenerateKwArg : public TraceInfo {
  322. public:
  323. explicit TraceGenerateKwArg(const DebugInfoPtr &info) : TraceInfo(info, "GenerateKwArg", "") {}
  324. MS_DECLARE_PARENT(TraceGenerateKwArg, TraceInfo);
  325. ~TraceGenerateKwArg() override = default;
  326. TraceInfoPtr clone() override {
  327. return std::make_shared<TraceGenerateKwArg>(*shared_from_base<TraceGenerateKwArg>());
  328. }
  329. };
  330. class TraceTrasformK : public TraceInfo {
  331. public:
  332. explicit TraceTrasformK(const DebugInfoPtr &info) : TraceInfo(info, "TraceTrasformK", "") {}
  333. MS_DECLARE_PARENT(TraceTrasformK, TraceInfo);
  334. ~TraceTrasformK() override = default;
  335. TraceInfoPtr clone() override { return std::make_shared<TraceTrasformK>(*shared_from_base<TraceTrasformK>()); }
  336. };
  337. class TracePartialTransform : public TraceInfo {
  338. public:
  339. explicit TracePartialTransform(const DebugInfoPtr &info) : TraceInfo(info, "PartialTransform", "") {}
  340. MS_DECLARE_PARENT(TracePartialTransform, TraceInfo);
  341. ~TracePartialTransform() override = default;
  342. TraceInfoPtr clone() override {
  343. return std::make_shared<TracePartialTransform>(*shared_from_base<TracePartialTransform>());
  344. }
  345. };
  346. class TraceGetEnv : public TraceInfo {
  347. public:
  348. explicit TraceGetEnv(const DebugInfoPtr &info) : TraceInfo(info, "get_env", "") {}
  349. MS_DECLARE_PARENT(TraceGetEnv, TraceInfo);
  350. ~TraceGetEnv() override = default;
  351. TraceInfoPtr clone() override { return std::make_shared<TraceGetEnv>(*shared_from_base<TraceGetEnv>()); }
  352. };
  353. class TraceDoSignature : public TraceInfo {
  354. public:
  355. explicit TraceDoSignature(const DebugInfoPtr &info) : TraceInfo(info, "DoSignature", "") {}
  356. MS_DECLARE_PARENT(TraceDoSignature, TraceInfo);
  357. ~TraceDoSignature() override = default;
  358. TraceInfoPtr clone() override { return std::make_shared<TraceDoSignature>(*shared_from_base<TraceDoSignature>()); }
  359. };
  360. class TraceCombileLikeGraphs : public TraceInfo {
  361. public:
  362. TraceCombileLikeGraphs() : TraceInfo(nullptr, "CombileLike", "L-") {}
  363. explicit TraceCombileLikeGraphs(const DebugInfoPtr &info) : TraceInfo(info, "CombileLike", "L-") {}
  364. MS_DECLARE_PARENT(TraceCombileLikeGraphs, TraceInfo);
  365. ~TraceCombileLikeGraphs() override = default;
  366. TraceInfoPtr clone() override {
  367. return std::make_shared<TraceCombileLikeGraphs>(*shared_from_base<TraceCombileLikeGraphs>());
  368. }
  369. };
  370. } // namespace mindspore
  371. #endif // MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_