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 16 kB

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