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.

chain_builder.cc 2.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * Copyright 2021 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 "easy_graph/builder/chain_builder.h"
  17. #include "easy_graph/builder/graph_builder.h"
  18. EG_NS_BEGIN
  19. ChainBuilder::ChainBuilder(GraphBuilder &graphBuilder, EdgeType defaultEdgeType)
  20. : linker(*this, defaultEdgeType), graph_builder_(graphBuilder) {}
  21. ChainBuilder::LinkBuilder *ChainBuilder::operator->() {
  22. return &linker;
  23. }
  24. ChainBuilder &ChainBuilder::LinkTo(const Node &node, const Link &link) {
  25. Node *currentNode = graph_builder_.BuildNode(node);
  26. if (prev_node_) {
  27. graph_builder_.BuildEdge(*prev_node_, *currentNode, link);
  28. }
  29. prev_node_ = currentNode;
  30. return *this;
  31. }
  32. const Node *ChainBuilder::FindNode(const NodeId &id) const {
  33. return graph_builder_->FindNode(id);
  34. }
  35. ChainBuilder::LinkBuilder::LinkBuilder(ChainBuilder &chain, EdgeType defaultEdgeType)
  36. : chain_(chain), default_edge_type_(defaultEdgeType), from_link_(defaultEdgeType) {}
  37. ChainBuilder &ChainBuilder::LinkBuilder::Node(const NodeObj &node) {
  38. chain_.LinkTo(node, from_link_);
  39. from_link_.Reset(default_edge_type_);
  40. return chain_;
  41. }
  42. ChainBuilder &ChainBuilder::LinkBuilder::startLink(const Link &link) {
  43. this->from_link_ = link;
  44. return chain_;
  45. }
  46. ChainBuilder &ChainBuilder::LinkBuilder::Ctrl(const std::string &label) {
  47. return this->Edge(EdgeType::CTRL, UNDEFINED_PORT_ID, UNDEFINED_PORT_ID, label);
  48. }
  49. ChainBuilder &ChainBuilder::LinkBuilder::Data(const std::string &label) {
  50. return this->Edge(EdgeType::DATA, UNDEFINED_PORT_ID, UNDEFINED_PORT_ID, label);
  51. }
  52. ChainBuilder &ChainBuilder::LinkBuilder::Data(PortId srcId, PortId dstId, const std::string &label) {
  53. return this->Edge(EdgeType::DATA, srcId, dstId, label);
  54. }
  55. ChainBuilder &ChainBuilder::LinkBuilder::Edge(EdgeType type, PortId srcPort, PortId dstPort, const std::string &label) {
  56. return this->startLink(Link(type, label, srcPort, dstPort));
  57. }
  58. EG_NS_END

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示