• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <ResolveType.hpp>
7 
8 #include <backendsCommon/MemCopyWorkload.hpp>
9 #include <backendsCommon/CpuTensorHandle.hpp>
10 
11 #include <armnn/utility/PolymorphicDowncast.hpp>
12 
13 #include <cstring>
14 
15 namespace armnn
16 {
17 
18 namespace
19 {
20 
21 template <typename SrcTensorHandleType, typename DstTensorHandleType>
GatherTensorHandlePairs(const MemCopyQueueDescriptor & descriptor,std::vector<std::pair<SrcTensorHandleType *,DstTensorHandleType * >> & tensorHandlePairs)22 void GatherTensorHandlePairs(const MemCopyQueueDescriptor& descriptor,
23                              std::vector<std::pair<SrcTensorHandleType*, DstTensorHandleType*>>& tensorHandlePairs)
24 {
25     const unsigned int numInputs = static_cast<unsigned int>(descriptor.m_Inputs.size());
26     tensorHandlePairs.reserve(numInputs);
27 
28     for (unsigned int i = 0; i < numInputs; ++i)
29     {
30         SrcTensorHandleType* const srcTensorHandle = PolymorphicDowncast<SrcTensorHandleType*>(
31             descriptor.m_Inputs[i]);
32         DstTensorHandleType* const dstTensorHandle = PolymorphicDowncast<DstTensorHandleType*>(
33             descriptor.m_Outputs[i]);
34 
35         tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);
36     }
37 }
38 
39 } //namespace
40 
41 
CopyMemGenericWorkload(const MemCopyQueueDescriptor & descriptor,const WorkloadInfo & info)42 CopyMemGenericWorkload::CopyMemGenericWorkload(const MemCopyQueueDescriptor& descriptor,
43                                                          const WorkloadInfo& info)
44     : BaseWorkload<MemCopyQueueDescriptor>(descriptor, info)
45 {
46     GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
47 }
48 
Execute() const49 void CopyMemGenericWorkload::Execute() const
50 {
51     ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "CopyMemGeneric_Execute");
52 
53     auto copyFunc = [](void* dst, const void* src, size_t size)
54         {
55             memcpy(dst, src, size);
56         };
57 
58     for (const auto& pair : m_TensorHandlePairs)
59     {
60         CopyTensorContentsGeneric(pair.first, pair.second, copyFunc);
61     }
62 }
63 
64 } //namespace armnn
65