From 59fe0a05a4d6edd54b5d225c2c34e2adf6a7b340 Mon Sep 17 00:00:00 2001 From: Roman Lyamin Date: Tue, 24 Oct 2023 09:21:30 +0400 Subject: [PATCH] [GPU] Fix for reorder fusing in fuse_constant_transposes pass (#20651) --- .../graph_optimizer/prepare_primitive_fusing.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_primitive_fusing.cpp b/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_primitive_fusing.cpp index 45739c78a1e..cc9d8602316 100644 --- a/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_primitive_fusing.cpp +++ b/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_primitive_fusing.cpp @@ -1221,6 +1221,8 @@ void prepare_primitive_fusing::fuse_constant_transposes(program& p) { return format::find_format(new_order, fmt.block_sizes()); }; + std::vector> to_replace_nodes; + auto& proc_order = p.get_processing_order(); auto itr = proc_order.begin(); while (itr != proc_order.end()) { @@ -1285,9 +1287,7 @@ void prepare_primitive_fusing::fuse_constant_transposes(program& p) { auto new_reorder = std::make_shared(next_node->id() + "_reorder_fmt", new_const_node.id(), reorder_layout); auto& new_reorder_node = p.get_or_create(new_reorder); - p.replace(*next_node, new_reorder_node); - new_reorder_node.recalc_output_layout(false); - itr = std::find(proc_order.begin(), proc_order.end(), &new_reorder_node); + to_replace_nodes.emplace_back(std::make_pair(next_node, &new_reorder_node)); } else { layout reorder_layout = new_const_node.get_output_layout(); reorder_layout.format = format::bfyx; @@ -1299,6 +1299,11 @@ void prepare_primitive_fusing::fuse_constant_transposes(program& p) { } } } + + for (auto& nodes : to_replace_nodes) { + p.replace(*nodes.first, *nodes.second); + nodes.second->recalc_output_layout(false); + } } void prepare_primitive_fusing::optimize_fused_ops(program& p) {