From f9ab9f9ca1bbcac8688980bfd64e26fec2e0e9a2 Mon Sep 17 00:00:00 2001 From: Sheri Zhang Date: Tue, 16 Mar 2021 12:09:15 +0000 Subject: Make ClPixelWiseMultiplicationKernel stateless Partially resolves: COMPMID-4183 Signed-off-by: Sheri Zhang Change-Id: Ibc08d2d84d023ef8b23ed44d534aa1ca24515e4d Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5274 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- .../CL/functions/CLPixelWiseMultiplication.cpp | 121 +++------------------ 1 file changed, 14 insertions(+), 107 deletions(-) (limited to 'src/runtime/CL/functions/CLPixelWiseMultiplication.cpp') diff --git a/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp b/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp index a56018b397..5ebaf5d122 100644 --- a/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp +++ b/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 Arm Limited. + * Copyright (c) 2016-2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -26,111 +26,18 @@ #include "arm_compute/core/CL/ICLTensor.h" #include "arm_compute/runtime/CL/CLScheduler.h" #include "src/core/CL/kernels/CLFillBorderKernel.h" -#include "src/core/CL/kernels/CLPixelWiseMultiplicationKernel.h" +#include "src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h" #include namespace arm_compute { -namespace -{ -ITensorPack select_border_input(ITensorPack &tensors) -{ - ITensorPack pack; - if(tensors.get_tensor(TensorType::ACL_DST)->info()->dimension(0) > 1) - { - if(tensors.get_const_tensor(TensorType::ACL_SRC_1)->info()->dimension(0) == 1) - { - pack.add_tensor(TensorType::ACL_SRC, tensors.get_const_tensor(TensorType::ACL_SRC_1)); - } - else - { - pack.add_tensor(TensorType::ACL_SRC, tensors.get_const_tensor(TensorType::ACL_SRC_0)); - } - } - return pack; -} -} // namespace - -namespace experimental -{ -CLPixelWiseMultiplication::CLPixelWiseMultiplication() - : _border_handler(std::make_unique()) -{ -} - -void CLPixelWiseMultiplication::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, float scale, - ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info) -{ - auto k = std::make_unique(); - k->configure(compile_context, input1, input2, output, scale, overflow_policy, rounding_policy, act_info); - _kernel = std::move(k); - - if(output->dimension(0) > 1) - { - ITensorInfo *broadcasted_info = (input1->dimension(0) == 1) ? input1 : input2; - - if(broadcasted_info->dimension(0) == 1) - { - _border_handler->configure(compile_context, broadcasted_info, _kernel->border_size(), BorderMode::REPLICATE); - } - } -} - -Status CLPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale, - ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info) -{ - return CLPixelWiseMultiplicationKernel::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info); -} - -void CLPixelWiseMultiplication::run(ITensorPack &tensors) -{ - auto border_pack = select_border_input(tensors); - CLScheduler::get().enqueue_op(*_border_handler, border_pack); - ICLOperator::run(tensors); -} - -CLComplexPixelWiseMultiplication::CLComplexPixelWiseMultiplication() - : _border_handler(std::make_unique()) -{ -} - -void CLComplexPixelWiseMultiplication::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info) -{ - auto k = std::make_unique(); - k->configure(compile_context, input1, input2, output, act_info); - _kernel = std::move(k); - - if(output->dimension(0) > 1) - { - ITensorInfo *broadcasted_info = (input1->dimension(0) == 1) ? input1 : input2; - - if(broadcasted_info->dimension(0) == 1) - { - _border_handler->configure(compile_context, broadcasted_info, _kernel->border_size(), BorderMode::REPLICATE); - } - } -} - -Status CLComplexPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info) -{ - return CLComplexPixelWiseMultiplicationKernel::validate(input1, input2, output, act_info); -} - -void CLComplexPixelWiseMultiplication::run(ITensorPack &tensors) -{ - auto border_pack = select_border_input(tensors); - CLScheduler::get().enqueue_op(*_border_handler, border_pack); - ICLOperator::run(tensors); -} -} // namespace experimental - struct CLPixelWiseMultiplication::Impl { - const ICLTensor *src_0{ nullptr }; - const ICLTensor *src_1{ nullptr }; - ICLTensor *dst{ nullptr }; - std::unique_ptr op{ nullptr }; + const ICLTensor *src_0{ nullptr }; + const ICLTensor *src_1{ nullptr }; + ICLTensor *dst{ nullptr }; + std::unique_ptr op{ nullptr }; }; CLPixelWiseMultiplication::CLPixelWiseMultiplication() @@ -153,14 +60,14 @@ void CLPixelWiseMultiplication::configure(const CLCompileContext &compile_contex _impl->src_0 = input1; _impl->src_1 = input2; _impl->dst = output; - _impl->op = std::make_unique(); + _impl->op = std::make_unique(); _impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), scale, overflow_policy, rounding_policy, act_info); } Status CLPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info) { - return experimental::CLPixelWiseMultiplication::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info); + return opencl::ClPixelWiseMultiplication::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info); } void CLPixelWiseMultiplication::run() @@ -175,10 +82,10 @@ void CLPixelWiseMultiplication::run() struct CLComplexPixelWiseMultiplication::Impl { - const ICLTensor *src_0{ nullptr }; - const ICLTensor *src_1{ nullptr }; - ICLTensor *dst{ nullptr }; - std::unique_ptr op{ nullptr }; + const ICLTensor *src_0{ nullptr }; + const ICLTensor *src_1{ nullptr }; + ICLTensor *dst{ nullptr }; + std::unique_ptr op{ nullptr }; }; CLComplexPixelWiseMultiplication::CLComplexPixelWiseMultiplication() @@ -199,13 +106,13 @@ void CLComplexPixelWiseMultiplication::configure(const CLCompileContext &compile _impl->src_0 = input1; _impl->src_1 = input2; _impl->dst = output; - _impl->op = std::make_unique(); + _impl->op = std::make_unique(); _impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info); } Status CLComplexPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info) { - return experimental::CLComplexPixelWiseMultiplication::validate(input1, input2, output, act_info); + return opencl::ClComplexPixelWiseMultiplication::validate(input1, input2, output, act_info); } void CLComplexPixelWiseMultiplication::run() -- cgit v1.2.1