blob: e7d05cadd0be5c426e2c7565c1a0b773a04bb785 [file] [log] [blame]
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +00001//
Matthew Sloyan2d213a72022-06-30 17:13:04 +01002// Copyright © 2022 Samsung Electronics Co Ltd and Contributors. All rights reserved.
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "RefReduceWorkload.hpp"
7
8#include "Reduce.hpp"
9#include "RefWorkloadUtils.hpp"
10#include "BaseIterator.hpp"
11#include "Profiling.hpp"
12
13namespace armnn
14{
15
16RefReduceWorkload::RefReduceWorkload(
17 const ReduceQueueDescriptor& descriptor,
18 const WorkloadInfo& info)
Finn Williams73c547d2022-02-15 20:47:34 +000019 : RefBaseWorkload<ReduceQueueDescriptor>(descriptor, info) {}
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000020
21void RefReduceWorkload::Execute() const
22{
Finn Williamsb8181f72021-04-07 10:23:21 +010023 Execute(m_Data.m_Inputs, m_Data.m_Outputs);
24}
25
Matthew Sloyan2d213a72022-06-30 17:13:04 +010026void RefReduceWorkload::ExecuteAsync(ExecutionData& executionData)
Finn Williamsb8181f72021-04-07 10:23:21 +010027{
Matthew Sloyan2d213a72022-06-30 17:13:04 +010028 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
29 Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
Finn Williamsb8181f72021-04-07 10:23:21 +010030}
31
32void RefReduceWorkload::Execute(std::vector<ITensorHandle*> inputs, std::vector<ITensorHandle*> outputs) const
33{
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000034 ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefReduceWorkload_Execute");
35
Finn Williamsb8181f72021-04-07 10:23:21 +010036 const TensorInfo& inputInfo = GetTensorInfo(inputs[0]);
37 const TensorInfo& outputInfo = GetTensorInfo(outputs[0]);
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000038
Finn Williamsb8181f72021-04-07 10:23:21 +010039 std::unique_ptr<Decoder<float>> decoderPtr = MakeDecoder<float>(inputInfo, inputs[0]->Map());
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000040 Decoder<float>& decoder = *decoderPtr;
41
Finn Williamsb8181f72021-04-07 10:23:21 +010042 std::unique_ptr<Encoder<float>> encoderPtr = MakeEncoder<float>(outputInfo, outputs[0]->Map());
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +000043 Encoder<float>& encoder = *encoderPtr;
44
45 Reduce(inputInfo,
46 outputInfo,
47 decoder,
48 encoder,
49 m_Data.m_Parameters.m_vAxis,
50 m_Data.m_Parameters.m_ReduceOperation);
51}
52
53} //namespace armnn