diff options
author | Cathal Corbett <cathal.corbett@arm.com> | 2021-12-24 12:24:40 +0000 |
---|---|---|
committer | Cathal Corbett <cathal.corbett@arm.com> | 2022-01-19 12:58:56 +0000 |
commit | 34b429c2215bab7fd12b761dd5c200414c1b4a5b (patch) | |
tree | 7518ec40c8e56dbf229421d47d9527ed7aadd33e /src/backends/backendsCommon/test | |
parent | 479e230479c10dcf9b9a79a3e80f0847d6ae5293 (diff) | |
download | armnn-34b429c2215bab7fd12b761dd5c200414c1b4a5b.tar.gz |
IVGCVSW-6629 Stabilize the ILayerSupport interface with unified strategy.
* New Virtual Function Added.
* Implemented in Ref Neon CL with switch statement for all layers.
* Deprecate original IsXXXLayerSupported functions.
* Ensure Npu not broken with change.
Change-Id: Icf61b16beec83d6af1cb287e24ab1e98a6138c8c
Signed-off-by: Cathal Corbett <cathal.corbett@arm.com>
Diffstat (limited to 'src/backends/backendsCommon/test')
3 files changed, 82 insertions, 11 deletions
diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp index 49e90791bf..0d06595ebe 100644 --- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp +++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp @@ -1450,12 +1450,11 @@ void CreateReferenceDynamicBackendTestImpl() TensorInfo outputInfo(outputShape, DataType::Float32); TensorInfo weightInfo(weightShape, DataType::Float32); Convolution2dDescriptor convolution2dDescriptor; + std::vector<TensorInfo> infos = {inputInfo, outputInfo, weightInfo, TensorInfo()}; bool referenceConvolution2dSupported = - referenceLayerSupport->IsConvolution2dSupported(inputInfo, - outputInfo, - convolution2dDescriptor, - weightInfo, - EmptyOptional()); + referenceLayerSupport->IsLayerSupported(LayerType::Convolution2d, + infos, + convolution2dDescriptor); CHECK(referenceConvolution2dSupported); // Test the backend instance by creating a workload @@ -1535,12 +1534,11 @@ void CreateSampleDynamicBackendTestImpl() TensorInfo outputInfo(outputShape, DataType::Float32); TensorInfo weightInfo(weightShape, DataType::Float32); Convolution2dDescriptor convolution2dDescriptor; - bool sampleConvolution2dSupported = - sampleLayerSupport->IsConvolution2dSupported(inputInfo, - outputInfo, - convolution2dDescriptor, - weightInfo, - EmptyOptional()); + std::vector<TensorInfo> infos = {inputInfo, outputInfo, weightInfo, TensorInfo()}; + bool referenceConvolution2dSupported = + referenceLayerSupport->IsLayerSupported(LayerType::Convolution2d, + infos, + convolution2dDescriptor); CHECK(!sampleConvolution2dSupported); // Test the backend instance by creating a workload diff --git a/src/backends/backendsCommon/test/MockBackend.hpp b/src/backends/backendsCommon/test/MockBackend.hpp index 3a5e79a224..df133dfed2 100644 --- a/src/backends/backendsCommon/test/MockBackend.hpp +++ b/src/backends/backendsCommon/test/MockBackend.hpp @@ -172,6 +172,55 @@ public: class MockLayerSupport : public LayerSupportBase { public: + bool IsLayerSupported(const LayerType& type, + const std::vector<TensorInfo>& infos, + const BaseDescriptor& descriptor, + const Optional<LstmInputParamsInfo>& /*lstmParamsInfo*/, + const Optional<QuantizedLstmInputParamsInfo>& /*quantizedLstmParamsInfo*/, + Optional<std::string&> reasonIfUnsupported) const override + { + switch(type) + { + case LayerType::Input: + return IsInputSupported(infos[0], reasonIfUnsupported); + case LayerType::Output: + return IsOutputSupported(infos[0], reasonIfUnsupported); + case LayerType::Addition: + return IsAdditionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported); + case LayerType::Convolution2d: + { + if (infos.size() != 4) + { + throw InvalidArgumentException("Invalid number of TransposeConvolution2d " + "TensorInfos. TensorInfos should be of format: " + "{input, output, weights, biases}."); + } + + auto desc = *(PolymorphicDowncast<const Convolution2dDescriptor*>(&descriptor)); + if (infos[3] == TensorInfo()) + { + return IsConvolution2dSupported(infos[0], + infos[1], + desc, + infos[2], + EmptyOptional(), + reasonIfUnsupported); + } + else + { + return IsConvolution2dSupported(infos[0], + infos[1], + desc, + infos[2], + infos[3], + reasonIfUnsupported); + } + } + default: + return false; + } + } + bool IsInputSupported(const TensorInfo& /*input*/, Optional<std::string&> /*reasonIfUnsupported = EmptyOptional()*/) const override { diff --git a/src/backends/backendsCommon/test/mockBackend/MockImportLayerSupport.hpp b/src/backends/backendsCommon/test/mockBackend/MockImportLayerSupport.hpp index 75e637efdf..380ce4a3f5 100644 --- a/src/backends/backendsCommon/test/mockBackend/MockImportLayerSupport.hpp +++ b/src/backends/backendsCommon/test/mockBackend/MockImportLayerSupport.hpp @@ -14,6 +14,30 @@ namespace armnn class MockImportLayerSupport : public LayerSupportBase { public: + bool IsLayerSupported(const LayerType& type, + const std::vector<TensorInfo>& infos, + const BaseDescriptor& /*descriptor*/, + const Optional<LstmInputParamsInfo>& /*lstmParamsInfo*/, + const Optional<QuantizedLstmInputParamsInfo>& /*quantizedLstmParamsInfo*/, + Optional<std::string&> reasonIfUnsupported) const override + { + switch(type) + { + case LayerType::Addition: + return IsAdditionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported); + case LayerType::Input: + return IsInputSupported(infos[0], reasonIfUnsupported); + case LayerType::Output: + return IsOutputSupported(infos[0], reasonIfUnsupported); + case LayerType::MemCopy: + return LayerSupportBase::IsMemCopySupported(infos[0], infos[1], reasonIfUnsupported); + case LayerType::MemImport: + return LayerSupportBase::IsMemImportSupported(infos[0], infos[1], reasonIfUnsupported); + default: + return false; + } + } + bool IsAdditionSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, |