diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2020-02-03 12:29:56 +0000 |
---|---|---|
committer | Jim Flynn <jim.flynn@arm.com> | 2020-02-03 16:36:55 +0000 |
commit | 867eba59ffd2276086a14f7b2632b390c94392d3 (patch) | |
tree | d7626f933f2a72e8c398c0f43c71b4950e980a09 /src/dynamic/sample/SampleDynamicAdditionWorkload.cpp | |
parent | 9d0ff74843b9d36d9f233d208e18a96de1b7d47b (diff) | |
download | armnn-867eba59ffd2276086a14f7b2632b390c94392d3.tar.gz |
IVGCVSW-4399 Create Sample Dynamic backend
* Move IWorkload and WorkloadInfo to include/armnn/backends
* Add simple sample dynamic backend with addition workload
* Add sample example to run dynamic backend
* Unit tests
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I0753ce35b8e8a6223a1471388b49246d82438a44
Diffstat (limited to 'src/dynamic/sample/SampleDynamicAdditionWorkload.cpp')
-rw-r--r-- | src/dynamic/sample/SampleDynamicAdditionWorkload.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/dynamic/sample/SampleDynamicAdditionWorkload.cpp b/src/dynamic/sample/SampleDynamicAdditionWorkload.cpp new file mode 100644 index 0000000000..0fa57a7e07 --- /dev/null +++ b/src/dynamic/sample/SampleDynamicAdditionWorkload.cpp @@ -0,0 +1,54 @@ +// +// 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 |