blob: 3e0782aa80a916ba4dae036d33300052e2955b13 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
Matthew Sloyan2d213a72022-06-30 17:13:04 +01002// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00005
Aron Virginas-Tard4f0fea2019-04-09 14:08:06 +01006#include <ResolveType.hpp>
telsoa014fcda012018-03-09 14:13:49 +00007
Colm Donelan0c479742021-12-10 12:43:54 +00008#include "WorkloadUtils.hpp"
9
10#include <armnn/backends/MemCopyWorkload.hpp>
11#include <armnn/backends/TensorHandle.hpp>
Matteo Martincighe5b8eb92019-11-28 15:45:42 +000012
Jan Eilersbb446e52020-04-02 13:56:54 +010013#include <armnn/utility/PolymorphicDowncast.hpp>
telsoa014fcda012018-03-09 14:13:49 +000014
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000015#include <cstring>
16
telsoa014fcda012018-03-09 14:13:49 +000017namespace armnn
18{
19
20namespace
21{
22
23template <typename SrcTensorHandleType, typename DstTensorHandleType>
24void GatherTensorHandlePairs(const MemCopyQueueDescriptor& descriptor,
25 std::vector<std::pair<SrcTensorHandleType*, DstTensorHandleType*>>& tensorHandlePairs)
26{
telsoa01c577f2c2018-08-31 09:22:23 +010027 const unsigned int numInputs = static_cast<unsigned int>(descriptor.m_Inputs.size());
telsoa014fcda012018-03-09 14:13:49 +000028 tensorHandlePairs.reserve(numInputs);
29
30 for (unsigned int i = 0; i < numInputs; ++i)
31 {
Jan Eilersbb446e52020-04-02 13:56:54 +010032 SrcTensorHandleType* const srcTensorHandle = PolymorphicDowncast<SrcTensorHandleType*>(
telsoa014fcda012018-03-09 14:13:49 +000033 descriptor.m_Inputs[i]);
Jan Eilersbb446e52020-04-02 13:56:54 +010034 DstTensorHandleType* const dstTensorHandle = PolymorphicDowncast<DstTensorHandleType*>(
telsoa014fcda012018-03-09 14:13:49 +000035 descriptor.m_Outputs[i]);
36
37 tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);
38 }
39}
40
telsoa01c577f2c2018-08-31 09:22:23 +010041} //namespace
telsoa014fcda012018-03-09 14:13:49 +000042
telsoa014fcda012018-03-09 14:13:49 +000043
telsoa01c577f2c2018-08-31 09:22:23 +010044CopyMemGenericWorkload::CopyMemGenericWorkload(const MemCopyQueueDescriptor& descriptor,
Mike Kelly386ff1a2021-03-29 15:04:50 +010045 const WorkloadInfo& info)
telsoa01c577f2c2018-08-31 09:22:23 +010046 : BaseWorkload<MemCopyQueueDescriptor>(descriptor, info)
telsoa014fcda012018-03-09 14:13:49 +000047{
48 GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
49}
50
telsoa01c577f2c2018-08-31 09:22:23 +010051void CopyMemGenericWorkload::Execute() const
telsoa014fcda012018-03-09 14:13:49 +000052{
telsoa01c577f2c2018-08-31 09:22:23 +010053 ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "CopyMemGeneric_Execute");
54
55 auto copyFunc = [](void* dst, const void* src, size_t size)
56 {
57 memcpy(dst, src, size);
58 };
telsoa014fcda012018-03-09 14:13:49 +000059
60 for (const auto& pair : m_TensorHandlePairs)
61 {
telsoa01c577f2c2018-08-31 09:22:23 +010062 CopyTensorContentsGeneric(pair.first, pair.second, copyFunc);
telsoa014fcda012018-03-09 14:13:49 +000063 }
64}
65
Matthew Sloyan2d213a72022-06-30 17:13:04 +010066void CopyMemGenericWorkload::ExecuteAsync(ExecutionData& executionData)
Mike Kelly386ff1a2021-03-29 15:04:50 +010067{
68 ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "CopyMemGeneric_Execute_WorkingMemDescriptor");
Matthew Sloyan2d213a72022-06-30 17:13:04 +010069
70 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
Mike Kelly386ff1a2021-03-29 15:04:50 +010071 std::vector<TensorHandlePair> tensorHandlePairs;
Matthew Sloyan2d213a72022-06-30 17:13:04 +010072
73 GatherTensorHandlePairs(*workingMemDescriptor, tensorHandlePairs);
Mike Kelly386ff1a2021-03-29 15:04:50 +010074
75 auto copyFunc = [](void* dst, const void* src, size_t size)
76 {
77 memcpy(dst, src, size);
78 };
79
80 for (const auto& pair : tensorHandlePairs)
81 {
82 CopyTensorContentsGeneric(pair.first, pair.second, copyFunc);
83 }
84}
85
telsoa01c577f2c2018-08-31 09:22:23 +010086} //namespace armnn