From 73381e976e5b40c94513971e150b5d3488f384cf Mon Sep 17 00:00:00 2001 From: Eddy Kim Date: Fri, 8 Jul 2022 21:15:10 +0900 Subject: [PATCH] updated to fuse activation in eltwise_vload8 (#12084) --- .../eltwise/eltwise_kernel_vload8.cpp | 17 +++++++++++++++++ .../eltwise/eltwise_kernel_vload8.h | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.cpp b/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.cpp index 467468b43d1..7ad5db43eb8 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.cpp +++ b/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // +#include "activation/activation_kernel_base.h" #include "eltwise_kernel_vload8.h" #include "kernel_selector_utils.h" #include @@ -32,6 +33,12 @@ bool EltwiseKernel_vload8::Validate(const Params& params, const optional_params& const auto& ewParams = static_cast(params); + // Only one activation can be fused. + if (ewParams.fused_ops.size() > 1 || + (ewParams.activations.size() !=0 && ewParams.fused_ops.size() != 0)) { + return false; + } + for (size_t i = 0; i < ewParams.inputs.size(); i++) { const auto input_layout = ewParams.inputs[i].GetLayout(); const auto batch_size = ewParams.inputs[i].Batch().v; @@ -109,6 +116,16 @@ KernelsData EltwiseKernel_vload8::GetKernelsData(const Params& params, const opt auto entry_point = GetEntryPoint(kernelName, newParams.layerID, params, options); try { + // move a fused activation from fused_ops to activations + if (newParams.activations.size() == 0 && + newParams.fused_ops.size() == 1 && + newParams.fused_ops[0].GetType() == KernelType::ACTIVATION) { + auto p = newParams.fused_ops[0].GetOpParams(); + base_activation_params activation_p = p->param; + newParams.activations.push_back(activation_p); + newParams.fused_ops.clear(); + } + auto cldnn_jit = GetJitConstants(newParams); jit = CreateJit(kernelName, cldnn_jit, entry_point); } catch (const std::runtime_error&) { diff --git a/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.h b/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.h index 7e75c4e255f..5cd3c08b16a 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.h +++ b/src/plugins/intel_gpu/src/kernel_selector/core/actual_kernels/eltwise/eltwise_kernel_vload8.h @@ -15,6 +15,11 @@ public: KernelsData GetKernelsData(const Params& params, const optional_params& options) const override; KernelsPriority GetKernelsPriority(const Params& params, const optional_params& options) const override; ParamsKey GetSupportedKey() const override; + std::vector GetSupportedFusedOps() const override { + return { + FusedOpType::ACTIVATION + }; + } protected: bool Validate(const Params& p, const optional_params& o) const override;