ArmNN
 21.02
MemCopyWorkload.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <ResolveType.hpp>
7 
10 
12 
13 #include <cstring>
14 
15 namespace armnn
16 {
17 
18 namespace
19 {
20 
21 template <typename SrcTensorHandleType, typename DstTensorHandleType>
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 
43  const WorkloadInfo& info)
44  : BaseWorkload<MemCopyQueueDescriptor>(descriptor, info)
45 {
46  GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
47 }
48 
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
CopyMemGenericWorkload(const MemCopyQueueDescriptor &descriptor, const WorkloadInfo &info)
Copyright (c) 2021 ARM Limited and Contributors.
#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)
Definition: Profiling.hpp:173
void Execute() const override
Contains information about inputs and outputs to a layer.
void CopyTensorContentsGeneric(const ITensorHandle *srcTensor, ITensorHandle *dstTensor, CopyFunc copy)
void GatherTensorHandlePairs(const DescriptorType &descriptor, std::vector< std::pair< SrcTensorHandleType *, DstTensorHandleType *>> &tensorHandlePairs)