blob: b4b89529231bedcc3e3d45a394fa4699450c4fcf [file] [log] [blame]
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +00001//
Matthew Sloyan6dd07022023-01-25 12:40:11 +00002// Copyright © 2020 Samsung Electronics Co Ltd and Contributors. All rights reserved.
3// Copyright © 2021-2022 Arm Ltd and Contributors. All rights reserved.
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +00004// SPDX-License-Identifier: MIT
5//
6
7#include "RefReduceWorkload.hpp"
8
9#include "Reduce.hpp"
10#include "RefWorkloadUtils.hpp"
11#include "BaseIterator.hpp"
12#include "Profiling.hpp"
13
14namespace armnn
15{
16
17RefReduceWorkload::RefReduceWorkload(
18 const ReduceQueueDescriptor& descriptor,
19 const WorkloadInfo& info)
Finn Williams73c547d2022-02-15 20:47:34 +000020 : RefBaseWorkload<ReduceQueueDescriptor>(descriptor, info) {}
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000021
22void RefReduceWorkload::Execute() const
23{
Finn Williamsb8181f72021-04-07 10:23:21 +010024 Execute(m_Data.m_Inputs, m_Data.m_Outputs);
25}
26
Matthew Sloyan2d213a72022-06-30 17:13:04 +010027void RefReduceWorkload::ExecuteAsync(ExecutionData& executionData)
Finn Williamsb8181f72021-04-07 10:23:21 +010028{
Matthew Sloyan2d213a72022-06-30 17:13:04 +010029 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
30 Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
Finn Williamsb8181f72021-04-07 10:23:21 +010031}
32
33void RefReduceWorkload::Execute(std::vector<ITensorHandle*> inputs, std::vector<ITensorHandle*> outputs) const
34{
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000035 ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefReduceWorkload_Execute");
36
Finn Williamsb8181f72021-04-07 10:23:21 +010037 const TensorInfo& inputInfo = GetTensorInfo(inputs[0]);
38 const TensorInfo& outputInfo = GetTensorInfo(outputs[0]);
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000039
Finn Williamsb8181f72021-04-07 10:23:21 +010040 std::unique_ptr<Decoder<float>> decoderPtr = MakeDecoder<float>(inputInfo, inputs[0]->Map());
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000041 Decoder<float>& decoder = *decoderPtr;
42
Finn Williamsb8181f72021-04-07 10:23:21 +010043 std::unique_ptr<Encoder<float>> encoderPtr = MakeEncoder<float>(outputInfo, outputs[0]->Map());
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000044 Encoder<float>& encoder = *encoderPtr;
45
46 Reduce(inputInfo,
47 outputInfo,
48 decoder,
49 encoder,
50 m_Data.m_Parameters.m_vAxis,
51 m_Data.m_Parameters.m_ReduceOperation);
52}
53
54} //namespace armnn