xref: /aosp_15_r20/external/armnn/src/dynamic/sample/SampleDynamicAdditionWorkload.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <armnn/backends/ITensorHandle.hpp>
7 
8 #include "SampleDynamicAdditionWorkload.hpp"
9 #include "SampleTensorHandle.hpp"
10 
11 namespace sdb // sample dynamic backend
12 {
13 
GetTensorInfo(const armnn::ITensorHandle * tensorHandle)14 inline const armnn::TensorInfo& GetTensorInfo(const armnn::ITensorHandle* tensorHandle)
15 {
16     // We know that reference workloads use RefTensorHandles for inputs and outputs
17     const SampleTensorHandle* sampleTensorHandle =
18         static_cast<const SampleTensorHandle*>(tensorHandle);
19     return sampleTensorHandle->GetTensorInfo();
20 }
21 
GetInputTensorData(unsigned int idx,const armnn::AdditionQueueDescriptor & data)22 const float* GetInputTensorData(unsigned int idx, const armnn::AdditionQueueDescriptor& data)
23 {
24     const armnn::ITensorHandle* tensorHandle = data.m_Inputs[idx];
25     return reinterpret_cast<const float*>(tensorHandle->Map());
26 }
27 
GetOutputTensorData(unsigned int idx,const armnn::AdditionQueueDescriptor & data)28 float* GetOutputTensorData(unsigned int idx, const armnn::AdditionQueueDescriptor& data)
29 {
30     armnn::ITensorHandle* tensorHandle = data.m_Outputs[idx];
31     return reinterpret_cast<float*>(tensorHandle->Map());
32 }
33 
SampleDynamicAdditionWorkload(const armnn::AdditionQueueDescriptor & descriptor,const armnn::WorkloadInfo & info)34 SampleDynamicAdditionWorkload::SampleDynamicAdditionWorkload(const armnn::AdditionQueueDescriptor& descriptor,
35                                                              const armnn::WorkloadInfo& info)
36     : BaseWorkload(descriptor, info)
37 {}
38 
Execute() const39 void SampleDynamicAdditionWorkload::Execute() const
40 {
41     const armnn::TensorInfo& info = GetTensorInfo(m_Data.m_Inputs[0]);
42     unsigned int num = info.GetNumElements();
43 
44     const float* inputData0 = GetInputTensorData(0, m_Data);
45     const float* inputData1 = GetInputTensorData(1, m_Data);
46     float* outputData       = GetOutputTensorData(0, m_Data);
47 
48     for (unsigned int i = 0; i < num; ++i)
49     {
50         outputData[i] = inputData0[i] + inputData1[i];
51     }
52 }
53 
54 } // namespace sdb // sample dynamic backend
55