From c7b1e84ac5f3ada1b2f78c66979ef4d44804a955 Mon Sep 17 00:00:00 2001 From: SiCongLi Date: Mon, 22 Feb 2021 14:28:33 +0000 Subject: Remove usage of valid window region in NHWC CPU kernels - Part1 Replace all calculate_max_window(ValidRegion, ...) with calculate_max_window(TensorShape, ...) in CPU kernels Resolves COMPMID-4152 (1/2) Change-Id: I7403ea6b24b9e7889890839142a06439d6c8a499 Signed-off-by: SiCongLi Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5202 Reviewed-by: Georgios Pinitas Tested-by: Arm Jenkins Comments-Addressed: Arm Jenkins --- src/core/cpu/kernels/CpuAddKernel.cpp | 9 ++------- src/core/cpu/kernels/CpuElementwiseKernel.cpp | 6 ++---- src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp | 6 ++---- src/core/cpu/kernels/CpuSubKernel.cpp | 9 ++------- 4 files changed, 8 insertions(+), 22 deletions(-) (limited to 'src/core/cpu') diff --git a/src/core/cpu/kernels/CpuAddKernel.cpp b/src/core/cpu/kernels/CpuAddKernel.cpp index 31c7b2af60..fc88a7e22d 100644 --- a/src/core/cpu/kernels/CpuAddKernel.cpp +++ b/src/core/cpu/kernels/CpuAddKernel.cpp @@ -249,9 +249,7 @@ Status validate_arguments(const ITensorInfo &src0, const ITensorInfo &src1, cons std::pair validate_and_configure_window(const ITensorInfo &src0, const ITensorInfo &src1, ITensorInfo &dst) { - const std::pair broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(src0, src1); - const TensorShape &out_shape = broadcast_pair.first; - const ValidRegion &valid_region = broadcast_pair.second; + const TensorShape &out_shape = TensorShape::broadcast_shape(src0.tensor_shape(), src1.tensor_shape()); // Auto initialize dst if not initialized { @@ -287,12 +285,9 @@ std::pair validate_and_configure_window(const ITensorInfo &src0, } } - Window win = calculate_max_window(valid_region, Steps()); + Window win = calculate_max_window(out_shape, Steps()); // CpuAddKernel doesn't need padding so update_window_and_padding() can be skipped - Coordinates coord; - coord.set_num_dimensions(dst.num_dimensions()); - dst.set_valid_region(valid_region); return std::make_pair(Status{}, win); } } // namespace diff --git a/src/core/cpu/kernels/CpuElementwiseKernel.cpp b/src/core/cpu/kernels/CpuElementwiseKernel.cpp index ab915b9d72..1ac21acbc0 100644 --- a/src/core/cpu/kernels/CpuElementwiseKernel.cpp +++ b/src/core/cpu/kernels/CpuElementwiseKernel.cpp @@ -182,14 +182,12 @@ void CpuElementwiseKernel::configure_common(const ITensorInfo *input1, const ITe ARM_COMPUTE_ERROR_ON_NULLPTR(input1, input2, output); // Configure kernel window - const std::pair broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(*input1, *input2); - const TensorShape &out_shape = broadcast_pair.first; - const ValidRegion &valid_region = broadcast_pair.second; + const TensorShape &out_shape = TensorShape::broadcast_shape(input1->tensor_shape(), input2->tensor_shape()); // Auto initialize output if not initialized auto_init_if_empty(*output, out_shape, 1, input1->data_type()); - Window win = calculate_max_window(valid_region); + Window win = calculate_max_window(out_shape); ICpuKernel::configure(win); } diff --git a/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp index d2681bb060..2b5c11f8e1 100644 --- a/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp +++ b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp @@ -113,14 +113,12 @@ void CpuElementwiseUnaryKernel::configure(ElementWiseUnary op, const ITensorInfo ARM_COMPUTE_ERROR_THROW_ON(validate(op, input, output)); // Configure kernel window - const std::pair broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(input); - const TensorShape &out_shape = broadcast_pair.first; - const ValidRegion &valid_region = broadcast_pair.second; + const TensorShape &out_shape = TensorShape::broadcast_shape(input.tensor_shape()); // Auto initialize output if not initialized auto_init_if_empty(output, out_shape, 1, input.data_type()); - Window win = calculate_max_window(valid_region); + Window win = calculate_max_window(out_shape); _op = op; diff --git a/src/core/cpu/kernels/CpuSubKernel.cpp b/src/core/cpu/kernels/CpuSubKernel.cpp index a03dcf2353..d7057bbe2b 100644 --- a/src/core/cpu/kernels/CpuSubKernel.cpp +++ b/src/core/cpu/kernels/CpuSubKernel.cpp @@ -201,9 +201,7 @@ void CpuSubKernel::configure(const ITensorInfo *src0, const ITensorInfo *src1, I ARM_COMPUTE_ERROR_ON_NULLPTR(src0, src1, dst); ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(*src0, *src1, *dst, policy)); - const std::pair broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(*src0, *src1); - const TensorShape &out_shape = broadcast_pair.first; - const ValidRegion &valid_region = broadcast_pair.second; + const TensorShape &out_shape = TensorShape::broadcast_shape(src0->tensor_shape(), src1->tensor_shape()); // Auto initialize dst if not initialized set_shape_if_empty(*dst, out_shape); @@ -211,10 +209,7 @@ void CpuSubKernel::configure(const ITensorInfo *src0, const ITensorInfo *src1, I _policy = policy; // CpuSubKernel doesn't need padding so update_window_and_padding() can be skipped - Coordinates coord; - coord.set_num_dimensions(dst->num_dimensions()); - dst->set_valid_region(valid_region); - Window win = calculate_max_window(valid_region, Steps()); + Window win = calculate_max_window(out_shape, Steps()); ICpuKernel::configure(win); } -- cgit v1.2.1