diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-06-06 15:46:22 +0100 |
---|---|---|
committer | Teresa Charlin <teresa.charlinreyes@arm.com> | 2019-06-07 07:54:51 +0000 |
commit | f2aaab3a06024b5d5c538cc42799fb2c91b4ca2b (patch) | |
tree | dd83c6927fbc53ab2b235ea85de6ddb3a893f92d /src/armnnUtils/DataLayoutIndexed.cpp | |
parent | 99a663140294afd2a4ea91ccc61b7266f735b46a (diff) | |
download | armnn-f2aaab3a06024b5d5c538cc42799fb2c91b4ca2b.tar.gz |
IVGCVSW-3223 Fix ref convolution performance regression
* Do not use DataLayoutIndexed::GetIndex for weights and inputs,
as it causes a large regression in performance
* It turned out that the calculation of the indexes for the weights
and inputs was the way it was because of an optimization done
many months ago
* Reverted the relevant hunks and added some comments so
we won't make the same mistake again in the future
* Made the GetIndex function inline to speed up other usages
Change-Id: I343b2ef0446993086f58b9dea1f0de0ba2d92216
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/armnnUtils/DataLayoutIndexed.cpp')
-rw-r--r-- | src/armnnUtils/DataLayoutIndexed.cpp | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/src/armnnUtils/DataLayoutIndexed.cpp b/src/armnnUtils/DataLayoutIndexed.cpp index b02f07ec85..02f1e816ac 100644 --- a/src/armnnUtils/DataLayoutIndexed.cpp +++ b/src/armnnUtils/DataLayoutIndexed.cpp @@ -4,9 +4,6 @@ // #include "DataLayoutIndexed.hpp" - -#include <boost/assert.hpp> - using namespace armnn; namespace armnnUtils @@ -33,40 +30,6 @@ DataLayoutIndexed::DataLayoutIndexed(armnn::DataLayout dataLayout) } } -unsigned int DataLayoutIndexed::GetIndex(const TensorShape& shape, - unsigned int batchIndex, unsigned int channelIndex, - unsigned int heightIndex, unsigned int widthIndex) const -{ - BOOST_ASSERT( batchIndex < shape[0] || ( shape[0] == 0 && batchIndex == 0 ) ); - BOOST_ASSERT( channelIndex < shape[m_ChannelsIndex] || - ( shape[m_ChannelsIndex] == 0 && channelIndex == 0) ); - BOOST_ASSERT( heightIndex < shape[m_HeightIndex] || - ( shape[m_HeightIndex] == 0 && heightIndex == 0) ); - BOOST_ASSERT( widthIndex < shape[m_WidthIndex] || - ( shape[m_WidthIndex] == 0 && widthIndex == 0) ); - - // Offset the given indices appropriately depending on the data layout - switch (m_DataLayout) - { - case DataLayout::NHWC: - batchIndex *= shape[1] * shape[2] * shape[3]; // batchIndex *= heightIndex * widthIndex * channelIndex - heightIndex *= shape[m_WidthIndex] * shape[m_ChannelsIndex]; - widthIndex *= shape[m_ChannelsIndex]; - // channelIndex stays unchanged - break; - case DataLayout::NCHW: - default: - batchIndex *= shape[1] * shape[2] * shape[3]; // batchIndex *= heightIndex * widthIndex * channelIndex - channelIndex *= shape[m_HeightIndex] * shape[m_WidthIndex]; - heightIndex *= shape[m_WidthIndex]; - // widthIndex stays unchanged - break; - } - - // Get the value using the correct offset - return batchIndex + channelIndex + heightIndex + widthIndex; -} - bool operator==(const DataLayout& dataLayout, const DataLayoutIndexed& indexed) { return dataLayout == indexed.GetDataLayout(); |