From 94c3731b50771737a945a7d65907d8f73581fcbe Mon Sep 17 00:00:00 2001 From: "Min, Byungil" Date: Fri, 17 Dec 2021 16:43:21 +0900 Subject: [PATCH] [GPU] support multiple sum post-op of onednn kernel (#9221) + Applied WA for multiple sum post-ops of nednn kernel Signed-off-by: Min, Byungil --- .../thirdparty/clDNN/src/layout_optimizer.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/inference-engine/thirdparty/clDNN/src/layout_optimizer.cpp b/inference-engine/thirdparty/clDNN/src/layout_optimizer.cpp index 1c4518b1654..1646ca99a89 100644 --- a/inference-engine/thirdparty/clDNN/src/layout_optimizer.cpp +++ b/inference-engine/thirdparty/clDNN/src/layout_optimizer.cpp @@ -1283,6 +1283,23 @@ impl_types layout_optimizer::get_preferred_impl_type(program_node& node, format impl_candidate = impl_types::ocl; } + // [WA] to avoid an onednn kernel issue of multiple sum post-ops + if (!node.get_fused_primitives().empty()) { + size_t sum_post_op_cnt = 0; + for (auto& fused_op : node.get_fused_primitives()) { + if (fused_op.node->is_type() && node.get_dependencies().size() > fused_op.dep_start_idx && fused_op.deps.size() == 1) { + auto& eltw_in = node.get_dependency(fused_op.dep_start_idx); + if (program_helpers::are_layouts_identical_for_onednn_sum_post_op(eltw_in.get_output_layout(), node.get_output_layout()) && + fused_op.node->as().get_primitive()->needs_onednn_sum_post_op(eltw_in.get_output_layout())) { + if (sum_post_op_cnt > 0) + return impl_types::ocl; + + sum_post_op_cnt += 1; + } + } + } + } + if (node.is_type()) { // oneDNN doesn't have good support for groups with fsv16 fmt auto& conv = node.as();