diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-01-10 17:34:20 +0000 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-01-11 12:20:47 +0000 |
commit | 992d6dc57d8463729910b688f0fb5825d0d3ccf2 (patch) | |
tree | 87b504d174848169550240f300f359dd57aaa1fd /include/armnn/ILayerSupport.hpp | |
parent | 1f0ff35236c1dd05954735f7fed9c2807770479e (diff) | |
download | armnn-992d6dc57d8463729910b688f0fb5825d0d3ccf2.tar.gz |
IVGCVSW-2454 Refactor ArmNN to support pluggable backends from a separate
code base
* Made the virtual functions in ILayerSupport.hpp pure
* Created a LayerSupportBase class with the default implementation of
the interface
* Made the backend layer support classes inherit from the base
class, instead of directly from the interface
* Refactored the profiler and the profiling event classes to use
the BackendId instead of the Compute
* Implemented a proper MemCopy support method
* Changed Compute to BackendId in the profiling API and objects
* Removed static references to pluggable backends
!android-nn-driver:492
Change-Id: Id6332b5f48c980819e0a09adc818d1effd057296
Diffstat (limited to 'include/armnn/ILayerSupport.hpp')
-rw-r--r-- | include/armnn/ILayerSupport.hpp | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/include/armnn/ILayerSupport.hpp b/include/armnn/ILayerSupport.hpp index af38b07f39..bba344975a 100644 --- a/include/armnn/ILayerSupport.hpp +++ b/include/armnn/ILayerSupport.hpp @@ -25,12 +25,12 @@ public: virtual bool IsActivationSupported(const TensorInfo& input, const TensorInfo& output, const ActivationDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsAdditionSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsBatchNormalizationSupported(const TensorInfo& input, const TensorInfo& output, @@ -39,75 +39,76 @@ public: const TensorInfo& beta, const TensorInfo& gamma, const BatchNormalizationDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsBatchToSpaceNdSupported(const TensorInfo& input, const TensorInfo& output, const BatchToSpaceNdDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsConstantSupported(const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsConvertFp16ToFp32Supported(const TensorInfo& input, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsConvertFp32ToFp16Supported(const TensorInfo& input, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsConvolution2dSupported(const TensorInfo& input, const TensorInfo& output, const Convolution2dDescriptor& descriptor, const TensorInfo& weights, const Optional<TensorInfo>& biases, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsDebugSupported(const TensorInfo& input, const TensorInfo& output, const DebugDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; - virtual bool IsDepthwiseConvolutionSupported(const TensorInfo& input, - const TensorInfo& output, - const DepthwiseConvolution2dDescriptor& descriptor, - const TensorInfo& weights, - const Optional<TensorInfo>& biases, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + virtual bool IsDepthwiseConvolutionSupported( + const TensorInfo& input, + const TensorInfo& output, + const DepthwiseConvolution2dDescriptor& descriptor, + const TensorInfo& weights, + const Optional<TensorInfo>& biases, + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsDivisionSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsEqualSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsFakeQuantizationSupported(const TensorInfo& input, const FakeQuantizationDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsFloorSupported(const TensorInfo& input, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsFullyConnectedSupported(const TensorInfo& input, const TensorInfo& output, const TensorInfo& weights, const TensorInfo& biases, const FullyConnectedDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsInputSupported(const TensorInfo& input, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsL2NormalizationSupported(const TensorInfo& input, const TensorInfo& output, const L2NormalizationDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsLstmSupported(const TensorInfo& input, const TensorInfo& outputStateIn, @@ -134,94 +135,99 @@ public: const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights, const TensorInfo* cellToOutputWeights, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsMaximumSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsMeanSupported(const TensorInfo& input, const TensorInfo& output, const MeanDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; + + virtual bool IsMemCopySupported(const TensorInfo& input, + const TensorInfo& output, + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsMergerSupported(const std::vector<const TensorInfo*> inputs, const TensorInfo& output, const OriginsDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsMinimumSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& ouput, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsMultiplicationSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsNormalizationSupported(const TensorInfo& input, const TensorInfo& output, const NormalizationDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsOutputSupported(const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsPadSupported(const TensorInfo& input, const TensorInfo& output, const PadDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsPermuteSupported(const TensorInfo& input, const TensorInfo& output, const PermuteDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsPooling2dSupported(const TensorInfo& input, const TensorInfo& output, const Pooling2dDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsReshapeSupported(const TensorInfo& input, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + const ReshapeDescriptor& descriptor, + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsSpaceToBatchNdSupported(const TensorInfo& input, const TensorInfo& output, const SpaceToBatchNdDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsResizeBilinearSupported(const TensorInfo& input, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsRsqrtSupported(const TensorInfo& input, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsSoftmaxSupported(const TensorInfo& input, const TensorInfo& output, const SoftmaxDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsSplitterSupported(const TensorInfo& input, const ViewsDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsStridedSliceSupported(const TensorInfo& input, const TensorInfo& output, const StridedSliceDescriptor& descriptor, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsSubtractionSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; virtual bool IsGreaterSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& ouput, - Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; + Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0; }; // class ILayerSupport using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>; |