// // Copyright © 2020 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include #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(tensorHandle); return sampleTensorHandle->GetTensorInfo(); } const float* GetInputTensorData(unsigned int idx, const AdditionQueueDescriptor& data) { const ITensorHandle* tensorHandle = data.m_Inputs[idx]; return reinterpret_cast(tensorHandle->Map()); } float* GetOutputTensorData(unsigned int idx, const AdditionQueueDescriptor& data) { ITensorHandle* tensorHandle = data.m_Outputs[idx]; return reinterpret_cast(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