aboutsummaryrefslogtreecommitdiff
path: root/include/armnn/ILayerSupport.hpp
diff options
context:
space:
mode:
authorMatteo Martincigh <matteo.martincigh@arm.com>2019-01-10 17:34:20 +0000
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-01-11 12:20:47 +0000
commit992d6dc57d8463729910b688f0fb5825d0d3ccf2 (patch)
tree87b504d174848169550240f300f359dd57aaa1fd /include/armnn/ILayerSupport.hpp
parent1f0ff35236c1dd05954735f7fed9c2807770479e (diff)
downloadarmnn-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.hpp90
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>;