|
- /**
- * Copyright 2019-2020 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 GE_SYMMETRY_ELIMINATION_PASS_H
- #define GE_SYMMETRY_ELIMINATION_PASS_H
-
- #include "graph/passes/base_pass.h"
-
- namespace ge {
- class TransOpSymmetryEliminationPass : public BaseNodePass {
- public:
- Status Run(NodePtr &node) override;
-
- private:
- ///
- /// Judge whether the node can be offset
- /// 1.both are transform op
- /// 2.is symmetry position
- /// 3.satisfy precision loss
- /// @param node
- /// @return True or False
- ///
- static bool CheckCanBeEliminated(const ge::NodePtr &src_node, const InDataAnchorPtr &dst_in_anchor);
- ///
- /// two transform nodes can be offset only when the front node's input is
- /// consistent with the back one's output
- /// @param src_node: the front node
- /// @param dst_node: the back node
- /// @return True or False, whether can be offset or not
- ///
- static bool DescAreSymmetry(const NodePtr &src_node, const NodePtr &dst_node);
-
- ///
- /// get the number of unknown shape of node
- /// @param node_desc: node to be checked
- /// @return 0 , is not dynamic shape; UNKNOWN_DIM_NUM , all dims are unknown; n , n > 0 , has n dims unknown
- ///
- static int GetUnknownDimsNum(const GeTensorDesc& node_desc);
-
-
- ///
- /// judge after two transposed op transform the raw data will be the same
- /// @param src_node: first transposed op
- /// @param dst_node: second transposed op
- /// @return True or False, same or not
- ///
- static bool JudgeTransposeDBack2Raw(const NodePtr &src_node, const NodePtr &dst_node);
-
- ///
- /// two transform nodes can be offset like A->T1->T2->B
- /// 1.unlink T1->T2
- /// 2.link A->T2
- /// 3.copy in-control/data-in-control from T1->T2
- /// 4.isolateAndDelete T2, it will re-pass all in and out node
- /// then we get A->B . Leave T1 to prune pass.
- /// ->T1
- /// @param src_node: the front node
- /// @param src_out_anchor: the front node out anchor
- /// @param dst_node: the back node
- /// @param dst_in_anchor: the back node in anchor
- /// @return SUCCESS or Fail, whether
- ///
- Status EliminateTransOp(NodePtr &src_node, const OutDataAnchorPtr &src_out_anchor, NodePtr &dst_node,
- const InDataAnchorPtr &dst_in_anchor);
-
- Status RemoveTransOpWithoutOutput(NodePtr &pre_node, NodePtr &trans_node);
- };
- } // namespace ge
-
- #endif // GE_SYMMETRY_ELIMINATION_PASS_H
|