From cae45686aeed0761ff2c9115ef0a064278ae75fa Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Mon, 26 Apr 2021 10:07:49 +0100 Subject: IVGCVSW-5410 Move ILayerSupport.hpp to backends folder * ILayerSupport is a backend interface, and so in order to prevent false positives in ABI Compliance Checker move it to backends folder. * Front end users should use ABI stable GetILayerSupportByBackendId which takes advantage of LayerSupportHandle Signed-off-by: Francis Murtagh Change-Id: Ie119451c5d55f114525dc79b6f3474b2df7e3418 !android-nn-driver:5516 --- CMakeLists.txt | 2 +- include/armnn/BackendHelper.hpp | 2 +- include/armnn/ILayerSupport.hpp | 427 --------------------- include/armnn/backends/ILayerSupport.hpp | 427 +++++++++++++++++++++ src/armnn/LayerSupport.cpp | 2 +- src/backends/README.md | 2 +- src/backends/backendsCommon/LayerSupportBase.hpp | 2 +- src/backends/backendsCommon/WorkloadFactory.cpp | 2 +- .../backendsCommon/test/DynamicBackendTests.hpp | 2 +- 9 files changed, 434 insertions(+), 434 deletions(-) delete mode 100644 include/armnn/ILayerSupport.hpp create mode 100644 include/armnn/backends/ILayerSupport.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f43a41f4d..86dad31a21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,7 +135,7 @@ list(APPEND armnn_sources include/armnn/Descriptors.hpp include/armnn/DescriptorsFwd.hpp include/armnn/Exceptions.hpp - include/armnn/ILayerSupport.hpp + include/armnn/backends/ILayerSupport.hpp include/armnn/ILayerVisitor.hpp include/armnn/INetwork.hpp include/armnn/IProfiler.hpp diff --git a/include/armnn/BackendHelper.hpp b/include/armnn/BackendHelper.hpp index 2958980669..5eadab5e20 100644 --- a/include/armnn/BackendHelper.hpp +++ b/include/armnn/BackendHelper.hpp @@ -6,7 +6,7 @@ #pragma once #include -#include +#include #include namespace armnn diff --git a/include/armnn/ILayerSupport.hpp b/include/armnn/ILayerSupport.hpp deleted file mode 100644 index 52b6df7117..0000000000 --- a/include/armnn/ILayerSupport.hpp +++ /dev/null @@ -1,427 +0,0 @@ -// -// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace armnn -{ - -class TensorInfo; - -class ILayerSupport -{ -protected: - ILayerSupport() {} - virtual ~ILayerSupport() {} - -public: - virtual bool IsAbsSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsActivationSupported(const TensorInfo& input, - const TensorInfo& output, - const ActivationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsAdditionSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsArgMinMaxSupported(const TensorInfo& input, - const TensorInfo& output, - const ArgMinMaxDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsBatchNormalizationSupported(const TensorInfo& input, - const TensorInfo& output, - const TensorInfo& mean, - const TensorInfo& var, - const TensorInfo& beta, - const TensorInfo& gamma, - const BatchNormalizationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsBatchToSpaceNdSupported(const TensorInfo& input, - const TensorInfo& output, - const BatchToSpaceNdDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsCastSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsComparisonSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - const ComparisonDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConcatSupported(const std::vector inputs, - const TensorInfo& output, - const OriginsDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConstantSupported(const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConvertBf16ToFp32Supported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConvertFp32ToBf16Supported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConvertFp16ToFp32Supported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConvertFp32ToFp16Supported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsConvolution2dSupported(const TensorInfo& input, - const TensorInfo& output, - const Convolution2dDescriptor& descriptor, - const TensorInfo& weights, - const Optional& biases, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDebugSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDepthToSpaceSupported(const TensorInfo& input, - const TensorInfo& output, - const DepthToSpaceDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDepthwiseConvolutionSupported( - const TensorInfo& input, - const TensorInfo& output, - const DepthwiseConvolution2dDescriptor& descriptor, - const TensorInfo& weights, - const Optional& biases, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDequantizeSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings, - const TensorInfo& scores, - const TensorInfo& anchors, - const TensorInfo& detectionBoxes, - const TensorInfo& detectionClasses, - const TensorInfo& detectionScores, - const TensorInfo& numDetections, - const DetectionPostProcessDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const =0; - - virtual bool IsDilatedDepthwiseConvolutionSupported( - const TensorInfo& input, - const TensorInfo& output, - const DepthwiseConvolution2dDescriptor& descriptor, - const TensorInfo& weights, - const Optional& biases, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsDivisionSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsElementwiseUnarySupported(const TensorInfo& input, - const TensorInfo& output, - const ElementwiseUnaryDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsEqualSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsFakeQuantizationSupported(const TensorInfo& input, - const FakeQuantizationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsFillSupported(const TensorInfo& input, - const TensorInfo& output, - const FillDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsFloorSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsFullyConnectedSupported(const TensorInfo& input, - const TensorInfo& output, - const TensorInfo& weights, - const TensorInfo& biases, - const FullyConnectedDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsGatherSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsGatherSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - const GatherDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsGreaterSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& ouput, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsInputSupported(const TensorInfo& input, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsInstanceNormalizationSupported( - const TensorInfo& input, - const TensorInfo& output, - const InstanceNormalizationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsL2NormalizationSupported(const TensorInfo& input, - const TensorInfo& output, - const L2NormalizationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsLogicalBinarySupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - const LogicalBinaryDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsLogicalUnarySupported(const TensorInfo& input, - const TensorInfo& output, - const ElementwiseUnaryDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsLogSoftmaxSupported(const TensorInfo& input, - const TensorInfo& output, - const LogSoftmaxDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsLstmSupported(const TensorInfo& input, - const TensorInfo& outputStateIn, - const TensorInfo& cellStateIn, - const TensorInfo& scratchBuffer, - const TensorInfo& outputStateOut, - const TensorInfo& cellStateOut, - const TensorInfo& output, - const LstmDescriptor& descriptor, - const LstmInputParamsInfo& paramsInfo, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMaximumSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMeanSupported(const TensorInfo& input, - const TensorInfo& output, - const MeanDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMemCopySupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMemImportSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMergeSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMergerSupported(const std::vector inputs, - const TensorInfo& output, - const OriginsDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMinimumSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& ouput, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsMultiplicationSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsNormalizationSupported(const TensorInfo& input, - const TensorInfo& output, - const NormalizationDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsOutputSupported(const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsPadSupported(const TensorInfo& input, - const TensorInfo& output, - const PadDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsPermuteSupported(const TensorInfo& input, - const TensorInfo& output, - const PermuteDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsPooling2dSupported(const TensorInfo& input, - const TensorInfo& output, - const Pooling2dDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsPreCompiledSupported(const TensorInfo& input, - const PreCompiledDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsPreluSupported(const TensorInfo& input, - const TensorInfo& alpha, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsQuantizeSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsQLstmSupported(const TensorInfo& input, - const TensorInfo& previousOutputIn, - const TensorInfo& previousCellStateIn, - const TensorInfo& outputStateOut, - const TensorInfo& cellStateOut, - const TensorInfo& output, - const QLstmDescriptor& descriptor, - const LstmInputParamsInfo& paramsInfo, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsQuantizedLstmSupported(const TensorInfo& input, - const TensorInfo& previousCellStateIn, - const TensorInfo& previousOutputIn, - const TensorInfo& cellStateOut, - const TensorInfo& output, - const QuantizedLstmInputParamsInfo& paramsInfo, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsRankSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsReduceSupported(const TensorInfo& input, - const TensorInfo& output, - const ReduceDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsReshapeSupported(const TensorInfo& input, - const TensorInfo& output, - const ReshapeDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsResizeBilinearSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsResizeSupported(const TensorInfo& input, - const TensorInfo& output, - const ResizeDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsRsqrtSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSliceSupported(const TensorInfo& input, - const TensorInfo& output, - const SliceDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSoftmaxSupported(const TensorInfo& input, - const TensorInfo& output, - const SoftmaxDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSpaceToBatchNdSupported(const TensorInfo& input, - const TensorInfo& output, - const SpaceToBatchNdDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSpaceToDepthSupported(const TensorInfo& input, - const TensorInfo& output, - const SpaceToDepthDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSplitterSupported(const TensorInfo& input, - const ViewsDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSplitterSupported(const TensorInfo& input, - const std::vector>& outputs, - const ViewsDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsStackSupported(const std::vector& inputs, - const TensorInfo& output, - const StackDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsStandInSupported(const std::vector& inputs, - const std::vector& outputs, - const StandInDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - - virtual bool IsStridedSliceSupported(const TensorInfo& input, - const TensorInfo& output, - const StridedSliceDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSubtractionSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsSwitchSupported(const TensorInfo& input0, - const TensorInfo& input1, - const TensorInfo& output0, - const TensorInfo& output1, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsTransposeConvolution2dSupported( - const TensorInfo& input, - const TensorInfo& output, - const TransposeConvolution2dDescriptor& descriptor, - const TensorInfo& weights, - const Optional& biases, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - - virtual bool IsTransposeSupported(const TensorInfo& input, - const TensorInfo& output, - const TransposeDescriptor& descriptor, - Optional reasonIfUnsupported = EmptyOptional()) const = 0; - -}; // class ILayerSupport - -using ILayerSupportSharedPtr = std::shared_ptr; - -} // namespace armnn diff --git a/include/armnn/backends/ILayerSupport.hpp b/include/armnn/backends/ILayerSupport.hpp new file mode 100644 index 0000000000..52b6df7117 --- /dev/null +++ b/include/armnn/backends/ILayerSupport.hpp @@ -0,0 +1,427 @@ +// +// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace armnn +{ + +class TensorInfo; + +class ILayerSupport +{ +protected: + ILayerSupport() {} + virtual ~ILayerSupport() {} + +public: + virtual bool IsAbsSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsActivationSupported(const TensorInfo& input, + const TensorInfo& output, + const ActivationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsAdditionSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsArgMinMaxSupported(const TensorInfo& input, + const TensorInfo& output, + const ArgMinMaxDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsBatchNormalizationSupported(const TensorInfo& input, + const TensorInfo& output, + const TensorInfo& mean, + const TensorInfo& var, + const TensorInfo& beta, + const TensorInfo& gamma, + const BatchNormalizationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsBatchToSpaceNdSupported(const TensorInfo& input, + const TensorInfo& output, + const BatchToSpaceNdDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsCastSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsComparisonSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + const ComparisonDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConcatSupported(const std::vector inputs, + const TensorInfo& output, + const OriginsDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConstantSupported(const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConvertBf16ToFp32Supported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConvertFp32ToBf16Supported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConvertFp16ToFp32Supported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConvertFp32ToFp16Supported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsConvolution2dSupported(const TensorInfo& input, + const TensorInfo& output, + const Convolution2dDescriptor& descriptor, + const TensorInfo& weights, + const Optional& biases, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDebugSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDepthToSpaceSupported(const TensorInfo& input, + const TensorInfo& output, + const DepthToSpaceDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDepthwiseConvolutionSupported( + const TensorInfo& input, + const TensorInfo& output, + const DepthwiseConvolution2dDescriptor& descriptor, + const TensorInfo& weights, + const Optional& biases, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDequantizeSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings, + const TensorInfo& scores, + const TensorInfo& anchors, + const TensorInfo& detectionBoxes, + const TensorInfo& detectionClasses, + const TensorInfo& detectionScores, + const TensorInfo& numDetections, + const DetectionPostProcessDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const =0; + + virtual bool IsDilatedDepthwiseConvolutionSupported( + const TensorInfo& input, + const TensorInfo& output, + const DepthwiseConvolution2dDescriptor& descriptor, + const TensorInfo& weights, + const Optional& biases, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsDivisionSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsElementwiseUnarySupported(const TensorInfo& input, + const TensorInfo& output, + const ElementwiseUnaryDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsEqualSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsFakeQuantizationSupported(const TensorInfo& input, + const FakeQuantizationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsFillSupported(const TensorInfo& input, + const TensorInfo& output, + const FillDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsFloorSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsFullyConnectedSupported(const TensorInfo& input, + const TensorInfo& output, + const TensorInfo& weights, + const TensorInfo& biases, + const FullyConnectedDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsGatherSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsGatherSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + const GatherDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsGreaterSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& ouput, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsInputSupported(const TensorInfo& input, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsInstanceNormalizationSupported( + const TensorInfo& input, + const TensorInfo& output, + const InstanceNormalizationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsL2NormalizationSupported(const TensorInfo& input, + const TensorInfo& output, + const L2NormalizationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsLogicalBinarySupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + const LogicalBinaryDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsLogicalUnarySupported(const TensorInfo& input, + const TensorInfo& output, + const ElementwiseUnaryDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsLogSoftmaxSupported(const TensorInfo& input, + const TensorInfo& output, + const LogSoftmaxDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsLstmSupported(const TensorInfo& input, + const TensorInfo& outputStateIn, + const TensorInfo& cellStateIn, + const TensorInfo& scratchBuffer, + const TensorInfo& outputStateOut, + const TensorInfo& cellStateOut, + const TensorInfo& output, + const LstmDescriptor& descriptor, + const LstmInputParamsInfo& paramsInfo, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMaximumSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMeanSupported(const TensorInfo& input, + const TensorInfo& output, + const MeanDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMemCopySupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMemImportSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMergeSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMergerSupported(const std::vector inputs, + const TensorInfo& output, + const OriginsDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMinimumSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& ouput, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMultiplicationSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsNormalizationSupported(const TensorInfo& input, + const TensorInfo& output, + const NormalizationDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsOutputSupported(const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsPadSupported(const TensorInfo& input, + const TensorInfo& output, + const PadDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsPermuteSupported(const TensorInfo& input, + const TensorInfo& output, + const PermuteDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsPooling2dSupported(const TensorInfo& input, + const TensorInfo& output, + const Pooling2dDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsPreCompiledSupported(const TensorInfo& input, + const PreCompiledDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsPreluSupported(const TensorInfo& input, + const TensorInfo& alpha, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsQuantizeSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsQLstmSupported(const TensorInfo& input, + const TensorInfo& previousOutputIn, + const TensorInfo& previousCellStateIn, + const TensorInfo& outputStateOut, + const TensorInfo& cellStateOut, + const TensorInfo& output, + const QLstmDescriptor& descriptor, + const LstmInputParamsInfo& paramsInfo, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsQuantizedLstmSupported(const TensorInfo& input, + const TensorInfo& previousCellStateIn, + const TensorInfo& previousOutputIn, + const TensorInfo& cellStateOut, + const TensorInfo& output, + const QuantizedLstmInputParamsInfo& paramsInfo, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsRankSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsReduceSupported(const TensorInfo& input, + const TensorInfo& output, + const ReduceDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsReshapeSupported(const TensorInfo& input, + const TensorInfo& output, + const ReshapeDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsResizeBilinearSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsResizeSupported(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsRsqrtSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSliceSupported(const TensorInfo& input, + const TensorInfo& output, + const SliceDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSoftmaxSupported(const TensorInfo& input, + const TensorInfo& output, + const SoftmaxDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSpaceToBatchNdSupported(const TensorInfo& input, + const TensorInfo& output, + const SpaceToBatchNdDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSpaceToDepthSupported(const TensorInfo& input, + const TensorInfo& output, + const SpaceToDepthDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSplitterSupported(const TensorInfo& input, + const ViewsDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSplitterSupported(const TensorInfo& input, + const std::vector>& outputs, + const ViewsDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsStackSupported(const std::vector& inputs, + const TensorInfo& output, + const StackDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsStandInSupported(const std::vector& inputs, + const std::vector& outputs, + const StandInDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + + virtual bool IsStridedSliceSupported(const TensorInfo& input, + const TensorInfo& output, + const StridedSliceDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSubtractionSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsSwitchSupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output0, + const TensorInfo& output1, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsTransposeConvolution2dSupported( + const TensorInfo& input, + const TensorInfo& output, + const TransposeConvolution2dDescriptor& descriptor, + const TensorInfo& weights, + const Optional& biases, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsTransposeSupported(const TensorInfo& input, + const TensorInfo& output, + const TransposeDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const = 0; + +}; // class ILayerSupport + +using ILayerSupportSharedPtr = std::shared_ptr; + +} // namespace armnn diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp index 8812e0ea77..9eaa97cebc 100644 --- a/src/armnn/LayerSupport.cpp +++ b/src/armnn/LayerSupport.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include #include diff --git a/src/backends/README.md b/src/backends/README.md index b3376099d4..b7aa25228a 100644 --- a/src/backends/README.md +++ b/src/backends/README.md @@ -166,7 +166,7 @@ Dynamic backends are registered during the runtime creation. ## The ILayerSupport interface -Arm NN uses the [ILayerSupport](../../include/armnn/ILayerSupport.hpp) interface to decide if a layer +Arm NN uses the [ILayerSupport](../../include/armnn/backends/ILayerSupport.hpp) interface to decide if a layer with a set of parameters (i.e. input and output tensors, descriptor, weights, filter, kernel if any) are supported on a given backend. The backends need a way to communicate this information by implementing the ```GetLayerSupport()``` function on the ```IBackendInternal``` interface. diff --git a/src/backends/backendsCommon/LayerSupportBase.hpp b/src/backends/backendsCommon/LayerSupportBase.hpp index a6f1b34b61..a4f972f961 100644 --- a/src/backends/backendsCommon/LayerSupportBase.hpp +++ b/src/backends/backendsCommon/LayerSupportBase.hpp @@ -5,7 +5,7 @@ #pragma once -#include +#include namespace armnn { diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 9d7d5bd26d..733d77e427 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp index 090488eec4..8302bfd57d 100644 --- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp +++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include #include -- cgit v1.2.1