2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
5 #include "MemCopyWorkload.hpp"
6 #include "CpuTensorHandle.hpp"
7 #include <TypeUtils.hpp>
10 #include <boost/cast.hpp>
18 template <typename SrcTensorHandleType, typename DstTensorHandleType>
19 void GatherTensorHandlePairs(const MemCopyQueueDescriptor& descriptor,
20 std::vector<std::pair<SrcTensorHandleType*, DstTensorHandleType*>>& tensorHandlePairs)
22 const unsigned int numInputs = static_cast<unsigned int>(descriptor.m_Inputs.size());
23 tensorHandlePairs.reserve(numInputs);
25 for (unsigned int i = 0; i < numInputs; ++i)
27 SrcTensorHandleType* const srcTensorHandle = boost::polymorphic_downcast<SrcTensorHandleType*>(
28 descriptor.m_Inputs[i]);
29 DstTensorHandleType* const dstTensorHandle = boost::polymorphic_downcast<DstTensorHandleType*>(
30 descriptor.m_Outputs[i]);
32 tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);
39 CopyMemGenericWorkload::CopyMemGenericWorkload(const MemCopyQueueDescriptor& descriptor,
40 const WorkloadInfo& info)
41 : BaseWorkload<MemCopyQueueDescriptor>(descriptor, info)
43 GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
46 void CopyMemGenericWorkload::Execute() const
48 ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "CopyMemGeneric_Execute");
50 auto copyFunc = [](void* dst, const void* src, size_t size)
52 memcpy(dst, src, size);
55 for (const auto& pair : m_TensorHandlePairs)
57 CopyTensorContentsGeneric(pair.first, pair.second, copyFunc);