| // |
| // Copyright © 2020 Arm Ltd. All rights reserved. |
| // SPDX-License-Identifier: MIT |
| // |
| |
| #include <armnn/backends/ITensorHandle.hpp> |
| |
| #include "SampleDynamicAdditionWorkload.hpp" |
| #include "SampleTensorHandle.hpp" |
| |
| namespace armnn |
| { |
| |
| inline const TensorInfo& GetTensorInfo(const ITensorHandle* tensorHandle) |
| { |
| // We know that reference workloads use RefTensorHandles for inputs and outputs |
| const SampleTensorHandle* sampleTensorHandle = |
| static_cast<const SampleTensorHandle*>(tensorHandle); |
| return sampleTensorHandle->GetTensorInfo(); |
| } |
| |
| const float* GetInputTensorData(unsigned int idx, const AdditionQueueDescriptor& data) |
| { |
| const ITensorHandle* tensorHandle = data.m_Inputs[idx]; |
| return reinterpret_cast<const float*>(tensorHandle->Map()); |
| } |
| |
| float* GetOutputTensorData(unsigned int idx, const AdditionQueueDescriptor& data) |
| { |
| ITensorHandle* tensorHandle = data.m_Outputs[idx]; |
| return reinterpret_cast<float*>(tensorHandle->Map()); |
| } |
| |
| SampleDynamicAdditionWorkload::SampleDynamicAdditionWorkload(const AdditionQueueDescriptor& descriptor, |
| const WorkloadInfo& info) |
| : BaseWorkload(descriptor, info) |
| {} |
| |
| void SampleDynamicAdditionWorkload::Execute() const |
| { |
| const TensorInfo& info = GetTensorInfo(m_Data.m_Inputs[0]); |
| unsigned int num = info.GetNumElements(); |
| |
| const float* inputData0 = GetInputTensorData(0, m_Data); |
| const float* inputData1 = GetInputTensorData(1, m_Data); |
| float* outputData = GetOutputTensorData(0, m_Data); |
| |
| for (unsigned int i = 0; i < num; ++i) |
| { |
| outputData[i] = inputData0[i] + inputData1[i]; |
| } |
| } |
| |
| } // namespace armnn |