aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/WorkloadUtils.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/WorkloadUtils.hpp')
-rw-r--r--src/backends/backendsCommon/WorkloadUtils.hpp104
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