diff options
Diffstat (limited to 'src/backends/backendsCommon/WorkloadUtils.hpp')
-rw-r--r-- | src/backends/backendsCommon/WorkloadUtils.hpp | 104 |
1 files changed, 56 insertions, 48 deletions
diff --git a/src/backends/backendsCommon/WorkloadUtils.hpp b/src/backends/backendsCommon/WorkloadUtils.hpp index 7e3ac395e4..ba69255183 100644 --- a/src/backends/backendsCommon/WorkloadUtils.hpp +++ b/src/backends/backendsCommon/WorkloadUtils.hpp @@ -5,14 +5,14 @@ #pragma once -#include "ITensorHandle.hpp" #include "CpuTensorHandle.hpp" +#include "ITensorHandle.hpp" #include <armnn/Tensor.hpp> +#include <Half.hpp> #include <Permute.hpp> #include <Profiling.hpp> -#include <Half.hpp> #include <boost/cast.hpp> @@ -21,7 +21,7 @@ namespace armnn namespace { -template<typename ArrayType, typename Arg> +template <typename ArrayType, typename Arg> void AssignValues(unsigned int num, unsigned int& idx, const ArrayType& array, Arg& arg) { if (idx >= num) @@ -33,68 +33,76 @@ void AssignValues(unsigned int num, unsigned int& idx, const ArrayType& array, A idx++; } -template<typename T, typename ArrayType, typename ...Args> -void AssignValues(unsigned int num, unsigned int idx, const ArrayType& array, T& assignee, Args& ... args) +template <typename T, typename ArrayType, typename... Args> +void AssignValues(unsigned int num, unsigned int idx, const ArrayType& array, T& assignee, Args&... args) { AssignValues(num, idx, array, assignee); AssignValues(num, idx, array, args...); } -} // anonymous namespace +} // anonymous namespace -template<typename CopyFunc> +template <typename CopyFunc> void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* dstTensor, CopyFunc copy) { static_assert(MaxNumOfTensorDimensions == 5, "Please update CopyTensorContents"); - TensorShape srcStrides = srcTensor->GetStrides(); + TensorShape srcStrides = srcTensor->GetStrides(); const TensorShape& srcShape = srcTensor->GetShape(); - TensorShape dstStrides = dstTensor->GetStrides(); + TensorShape dstStrides = dstTensor->GetStrides(); const TensorShape& dstShape = dstTensor->GetShape(); - size_t srcDepth = 1; - size_t srcBatches = 1; + size_t srcDepth = 1; + size_t srcBatches = 1; size_t srcChannels = 1; - size_t srcHeight = 1; - size_t srcWidth = 1; - AssignValues(srcShape.GetNumDimensions(),0, srcShape, + size_t srcHeight = 1; + size_t srcWidth = 1; + AssignValues(srcShape.GetNumDimensions(), + 0, + srcShape, srcWidth, srcHeight, srcChannels, srcBatches, srcDepth); - size_t srcDepthStride = 0; - size_t srcBatchStride = 0; + size_t srcDepthStride = 0; + size_t srcBatchStride = 0; size_t srcChannelStride = 0; - size_t srcHeightStride = 0; - size_t srcWidthStride = 0; - AssignValues(srcStrides.GetNumDimensions(),0, srcStrides, + size_t srcHeightStride = 0; + size_t srcWidthStride = 0; + AssignValues(srcStrides.GetNumDimensions(), + 0, + srcStrides, srcWidthStride, srcHeightStride, srcChannelStride, srcBatchStride, srcDepthStride); - size_t dstDepth = 1; - size_t dstBatches = 1; + size_t dstDepth = 1; + size_t dstBatches = 1; size_t dstChannels = 1; - size_t dstHeight = 1; - size_t dstWidth = 1; - AssignValues(dstShape.GetNumDimensions(),0, dstShape, + size_t dstHeight = 1; + size_t dstWidth = 1; + AssignValues(dstShape.GetNumDimensions(), + 0, + dstShape, dstWidth, dstHeight, dstChannels, dstBatches, dstDepth); - size_t dstDepthStride = 0; - size_t dstBatchStride = 0; + size_t dstDepthStride = 0; + size_t dstBatchStride = 0; size_t dstChannelStride = 0; - size_t dstHeightStride = 0; - size_t dstWidthStride = 0; - AssignValues(dstStrides.GetNumDimensions(),0, dstStrides, + size_t dstHeightStride = 0; + size_t dstWidthStride = 0; + AssignValues(dstStrides.GetNumDimensions(), + 0, + dstStrides, dstWidthStride, dstHeightStride, dstChannelStride, @@ -105,29 +113,29 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds unsigned char* dstData; { ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Synchronize buffers"); - srcData = static_cast<const uint8_t *>(srcTensor->Map()); - dstData = static_cast<uint8_t *>(dstTensor->Map()); + srcData = static_cast<const uint8_t*>(srcTensor->Map()); + dstData = static_cast<uint8_t*>(dstTensor->Map()); } - size_t copyLength = std::min(srcWidth*srcWidthStride, dstWidth*dstWidthStride); - size_t copyHeight = std::min(srcHeight, dstHeight); + size_t copyLength = std::min(srcWidth * srcWidthStride, dstWidth * dstWidthStride); + size_t copyHeight = std::min(srcHeight, dstHeight); size_t copyChannels = std::min(srcChannels, dstChannels); - size_t copyBatches = std::min(srcBatches, dstBatches); - size_t copyDepth = std::min(srcDepth, dstDepth); + size_t copyBatches = std::min(srcBatches, dstBatches); + size_t copyDepth = std::min(srcDepth, dstDepth); - for (unsigned int d=0; d < copyDepth; ++d) + for (unsigned int d = 0; d < copyDepth; ++d) { auto srcPtrDepth = srcData; auto dstPtrDepth = dstData; - for (unsigned int b=0; b < copyBatches; ++b) + for (unsigned int b = 0; b < copyBatches; ++b) { auto srcPtrBatch = srcData; auto dstPtrBatch = dstData; - for (unsigned int c=0; c< copyChannels; ++c) + for (unsigned int c = 0; c < copyChannels; ++c) { auto srcPtrChannel = srcData; auto dstPtrChannel = dstData; - for (unsigned int h=0; h < copyHeight; ++h) + for (unsigned int h = 0; h < copyHeight; ++h) { copy(dstData, srcData, copyLength); dstData += dstHeightStride; @@ -136,11 +144,11 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds dstData += (static_cast<long>(dstChannelStride) - (dstData - dstPtrChannel)); srcData += (static_cast<long>(srcChannelStride) - (srcData - srcPtrChannel)); } - dstData += (static_cast<long>(dstBatchStride)-(dstData - dstPtrBatch)); - srcData += (static_cast<long>(srcBatchStride)-(srcData - srcPtrBatch)); + dstData += (static_cast<long>(dstBatchStride) - (dstData - dstPtrBatch)); + srcData += (static_cast<long>(srcBatchStride) - (srcData - srcPtrBatch)); } - dstData += (static_cast<long>(dstDepthStride)-(dstData - dstPtrDepth)); - srcData += (static_cast<long>(srcDepthStride)-(srcData - srcPtrDepth)); + dstData += (static_cast<long>(dstDepthStride) - (dstData - dstPtrDepth)); + srcData += (static_cast<long>(srcDepthStride) - (srcData - srcPtrDepth)); } srcTensor->Unmap(); @@ -156,10 +164,10 @@ void GatherTensorHandlePairs(const DescriptorType& descriptor, for (unsigned int i = 0; i < numInputs; ++i) { - SrcTensorHandleType* const srcTensorHandle = boost::polymorphic_downcast<SrcTensorHandleType*>( - descriptor.m_Inputs[i]); - DstTensorHandleType* const dstTensorHandle = boost::polymorphic_downcast<DstTensorHandleType*>( - descriptor.m_Outputs[i]); + SrcTensorHandleType* const srcTensorHandle = + boost::polymorphic_downcast<SrcTensorHandleType*>(descriptor.m_Inputs[i]); + DstTensorHandleType* const dstTensorHandle = + boost::polymorphic_downcast<DstTensorHandleType*>(descriptor.m_Outputs[i]); tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle); } @@ -177,4 +185,4 @@ armnn::ConstTensor ConvertWeightTensorFromArmnnToAcl(const ConstCpuTensorHandle* DataLayout dataLayout, void* permuteBuffer); -} //namespace armnn +} //namespace armnn |