From 35bcb7718262e466e19d54753d25930520517d69 Mon Sep 17 00:00:00 2001 From: Jade Cho Date: Thu, 13 Jan 2022 18:32:50 +0900 Subject: [PATCH] [GPU] Merge reorder into next onednn conv (#9601) + When the format of onednn convolution is bs_fs_yx_bsv32_fsv32, the reorder for dependency primitive of fused eltwise sum is removed. --- .../intel_gpu/src/graph/layout_optimizer.cpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/plugins/intel_gpu/src/graph/layout_optimizer.cpp b/src/plugins/intel_gpu/src/graph/layout_optimizer.cpp index cd4f662984e..c2b8eaf577b 100644 --- a/src/plugins/intel_gpu/src/graph/layout_optimizer.cpp +++ b/src/plugins/intel_gpu/src/graph/layout_optimizer.cpp @@ -357,6 +357,28 @@ bool layout_optimizer::can_fuse_reorder(program_node& prev, program_node& next, } } + if (next.is_type() && + (fmt_prev == format::bfyx && fmt_next == format::bs_fs_yx_bsv32_fsv32) && + // Condition to avoid execution in reorder_inputs. + prev.get_users().size() == 1 && prev.get_users().front()->is_type()) { + const auto& cur = prev.get_users().front(); + std::set dep_idx_set; + for (auto& p : next.get_fused_primitives()) { + // find eltwise sum primitive which has dependency nodes, and gather dependency indices of it. + if (p.node->is_type() && p.node->as().get_primitive()->mode == eltwise_mode::sum) { + for (size_t i = p.dep_start_idx; i < p.dep_start_idx + p.total_num_deps; i++) + dep_idx_set.insert(i); + } + } + // The current reorder can be fused if it is a dependency of eltwise sum primitive fused. + for (size_t i = 0; i < next.get_dependencies().size(); i++) { + auto& d_node = next.get_dependency(i); + if (cur->id() == d_node.id() && dep_idx_set.find(i) != dep_idx_set.end()) { + return true; + } + } + } + if (next.is_type()) return true;