From 0d27b2ee8d811d66693555ac1e7be44d93e662e2 Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Thu, 24 Aug 2023 14:01:20 +0100 Subject: Remove legacy PostOps code PostOps was the experimental interface for Dynamic Fusion. It is now replaced by the new Dynamic Fusion interface with code generation using the Compute Kernel Writer. Resolves: COMPMID-6190 Change-Id: I813b48facef2fd6f3aee332588886b4f9b3d33d8 Signed-off-by: Jakub Sujak Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10219 Benchmark: Arm Jenkins Tested-by: Arm Jenkins Reviewed-by: SiCong Li Comments-Addressed: Arm Jenkins --- src/core/CL/CLUtils.cpp | 114 +----------------------------------------------- 1 file changed, 2 insertions(+), 112 deletions(-) (limited to 'src/core/CL/CLUtils.cpp') diff --git a/src/core/CL/CLUtils.cpp b/src/core/CL/CLUtils.cpp index 03f78697bc..7e56a3ba18 100644 --- a/src/core/CL/CLUtils.cpp +++ b/src/core/CL/CLUtils.cpp @@ -23,16 +23,14 @@ */ #include "src/core/CL/CLUtils.h" -#include "arm_compute/core/utils/ActivationFunctionUtils.h" #include "arm_compute/core/CL/CLCompileContext.h" #include "arm_compute/core/CL/CLKernelLibrary.h" #include "arm_compute/core/CL/ICLTensor.h" #include "arm_compute/core/Validate.h" +#include "arm_compute/core/utils/ActivationFunctionUtils.h" #include "arm_compute/core/utils/StringUtils.h" #include "support/StringSupport.h" -#include "src/core/experimental/PostOpUtils.h" - namespace arm_compute { cl::Image2D create_image2d_from_tensor(const ICLTensor *tensor, CLImage2DType image_type) @@ -40,7 +38,7 @@ cl::Image2D create_image2d_from_tensor(const ICLTensor *tensor, CLImage2DType im ARM_COMPUTE_ERROR_ON_NULLPTR(tensor); const cl::Context &ctx = CLKernelLibrary::get().context(); - const cl::Buffer &buffer = tensor->cl_buffer(); + const cl::Buffer &buffer = tensor->cl_buffer(); const ITensorInfo *info = tensor->info(); ARM_COMPUTE_ERROR_ON_MSG(info->lock_paddings(), "Tensor paddings must not be locked to allow extending paddings to satisfy cl_image pitch alignment requirement"); @@ -113,112 +111,4 @@ cl::Image2D create_image2d_from_buffer(const cl::Context &ctx, const cl::Buffer return cl::Image2D(cl_image); } - -namespace experimental -{ -PostOpCLKernelUtils::PostOpCLKernelUtils(const Config &supported_config) - : _supported_config(supported_config) -{ - ARM_COMPUTE_ERROR_ON_MSG(supported_config.empty(), "Empty PostOp CL kernel support configuration is not allowed"); - for(auto it = _supported_config.begin(); it != _supported_config.end(); ++it) - { - auto post_op_sequence = it->first; - auto post_op_slots = std::get<1>(it->second); - ARM_COMPUTE_ERROR_ON_MSG(post_op_sequence.size() != post_op_slots.size(), "The number of PostOps must be the same as that of the assigned slots"); - } -} - -bool PostOpCLKernelUtils::are_post_op_shapes_compliant(const ITensorInfo *dst, const experimental::PostOpList &post_ops) -{ - for(const auto &op : post_ops.get_list()) - { - for(const auto &tensor : op->arguments()) - { - const TensorShape &out_shape = TensorShape::broadcast_shape(dst->tensor_shape(), (*tensor)->tensor_shape()); - // All post ops must be elementwise and must not alter the shape of the original dst tensor after broadcasting - if(detail::have_different_dimensions(out_shape, dst->tensor_shape(), 0)) - { - return false; - } - // NOTE: Kernel limitation: currently only the following broadcasting types are supported: - // 1. Post op arg is scalar, broadcast in both first and second dims - // 2. Post op arg is of shape: second dim=1, first dim=N, broadcast only in second dim - // This means this case: Post op arg is of shape: second dim=M, first dim=1, broadcast only in first dim, is NOT supported - if(dst->dimension(0) > 1 && dst->dimension(1) > 1 && (*tensor)->dimension(0) == 1 && (*tensor)->dimension(1) > 1) - { - return false; - } - } - } - return true; -} - -bool PostOpCLKernelUtils::is_post_op_sequence_supported(const PostOpList &post_ops) const -{ - if(post_ops.size() == 0) - { - return true; // Always support cases where no post op is specified - } - const auto post_op_sequence = get_post_op_sequence(post_ops); - - return _supported_config.find(post_op_sequence) != _supported_config.end(); -} - -void PostOpCLKernelUtils::set_post_ops_cl_build_options(CLBuildOptions &build_opts, const PostOpList &post_ops) const -{ - const auto post_op_sequence = get_post_op_sequence(post_ops); - const auto slots = std::get<1>(_supported_config.at(post_op_sequence)); - for(size_t post_op_id = 0; post_op_id < post_ops.size(); ++post_op_id) - { - const auto &post_op = post_ops.get_list().at(post_op_id); - const auto slot_prefix = "-DP" + support::cpp11::to_string(slots[post_op_id]); - if(post_op->type() == experimental::PostOpType::Activation) - { - const auto _post_op = utils::cast::polymorphic_downcast *>(post_op.get()); - const auto act_type = slot_prefix + "_ACTIVATION_TYPE=" + lower_string(string_from_activation_func(_post_op->_act_info.activation())); - const auto act_a_val = slot_prefix + "_ACTIVATION_A_VAL=" + float_to_string_with_full_precision(_post_op->_act_info.a()); - const auto act_b_val = slot_prefix + "_ACTIVATION_B_VAL=" + float_to_string_with_full_precision(_post_op->_act_info.b()); - build_opts.add_option(act_type); - build_opts.add_option(act_a_val); - build_opts.add_option(act_b_val); - } - else if(post_op->type() == experimental::PostOpType::Eltwise_Add) - { - size_t arg_id = 1; - const auto eltwise_op = slot_prefix + "_ELTWISE_OP=ADD" + "_X_POS_" + support::cpp11::to_string(post_op->prev_dst_pos()); - build_opts.add_option(eltwise_op); - for(const auto &tensor : post_op->arguments()) - { - const auto height = slot_prefix + "_ELTWISE_ARG" + support::cpp11::to_string(arg_id) + "_HEIGHT=" + support::cpp11::to_string((*tensor)->dimension(1)); - const auto width = slot_prefix + "_ELTWISE_ARG" + support::cpp11::to_string(arg_id) + "_WIDTH=" + support::cpp11::to_string((*tensor)->dimension(0)); - build_opts.add_option(height); - build_opts.add_option(width); - ++arg_id; - } - } - else if(post_op->type() == experimental::PostOpType::Eltwise_PRelu) - { - size_t arg_id = 1; - const auto eltwise_op = slot_prefix + "_ELTWISE_OP=PRELU" + "_X_POS_" + support::cpp11::to_string(post_op->prev_dst_pos()); - build_opts.add_option(eltwise_op); - for(const auto &tensor : post_op->arguments()) - { - const auto height = slot_prefix + "_ELTWISE_ARG" + support::cpp11::to_string(arg_id) + "_HEIGHT=" + support::cpp11::to_string((*tensor)->dimension(1)); - const auto width = slot_prefix + "_ELTWISE_ARG" + support::cpp11::to_string(arg_id) + "_WIDTH=" + support::cpp11::to_string((*tensor)->dimension(0)); - build_opts.add_option(height); - build_opts.add_option(width); - ++arg_id; - } - } - } -} - -void PostOpCLKernelUtils::set_post_ops_cl_kernel_name(std::string &kernel_name, const PostOpList &post_ops) const -{ - const auto post_op_sequence = get_post_op_sequence(post_ops); - const auto postfix = std::get<0>(_supported_config.at(post_op_sequence)); - kernel_name += postfix; -} -} // namespace experimental - } // namespace arm_compute -- cgit v1.2.1