ArmNN
 25.11
Loading...
Searching...
No Matches
NeonReduceWorkload.cpp
Go to the documentation of this file.
1//
2// Copyright © 2021-2024 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
7
10
12
13#include "NeonWorkloadUtils.hpp"
14
15namespace armnn
16{
17using namespace armcomputetensorutils;
18
19arm_compute::Status NeonReduceWorkloadValidate(const TensorInfo& input,
20 const TensorInfo& output,
21 const ReduceDescriptor& descriptor)
22{
23 if ( descriptor.m_vAxis.size()==1 || descriptor.m_vAxis.empty())
24 {
25 const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
26 const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
27
28 arm_compute::Coordinates coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),
29 input.GetNumDimensions(),
30 descriptor.m_vAxis);
31
32 return arm_compute::NEReductionOperation::validate(&aclInputInfo,
33 &aclOutputInfo,
34 static_cast<unsigned int>(coords[0]),
36 descriptor.m_KeepDims);
37 }
38 else
39 {
40 // Validate layer if there are multiple axes.
41 arm_compute::Status status;
42 IsMultiAxesReduceSupported(NeonReduceWorkloadValidate, input, output, descriptor, status);
43 return status;
44 }
45}
46
49{
50 // Report Profiling Details
51 ARMNN_REPORT_PROFILING_WORKLOAD_DESC("NeonReduceWorkload_Construct",
52 descriptor.m_Parameters,
53 info,
54 this->GetGuid());
55
56 m_Data.ValidateInputsOutputs("NeonReduceWorkload", 1, 1);
57
58 arm_compute::ITensor& input = static_cast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
59 arm_compute::ITensor& output = static_cast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
60
61 arm_compute::Coordinates coords = BuildArmComputeReductionCoordinates(input.info()->num_dimensions(),
62 info.m_InputTensorInfos[0].GetNumDimensions(),
63 m_Data.m_Parameters.m_vAxis);
64
65 m_Layer.configure(&input,
66 &output,
67 static_cast<unsigned int>(coords[0]),
69 m_Data.m_Parameters.m_KeepDims);
70}
71
73{
74 ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID("NeonReduceWorkload_Execute");
75 m_Layer.run();
76}
77
78} //namespace armnn
#define ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
#define ARMNN_REPORT_PROFILING_WORKLOAD_DESC(name, desc, infos, guid)
NeonBaseWorkload(const ReduceQueueDescriptor &descriptor, const WorkloadInfo &info)
NeonReduceWorkload(const ReduceQueueDescriptor &descriptor, const WorkloadInfo &info)
void Execute() const override
unsigned int GetNumDimensions() const
Definition Tensor.hpp:197
Copyright (c) 2021 ARM Limited and Contributors.
void IsMultiAxesReduceSupported(reduceValidateFunction func, const armnn::TensorInfo &input, const armnn::TensorInfo &output, const armnn::ReduceDescriptor &desc, arm_compute::Status &status)
Function to check if layer with multiple axes is supported on each backend.
arm_compute::Status NeonReduceWorkloadValidate(const TensorInfo &input, const TensorInfo &output, const ReduceDescriptor &descriptor)
arm_compute::ReductionOperation ConvertReductionOperationToAcl(const ReduceDescriptor &descriptor)
A ReduceDescriptor for the REDUCE operators.
bool m_KeepDims
if true then output shape has no change.
std::vector< uint32_t > m_vAxis
The indices of the dimensions to reduce.
Contains information about TensorInfos of a layer.