From c577f2c6a3b4ddb6ba87a882723c53a248afbeba Mon Sep 17 00:00:00 2001 From: telsoa01 Date: Fri, 31 Aug 2018 09:22:23 +0100 Subject: Release 18.08 --- src/armnn/backends/MemCopyWorkload.cpp | 223 +++------------------------------ 1 file changed, 14 insertions(+), 209 deletions(-) (limited to 'src/armnn/backends/MemCopyWorkload.cpp') diff --git a/src/armnn/backends/MemCopyWorkload.cpp b/src/armnn/backends/MemCopyWorkload.cpp index 09ffd9a08a..27e60f93b7 100644 --- a/src/armnn/backends/MemCopyWorkload.cpp +++ b/src/armnn/backends/MemCopyWorkload.cpp @@ -4,14 +4,7 @@ // #include "MemCopyWorkload.hpp" #include "backends/CpuTensorHandle.hpp" - -#if ARMCOMPUTECL_ENABLED -#include "backends/ClTensorHandle.hpp" -#endif - -#if ARMCOMPUTENEON_ENABLED -#include "backends/NeonTensorHandle.hpp" -#endif +#include "TypeUtils.hpp" #include #include @@ -26,7 +19,7 @@ template void GatherTensorHandlePairs(const MemCopyQueueDescriptor& descriptor, std::vector>& tensorHandlePairs) { - const unsigned int numInputs = boost::numeric_cast(descriptor.m_Inputs.size()); + const unsigned int numInputs = static_cast(descriptor.m_Inputs.size()); tensorHandlePairs.reserve(numInputs); for (unsigned int i = 0; i < numInputs; ++i) @@ -40,217 +33,29 @@ void GatherTensorHandlePairs(const MemCopyQueueDescriptor& descriptor, } } -void CopyFromCpuToCpu(const ConstCpuTensorHandle& srcHandle, CpuTensorHandle& dstHandle) -{ - const unsigned int numBytes = srcHandle.GetTensorInfo().GetNumBytes(); - const void* const input = srcHandle.GetConstTensor(); - void* const output = dstHandle.GetTensor(); - std::memcpy(output, input, numBytes); -} - -#if ARMCOMPUTECL_ENABLED || ARMCOMPUTENEON_ENABLED - -#include "backends/ArmComputeTensorUtils.hpp" - -template -void CopyFromCpuToAclBackend(const ConstCpuTensorHandle& srcHandle, arm_compute::ITensor& dstAclTensor) -{ - using T = ResolveType; - armnn::armcomputetensorutils::CopyArmComputeITensorData(srcHandle.GetConstTensor(), dstAclTensor); -} - -template -void CopyFromAclBackendToCpu(const arm_compute::ITensor& srcAclTensor, CpuTensorHandle& dstHandle) -{ - using T = ResolveType; - armnn::armcomputetensorutils::CopyArmComputeITensorData(srcAclTensor, dstHandle.GetTensor()); -} - -#endif // ARMCOMPUTECL_ENABLED || ARMCOMPUTENEON_ENABLED - -} - -template -CopyFromCpuToCpuWorkload::CopyFromCpuToCpuWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromCpuToCpuWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "CopyFromCpuToCpuWorkload_Execute"); - - for (const auto& pair : m_TensorHandlePairs) - { - CopyFromCpuToCpu(*pair.first, *pair.second); - } -} - -template class CopyFromCpuToCpuWorkload; -template class CopyFromCpuToCpuWorkload; - -#if ARMCOMPUTECL_ENABLED - -template -CopyFromCpuToClWorkload::CopyFromCpuToClWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromCpuToClWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::GpuAcc, "CopyFromCpuToClWorkload_Execute"); - - for (const auto& pair : m_TensorHandlePairs) - { - IClTensorHandle& handle = *pair.second; - - handle.Map(true); - CopyFromCpuToAclBackend(*pair.first, handle.GetTensor()); - handle.UnMap(); - } -} - -template class CopyFromCpuToClWorkload; -template class CopyFromCpuToClWorkload; - - -template -CopyFromClToCpuWorkload::CopyFromClToCpuWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromClToCpuWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::GpuAcc, "CopyFromClToCpuWorkload_Execute"); - - for (const auto& pair : m_TensorHandlePairs) - { - IClTensorHandle& handle = *pair.first; - - handle.Map(true); - CopyFromAclBackendToCpu(handle.GetTensor(), *pair.second); - handle.UnMap(); - } -} - -template class CopyFromClToCpuWorkload; -template class CopyFromClToCpuWorkload; - -#endif // ARMCOMPUTECL_ENABLED +} //namespace -#if ARMCOMPUTENEON_ENABLED -template -CopyFromCpuToNeonWorkload::CopyFromCpuToNeonWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) +CopyMemGenericWorkload::CopyMemGenericWorkload(const MemCopyQueueDescriptor& descriptor, + const WorkloadInfo& info) + : BaseWorkload(descriptor, info) { GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); } -template -void CopyFromCpuToNeonWorkload::Execute() const +void CopyMemGenericWorkload::Execute() const { - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuAcc, "CopyFromCpuToNeonWorkload_Execute"); + ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "CopyMemGeneric_Execute"); - for (const auto& pair : m_TensorHandlePairs) - { - CopyFromCpuToAclBackend(*pair.first, pair.second->GetTensor()); - } -} - -template class CopyFromCpuToNeonWorkload; -template class CopyFromCpuToNeonWorkload; - -template -CopyFromNeonToCpuWorkload::CopyFromNeonToCpuWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromNeonToCpuWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuAcc, "CopyFromNeonToCpuWorkload_Execute"); + auto copyFunc = [](void* dst, const void* src, size_t size) + { + memcpy(dst, src, size); + }; for (const auto& pair : m_TensorHandlePairs) { - CopyFromAclBackendToCpu(pair.first->GetTensor(), *pair.second); + CopyTensorContentsGeneric(pair.first, pair.second, copyFunc); } } -template class CopyFromNeonToCpuWorkload; -template class CopyFromNeonToCpuWorkload; - -#endif // ARMCOMPUTENEON_ENABLED - -#if ARMCOMPUTECL_ENABLED && ARMCOMPUTENEON_ENABLED - -template -CopyFromNeonToClWorkload::CopyFromNeonToClWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromNeonToClWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::GpuAcc, "CopyFromNeonToClWorkload_Execute"); - - for (const auto& pair : m_TensorHandlePairs) - { - IClTensorHandle& handle = *pair.second; - - handle.Map(true); - handle.GetTensor().copy_from(pair.first->GetTensor()); - handle.UnMap(); - } -} - -template class CopyFromNeonToClWorkload; -template class CopyFromNeonToClWorkload; - -template -CopyFromClToNeonWorkload::CopyFromClToNeonWorkload(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) - : TypedWorkload(descriptor, info) -{ - GatherTensorHandlePairs(descriptor, m_TensorHandlePairs); -} - -template -void CopyFromClToNeonWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::GpuAcc, "CopyFromClToNeonWorkload_Execute"); - - for (const auto& pair : m_TensorHandlePairs) - { - IClTensorHandle& handle = *pair.first; - - handle.Map(true); - pair.second->GetTensor().copy_from(handle.GetTensor()); - handle.UnMap(); - } -} - -template class CopyFromClToNeonWorkload; -template class CopyFromClToNeonWorkload; - -#endif // ARMCOMPUTECL_ENABLED && ARMCOMPUTENEON_ENABLED - -} +} //namespace armnn -- cgit v1.2.1