From 954172a0101f90f22effb2d8c7df55333b781283 Mon Sep 17 00:00:00 2001 From: Mateusz Tabaka Date: Fri, 14 Jan 2022 09:51:02 +0100 Subject: [PATCH] [GPU] Don't optimize crop if its user is a reshape that can be optimized (#9537) Crop uses more eltwise assign kernel which yields better performance than reshape_ref. --- .../graph_optimizer/prepare_buffer_fusing.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_buffer_fusing.cpp b/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_buffer_fusing.cpp index e51dcc507a4..d21e2b4d51e 100644 --- a/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_buffer_fusing.cpp +++ b/src/plugins/intel_gpu/src/graph/graph_optimizer/prepare_buffer_fusing.cpp @@ -269,6 +269,10 @@ void concat_in_place_optimization::optimize_cascade(concatenation_node& node, st } // namespace +static bool can_reshape_be_optimized(const reshape_node& node) { + return node.is_in_place() && node.get_fused_activations_funcs().empty(); +} + // ToDo remove friendship relation from program_node void prepare_buffer_fusing::run(program& p) { bool is_debug = p.get_options().get()->enabled(); @@ -310,6 +314,11 @@ void prepare_buffer_fusing::run(program& p) { return; if (user->is_type() || user->is_type()) return; + if (user->is_type()) { + auto& reshape_node = user->as(); + if (can_reshape_be_optimized(reshape_node)) + return; + } } if (node.get_dependencies().size() == 1 && node.get_users().size() > 0) { @@ -387,10 +396,7 @@ void prepare_buffer_fusing::run(program& p) { continue; program_helpers::do_for_types(*node, [&p](reshape_node& node) { node.get_output_layout(); - if (node.is_in_place() && node.get_fused_activations_funcs().empty()) - node.can_be_optimized(true); - else - node.can_be_optimized(false); + node.can_be_optimized(can_reshape_be_optimized(node)); }); } }