diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-05-17 12:15:30 +0100 |
---|---|---|
committer | Derek Lamberti <derek.lamberti@arm.com> | 2019-05-20 15:34:20 +0000 |
commit | f02e6cd728a0bceea221120ec039a4b66436d51d (patch) | |
tree | 962189ebf8b48c0bb74518aba0f5dbaefa58861a /src/backends/backendsCommon/test/CommonTestUtils.hpp | |
parent | 4ed6c83a82948314abffdaa17e96c39ac82f89e4 (diff) | |
download | armnn-f02e6cd728a0bceea221120ec039a4b66436d51d.tar.gz |
IVGCVSW-3030 Add unit testing for the Optimization API
* Added OptimizeSubgraphViewTests file covering a number of
use cases for the Optimization API
* Fixed a bug in the sub-graph selector algorithm that skipped the
first layer in a sub-graph if it wasn't an input layer
* Changed the graph splitting logic to make use of maps instead of
unordered_maps to keep the split sub-graphs in consistent order
between executions
* Added more common unit test utils
* Minor fixes to comply to the include file conventions
Change-Id: Iad464eaedd004109e5ef41aa487cea3ad86177d3
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/backends/backendsCommon/test/CommonTestUtils.hpp')
-rw-r--r-- | src/backends/backendsCommon/test/CommonTestUtils.hpp | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/src/backends/backendsCommon/test/CommonTestUtils.hpp b/src/backends/backendsCommon/test/CommonTestUtils.hpp index 68180fb289..5da0228842 100644 --- a/src/backends/backendsCommon/test/CommonTestUtils.hpp +++ b/src/backends/backendsCommon/test/CommonTestUtils.hpp @@ -2,21 +2,71 @@ // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // + #pragma once #include <Graph.hpp> +#include <SubgraphView.hpp> +#include <SubgraphViewSelector.hpp> + +#include <backendsCommon/CpuTensorHandle.hpp> +#include <backendsCommon/BackendRegistry.hpp> -using namespace armnn; +#include <algorithm> -namespace +// Connects two layers +void Connect(armnn::IConnectableLayer* from, armnn::IConnectableLayer* to, const armnn::TensorInfo& tensorInfo, + unsigned int fromIndex = 0, unsigned int toIndex = 0); + +// Checks that two collections have the exact same contents (in any order) +// The given collections do not have to contain duplicates +// Cannot use std::sort here because std lists have their own std::list::sort method +template <typename CollectionType> +bool AreEqual(const CollectionType& lhs, const CollectionType& rhs) { + if (lhs.size() != rhs.size()) + { + return false; + } + + auto lhs_it = std::find_if(lhs.begin(), lhs.end(), [&rhs](auto& item) + { + return std::find(rhs.begin(), rhs.end(), item) == rhs.end(); + }); -// Connects two layers. -void Connect(IConnectableLayer* from, IConnectableLayer* to, const TensorInfo& tensorInfo, - unsigned int fromIndex = 0, unsigned int toIndex = 0) + return lhs_it == lhs.end(); +} + +// Checks that the given collection contains the specified item +template <typename CollectionType> +bool Contains(const CollectionType& collection, const typename CollectionType::value_type& item) { - from->GetOutputSlot(fromIndex).Connect(to->GetInputSlot(toIndex)); - from->GetOutputSlot(fromIndex).SetTensorInfo(tensorInfo); + return std::find(collection.begin(), collection.end(), item) != collection.end(); } +// Checks that the given map contains the specified key +template <typename MapType> +bool Contains(const MapType& map, const typename MapType::key_type& key) +{ + return map.find(key) != map.end(); } + +template <typename ConvolutionLayer> +void SetWeightAndBias(ConvolutionLayer* layer, const armnn::TensorInfo& weightInfo, const armnn::TensorInfo& biasInfo) +{ + layer->m_Weight = std::make_unique<armnn::ScopedCpuTensorHandle>(weightInfo); + layer->m_Bias = std::make_unique<armnn::ScopedCpuTensorHandle>(biasInfo); + + layer->m_Weight->Allocate(); + layer->m_Bias->Allocate(); +} + +armnn::SubgraphView::InputSlots CreateInputsFrom(const std::vector<armnn::Layer*>& layers); + +armnn::SubgraphView::OutputSlots CreateOutputsFrom(const std::vector<armnn::Layer*>& layers); + +armnn::SubgraphView::SubgraphViewPtr CreateSubgraphViewFrom(armnn::SubgraphView::InputSlots&& inputs, + armnn::SubgraphView::OutputSlots&& outputs, + armnn::SubgraphView::Layers&& layers); + +armnn::IBackendInternalUniquePtr CreateBackendObject(const armnn::BackendId& backendId); |