blob: 8b674c6460bfa35e1fa6a30c1f1efa632dcb89eb [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
7#include <armnn/DescriptorsFwd.hpp>
8#include <armnn/Types.hpp>
9#include <armnn/Tensor.hpp>
10
11namespace armnn
12{
13
arovir014424b0a2018-10-04 10:46:04 +010014class NeonLayerSupport : public ILayerSupport
15{
16 // TODO implement
17};
18
telsoa014fcda012018-03-09 14:13:49 +000019bool IsNeonDirectConvolutionPreferred(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
20
21bool IsNeonNormalizationDescParamsSupported(std::string* reasonIfUnsupported,
22 const NormalizationDescriptor& parameters);
23
24bool IsActivationSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010025 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000026 const ActivationDescriptor& descriptor,
27 std::string* reasonIfUnsupported);
28
29bool IsNeonDepthwiseConvolution2dDescParamsSupported(std::string* reasonIfUnsupported,
30 const DepthwiseConvolution2dDescriptor& parameters,
31 const TensorInfo& weights);
32
33bool IsAdditionSupportedNeon(const TensorInfo& input0,
34 const TensorInfo& input1,
35 const TensorInfo& output,
36 std::string* reasonIfUnsupported);
37
38bool IsBatchNormalizationSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010039 const TensorInfo& output,
40 const TensorInfo& mean,
41 const TensorInfo& var,
42 const TensorInfo& beta,
43 const TensorInfo& gamma,
telsoa014fcda012018-03-09 14:13:49 +000044 const BatchNormalizationDescriptor& descriptor,
45 std::string* reasonIfUnsupported = nullptr);
46
47bool IsConstantSupportedNeon(const TensorInfo& output,
48 std::string* reasonIfUnsupported = nullptr);
49
50bool IsConvolution2dSupportedNeon(const TensorInfo& input,
surmeh013537c2c2018-05-18 16:31:43 +010051 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000052 const Convolution2dDescriptor& descriptor,
53 const TensorInfo& weights,
David Beck5eec11d2018-10-04 15:43:17 +010054 const Optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000055 std::string* reasonIfUnsupported = nullptr);
56
telsoa01c577f2c2018-08-31 09:22:23 +010057
telsoa014fcda012018-03-09 14:13:49 +000058bool IsDepthwiseConvolutionSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010059 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000060 const DepthwiseConvolution2dDescriptor& descriptor,
61 const TensorInfo& weights,
David Beck5eec11d2018-10-04 15:43:17 +010062 const Optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000063 std::string* reasonIfUnsupported = nullptr);
64
Francis Murtaghe7a86a42018-08-29 12:42:10 +010065bool IsDivisionSupportedNeon(const TensorInfo& input0,
66 const TensorInfo& input1,
67 const TensorInfo& output,
68 std::string* reasonIfUnsupported = nullptr);
69
David Beckc2044fe2018-09-05 15:00:38 +010070bool IsSubtractionSupportedNeon(const TensorInfo& input0,
71 const TensorInfo& input1,
72 const TensorInfo& output,
73 std::string* reasonIfUnsupported = nullptr);
74
telsoa014fcda012018-03-09 14:13:49 +000075bool IsFullyConnectedSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010076 const TensorInfo& output,
77 const TensorInfo& weights,
78 const TensorInfo& biases,
telsoa014fcda012018-03-09 14:13:49 +000079 const FullyConnectedDescriptor& descriptor,
80 std::string* reasonIfUnsupported = nullptr);
81
82bool IsInputSupportedNeon(const TensorInfo& input,
83 std::string* reasonIfUnsupported = nullptr);
84
85bool IsL2NormalizationSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010086 const TensorInfo& output,
Matteo Martincighbcd3c852018-09-28 14:14:12 +010087 const L2NormalizationDescriptor& descriptor,
telsoa014fcda012018-03-09 14:13:49 +000088 std::string* reasonIfUnsupported = nullptr);
89
90bool IsMergerSupportedNeon(const std::vector<const TensorInfo*> inputs,
91 const OriginsDescriptor& descriptor,
92 std::string* reasonIfUnsupported = nullptr);
93
94bool IsMultiplicationSupportedNeon(const TensorInfo& input0,
95 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +010096 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000097 std::string* reasonIfUnsupported = nullptr);
98
99bool IsNormalizationSupportedNeon(const TensorInfo& input,
100 const TensorInfo& output,
101 const NormalizationDescriptor& descriptor,
102 std::string* reasonIfUnsupported = nullptr);
103
104bool IsOutputSupportedNeon(const TensorInfo& output,
105 std::string* reasonIfUnsupported = nullptr);
106
107bool IsPermuteSupportedNeon(const TensorInfo& input,
108 const TensorInfo& output,
109 const PermuteDescriptor& descriptor,
110 std::string* reasonIfUnsupported = nullptr);
111
112bool IsPooling2dSupportedNeon(const TensorInfo& input,
113 const TensorInfo& output,
114 const Pooling2dDescriptor& descriptor,
115 std::string* reasonIfUnsupported = nullptr);
116
117bool IsResizeBilinearSupportedNeon(const TensorInfo& input,
118 std::string* reasonIfUnsupported = nullptr);
119
120bool IsSoftmaxSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100121 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000122 const SoftmaxDescriptor& descriptor,
123 std::string* reasonIfUnsupported = nullptr);
124
125bool IsSplitterSupportedNeon(const TensorInfo& input,
126 const ViewsDescriptor& descriptor,
127 std::string* reasonIfUnsupported = nullptr);
128
129bool IsFakeQuantizationSupportedNeon(const TensorInfo& input,
130 const FakeQuantizationDescriptor& descriptor,
131 std::string* reasonIfUnsupported = nullptr);
132
133bool IsReshapeSupportedNeon(const TensorInfo& input,
134 std::string* reasonIfUnsupported = nullptr);
135
136bool IsFloorSupportedNeon(const TensorInfo& input,
137 const TensorInfo& output,
138 std::string* reasonIfUnsupported = nullptr);
139
telsoa01c577f2c2018-08-31 09:22:23 +0100140bool IsLstmSupportedNeon(const TensorInfo& input, const TensorInfo& outputStateIn,
141 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
142 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
143 const TensorInfo& output, const LstmDescriptor& descriptor,
144 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
145 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
146 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
147 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
148 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
149 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
150 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
151 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
152 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
153
154bool IsConvertFp16ToFp32SupportedNeon(const TensorInfo& input,
155 const TensorInfo& output,
156 std::string* reasonIfUnsupported = nullptr);
157
158bool IsConvertFp32ToFp16SupportedNeon(const TensorInfo& input,
159 const TensorInfo& output,
160 std::string* reasonIfUnsupported = nullptr);
161
narpra0132b90462018-09-13 11:07:48 +0100162bool IsMeanSupportedNeon(const TensorInfo& input,
163 const TensorInfo& output,
164 const MeanDescriptor& descriptor,
165 std::string* reasonIfUnsupported = nullptr);
166
Nina Drozd661dfa72018-10-02 11:14:17 +0100167bool IsPadSupportedNeon(const TensorInfo& input,
168 const TensorInfo& output,
169 const PadDescriptor& descriptor,
170 std::string* reasonIfUnsupported = nullptr);
171
telsoa014fcda012018-03-09 14:13:49 +0000172}