diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2018-12-18 09:26:39 +0000 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-01-04 17:28:07 +0000 |
commit | 747ef82c88f9afe14a8b80b6b3b34118353e97f2 (patch) | |
tree | a29ac33b84fb96a41103a0a97327189495374cc9 /src/backends/backendsCommon/WorkloadUtils.hpp | |
parent | 760892724d131c7da4b9baad05cddd49276ad6bb (diff) | |
download | armnn-747ef82c88f9afe14a8b80b6b3b34118353e97f2.tar.gz |
MLCE-77 Depthwise Convolution with depth multiplier > 1 doesn't work
* Unified ArmNN's weight format to [ M, I, H, W ] for the depthwise convolution
* Added conversion utilities to permute/reshape the weights as appropriate
when using CL and Neon backends
* Updated the reference implementation of the convolution
* Updated the relevant unit tests accordingly
!android-nn-driver:459
Change-Id: I07d0818efa9d1ca1e5dad82983aac1fe78eadb18
Diffstat (limited to 'src/backends/backendsCommon/WorkloadUtils.hpp')
-rw-r--r-- | src/backends/backendsCommon/WorkloadUtils.hpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/backends/backendsCommon/WorkloadUtils.hpp b/src/backends/backendsCommon/WorkloadUtils.hpp index 2b07b2b0d2..a1a8d2a475 100644 --- a/src/backends/backendsCommon/WorkloadUtils.hpp +++ b/src/backends/backendsCommon/WorkloadUtils.hpp @@ -6,35 +6,42 @@ #pragma once #include "ITensorHandle.hpp" +#include "CpuTensorHandle.hpp" #include <armnn/Tensor.hpp> +#include <Permute.hpp> +#include <Profiling.hpp> +#include <Half.hpp> + #include <boost/cast.hpp> namespace armnn { namespace { + template<typename ArrayType, typename Arg> void AssignValues(unsigned int num, unsigned int& idx, const ArrayType& array, Arg& arg) { - if (idx >= num) - { - return; - } + if (idx >= num) + { + return; + } - arg = array[(num - 1) - idx]; - idx++; -}; + arg = array[(num - 1) - idx]; + idx++; +} 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, assignee); - AssignValues(num, idx, array, args...); + AssignValues(num, idx, array, args...); } -} // namespace + +} // anonymous namespace template<typename CopyFunc> void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* dstTensor, CopyFunc copy) @@ -142,4 +149,16 @@ void GatherTensorHandlePairs(const DescriptorType& descriptor, } } -} //namespace armnn
\ No newline at end of file +armnn::ConstTensor PermuteTensor(const ConstCpuTensorHandle* tensor, + const PermutationVector& permutationVector, + void* permuteBuffer); + +void ReshapeWeightsForAcl(TensorInfo& weightInfo, DataLayout dataLayout); + +TensorInfo ConvertWeightTensorInfoFromArmnnToAcl(const TensorInfo& weightInfo, DataLayout dataLayout); + +armnn::ConstTensor ConvertWeightTensorFromArmnnToAcl(const ConstCpuTensorHandle* weightTensor, + DataLayout dataLayout, + void* permuteBuffer); + +} //namespace armnn |