/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MINDSPORE_CCSRC_SESSION_ASCEND_CONTROL_PARSER_H #define MINDSPORE_CCSRC_SESSION_ASCEND_CONTROL_PARSER_H #include #include #include #include #include "session/kernel_graph.h" #include "utils/base_ref.h" #include "utils/contract.h" #include "utils/union_find_set.h" namespace mindspore { namespace session { class AscendControlParser { public: static void ChildGraphDataAssign(const std::map &graph_id_map); static void LinkGraph(NotNull kg); static void InsertDependToGraph(NotNull kg, NotNull attch_node); static void InsertControlDependToGraph(NotNull kg, NotNull first_node, NotNull second_node); static void ExecutorValidate(NotNull root_graph); static void UpdateChildGraphOrder(NotNull kg); private: static NotNull GetStartLabel(NotNull kg, const CNodePtr &last_node, const CNodePtr &last_label); static NotNull ProcessKernelGraph(NotNull kg, const CNodePtr &last_node, const CNodePtr &last_label, const NotNull *> memo); static void RecurseCall(NotNull kg, NotNull cur_node, const CNodePtr &next_node, const NotNull *> memo); static void RecurseSwitch(NotNull kg, NotNull cur_node, const CNodePtr &next_node, const NotNull *> memo); static void RecurseSwitchLayer(NotNull kg, NotNull cur_node, const CNodePtr &next_node, const NotNull *> memo); static void LinkParentGraph(NotNull kg, const CNodePtr &from_graph_call_node, const CNodePtr &last_label); static KernelGraphPtr ParsePartial(NotNull node); static void InsertMultipleAssignToGraph(NotNull from_graph, NotNull to_graph, NotNull from, NotNull to); static AnfNodePtr InsertAssignToGraph(NotNull kg, NotNull from, NotNull to); // root graph order static bool CheckLabelIndex(uint32_t order_index, uint32_t label_index, const CNodePtr &cnode, NotNull graph); static std::vector RecurseGraph(NotNull graph, const NotNull *> memo); }; } // namespace session } // namespace mindspore #endif // MINDSPORE_CCSRC_SESSION_ASCEND_CONTROL_PARSER_H