| @@ -142,6 +142,7 @@ set(TRAIN_SRC_LIST | |||||
| "graph/passes/atomic_addr_clean_pass.cc" | "graph/passes/atomic_addr_clean_pass.cc" | ||||
| "graph/passes/mark_same_addr_pass.cc" | "graph/passes/mark_same_addr_pass.cc" | ||||
| "graph/passes/mark_graph_unknown_status_pass.cc" | "graph/passes/mark_graph_unknown_status_pass.cc" | ||||
| "graph/passes/dynamic_single_op_reset_shape_pass.cc" | |||||
| "graph/passes/mark_agnostic_pass.cc" | "graph/passes/mark_agnostic_pass.cc" | ||||
| "graph/partition/dynamic_shape_partition.cc" | "graph/partition/dynamic_shape_partition.cc" | ||||
| "graph/partition/stage_partition.cc" | "graph/partition/stage_partition.cc" | ||||
| @@ -433,6 +434,7 @@ set(INFER_SRC_LIST | |||||
| "graph/passes/atomic_addr_clean_pass.cc" | "graph/passes/atomic_addr_clean_pass.cc" | ||||
| "graph/passes/mark_same_addr_pass.cc" | "graph/passes/mark_same_addr_pass.cc" | ||||
| "graph/passes/mark_graph_unknown_status_pass.cc" | "graph/passes/mark_graph_unknown_status_pass.cc" | ||||
| "graph/passes/dynamic_single_op_reset_shape_pass.cc" | |||||
| "graph/passes/mark_agnostic_pass.cc" | "graph/passes/mark_agnostic_pass.cc" | ||||
| "graph/common/omg_util.cc" | "graph/common/omg_util.cc" | ||||
| "graph/common/bcast.cc" | "graph/common/bcast.cc" | ||||
| @@ -109,6 +109,7 @@ OMG_HOST_SRC_FILES := \ | |||||
| graph/passes/atomic_addr_clean_pass.cc \ | graph/passes/atomic_addr_clean_pass.cc \ | ||||
| graph/passes/mark_same_addr_pass.cc \ | graph/passes/mark_same_addr_pass.cc \ | ||||
| graph/passes/mark_graph_unknown_status_pass.cc \ | graph/passes/mark_graph_unknown_status_pass.cc \ | ||||
| graph/passes/dynamic_single_op_reset_shape_pass.cc \ | |||||
| graph/passes/mark_agnostic_pass.cc \ | graph/passes/mark_agnostic_pass.cc \ | ||||
| graph/common/omg_util.cc \ | graph/common/omg_util.cc \ | ||||
| graph/common/bcast.cc \ | graph/common/bcast.cc \ | ||||
| @@ -111,6 +111,7 @@ LIBGE_LOCAL_SRC_FILES := \ | |||||
| graph/passes/atomic_addr_clean_pass.cc \ | graph/passes/atomic_addr_clean_pass.cc \ | ||||
| graph/passes/mark_same_addr_pass.cc \ | graph/passes/mark_same_addr_pass.cc \ | ||||
| graph/passes/mark_graph_unknown_status_pass.cc \ | graph/passes/mark_graph_unknown_status_pass.cc \ | ||||
| graph/passes/dynamic_single_op_reset_shape_pass.cc \ | |||||
| graph/passes/mark_agnostic_pass.cc \ | graph/passes/mark_agnostic_pass.cc \ | ||||
| graph/partition/dynamic_shape_partition.cc \ | graph/partition/dynamic_shape_partition.cc \ | ||||
| graph/partition/stage_partition.cc \ | graph/partition/stage_partition.cc \ | ||||
| @@ -69,6 +69,7 @@ | |||||
| #include "graph/passes/iterator_op_pass.h" | #include "graph/passes/iterator_op_pass.h" | ||||
| #include "graph/passes/link_gen_mask_nodes_pass.h" | #include "graph/passes/link_gen_mask_nodes_pass.h" | ||||
| #include "graph/passes/mark_graph_unknown_status_pass.h" | #include "graph/passes/mark_graph_unknown_status_pass.h" | ||||
| #include "graph/passes/dynamic_single_op_reset_shape_pass.h" | |||||
| #include "graph/passes/merge_pass.h" | #include "graph/passes/merge_pass.h" | ||||
| #include "graph/passes/merge_input_memcpy_pass.h" | #include "graph/passes/merge_input_memcpy_pass.h" | ||||
| #include "graph/passes/merge_to_stream_merge_pass.h" | #include "graph/passes/merge_to_stream_merge_pass.h" | ||||
| @@ -2280,6 +2281,9 @@ Status GraphManager::OptimizeStage2(ge::ComputeGraphPtr &compute_graph) { | |||||
| new (std::nothrow) VariableRefDeleteOpPass)) | new (std::nothrow) VariableRefDeleteOpPass)) | ||||
| GE_CHK_STATUS_RET(pass_for_control_attr_optimize.AddPass("OptimizeStage2::ControlAttrOptimize::CompileNodesPass", | GE_CHK_STATUS_RET(pass_for_control_attr_optimize.AddPass("OptimizeStage2::ControlAttrOptimize::CompileNodesPass", | ||||
| new (std::nothrow) CompileNodesPass)) | new (std::nothrow) CompileNodesPass)) | ||||
| GE_CHK_STATUS_RET( | |||||
| pass_for_control_attr_optimize.AddPass("OptimizeStage2::AfterMergePasses::DynamicSingleOpResetShapePass", | |||||
| new (std::nothrow) DynamicSingleOpResetShapePass)) | |||||
| GE_CHK_STATUS_RET(pass_for_control_attr_optimize.AddPass( | GE_CHK_STATUS_RET(pass_for_control_attr_optimize.AddPass( | ||||
| "OptimizeStage2::AfterMergePasses::MarkGraphUnknownStatusPass", new(std::nothrow) MarkGraphUnknownStatusPass)) | "OptimizeStage2::AfterMergePasses::MarkGraphUnknownStatusPass", new(std::nothrow) MarkGraphUnknownStatusPass)) | ||||
| GE_CHK_STATUS_RET( | GE_CHK_STATUS_RET( | ||||
| @@ -0,0 +1,54 @@ | |||||
| /** | |||||
| * Copyright 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. | |||||
| */ | |||||
| #include "graph/passes/dynamic_single_op_reset_shape_pass.h" | |||||
| #include "graph/utils/node_utils.h" | |||||
| #include "graph/utils/graph_utils.h" | |||||
| #include "graph/utils/tensor_utils.h" | |||||
| #include "graph/utils/op_desc_utils.h" | |||||
| #include "graph/utils/type_utils.h" | |||||
| #include "graph/debug/ge_attr_define.h" | |||||
| namespace ge { | |||||
| Status DynamicSingleOpResetShapePass::Run(ComputeGraphPtr graph) { | |||||
| GE_CHECK_NOTNULL(graph); | |||||
| for (const auto &node : graph->GetDirectNode()) { | |||||
| GE_CHECK_NOTNULL(node->GetOpDesc()); | |||||
| if (node->GetType() == DATA || node->GetType() == NETOUTPUT) { | |||||
| continue; | |||||
| } | |||||
| bool single_aicpu_unknown = false; | |||||
| if (!AttrUtils::GetBool(node->GetOpDesc(), ATTR_DYNAMIC_SHAPE_SINGLE_AICPU, single_aicpu_unknown) || | |||||
| !single_aicpu_unknown) { | |||||
| continue; | |||||
| } | |||||
| auto op_desc = node->GetOpDesc(); | |||||
| std::vector<int64_t> dynamic_shape_dims = {-2}; | |||||
| ge::Shape dynamic_shape(dynamic_shape_dims); | |||||
| for (size_t i = 0; i < op_desc->GetAllInputsDesc().size(); i++) { | |||||
| const auto &input_desc = op_desc->MutableInputDesc(static_cast<uint32_t>(i)); | |||||
| GE_CHECK_NOTNULL(input_desc); | |||||
| input_desc.SetShape(dynamic_shape); | |||||
| } | |||||
| GELOGD("Reset dynamic aicpu node [%s] shape success!", node->GetName().c_str()); | |||||
| } | |||||
| GELOGD("Reset dynamic aicpu nodes shape of graph [%s] success!", graph->GetName().c_str()); | |||||
| return SUCCESS; | |||||
| } | |||||
| } // namespace ge | |||||
| @@ -0,0 +1,28 @@ | |||||
| /** | |||||
| * Copyright 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_GRAPH_PASSES_DYNAMIC_SINGLE_OP_RESET_SHAPE_PASS_H_ | |||||
| #define GE_GRAPH_PASSES_DYNAMIC_SINGLE_OP_RESET_SHAPE_PASS_H_ | |||||
| #include "graph/graph.h" | |||||
| #include "inc/graph_pass.h" | |||||
| namespace ge { | |||||
| class DynamicSingleOpResetShapePass : public GraphPass { | |||||
| public: | |||||
| Status Run(ComputeGraphPtr graph); | |||||
| }; | |||||
| } // namespace ge | |||||
| #endif // GE_GRAPH_PASSES_DYNAMIC_SINGLE_OP_RESET_SHAPE_PASS_H_ | |||||
| @@ -182,6 +182,7 @@ set(COMMON_SRC_FILES | |||||
| "${GE_CODE_DIR}/ge/graph/passes/atomic_addr_clean_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/atomic_addr_clean_pass.cc" | ||||
| "${GE_CODE_DIR}/ge/graph/passes/mark_same_addr_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/mark_same_addr_pass.cc" | ||||
| "${GE_CODE_DIR}/ge/graph/passes/mark_graph_unknown_status_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/mark_graph_unknown_status_pass.cc" | ||||
| "${GE_CODE_DIR}/ge/graph/passes/dynamic_single_op_reset_shape_pass.cc" | |||||
| "${GE_CODE_DIR}/ge/graph/passes/mark_agnostic_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/mark_agnostic_pass.cc" | ||||
| "${GE_CODE_DIR}/ge/graph/passes/dimension_compute_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/dimension_compute_pass.cc" | ||||
| "${GE_CODE_DIR}/ge/graph/passes/dimension_adjust_pass.cc" | "${GE_CODE_DIR}/ge/graph/passes/dimension_adjust_pass.cc" | ||||