xref: /aosp_15_r20/external/armnn/src/backends/cl/ClLayerSupport.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <armnn/backends/IBackendInternal.hpp>
8 
9 #include <backendsCommon/LayerSupportBase.hpp>
10 
11 namespace armnn
12 {
13 
14 class ClLayerSupport : public LayerSupportBase
15 {
16 public:
17     explicit ClLayerSupport(const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr);
18     ClLayerSupport();
~ClLayerSupport()19     ~ClLayerSupport() {}
20 
21     bool IsLayerSupported(const LayerType& type,
22                           const std::vector<TensorInfo>& infos,
23                           const BaseDescriptor& descriptor,
24                           const Optional<LstmInputParamsInfo>& lstmParamsInfo,
25                           const Optional<QuantizedLstmInputParamsInfo>& quantizedLstmParamsInfo,
26                           Optional<std::string&> reasonIfUnsupported) const override;
27 
28     bool IsActivationSupported(const TensorInfo& input,
29                                const TensorInfo& output,
30                                const ActivationDescriptor& descriptor,
31                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
32 
33     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
34     bool IsAdditionSupported(const TensorInfo& input0,
35                              const TensorInfo& input1,
36                              const TensorInfo& output,
37                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
38 
39     bool IsArgMinMaxSupported(const TensorInfo& input,
40                               const TensorInfo& output,
41                               const ArgMinMaxDescriptor& descriptor,
42                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
43 
44     bool IsBatchMatMulSupported(const TensorInfo& inputX,
45                                 const TensorInfo& inputY,
46                                 const TensorInfo& output,
47                                 const BatchMatMulDescriptor& descriptor,
48                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const;
49 
50     bool IsBatchNormalizationSupported(const TensorInfo& input,
51                                        const TensorInfo& output,
52                                        const TensorInfo& mean,
53                                        const TensorInfo& var,
54                                        const TensorInfo& beta,
55                                        const TensorInfo& gamma,
56                                        const BatchNormalizationDescriptor& descriptor,
57                                        Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
58 
59     bool IsBatchToSpaceNdSupported(const TensorInfo& input,
60                                    const TensorInfo& output,
61                                    const BatchToSpaceNdDescriptor& descriptor,
62                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63 
64     bool IsCastSupported(const TensorInfo& input,
65                          const TensorInfo& output,
66                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
67 
68     bool IsChannelShuffleSupported(const TensorInfo& input,
69                                    const TensorInfo& output,
70                                    const ChannelShuffleDescriptor& descriptor,
71                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
72 
73     bool IsComparisonSupported(const TensorInfo& input0,
74                                const TensorInfo& input1,
75                                const TensorInfo& ouput,
76                                const ComparisonDescriptor& descriptor,
77                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
78 
79     bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
80                            const TensorInfo& output,
81                            const OriginsDescriptor& descriptor,
82                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
83 
84     bool IsConstantSupported(const TensorInfo& output,
85                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
86 
87     bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
88                                       const TensorInfo& output,
89                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
90 
91     bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
92                                       const TensorInfo& output,
93                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
94 
95     bool IsConvolution2dSupported(const TensorInfo& input,
96                                   const TensorInfo& output,
97                                   const Convolution2dDescriptor& descriptor,
98                                   const TensorInfo& weights,
99                                   const Optional<TensorInfo>& biases,
100                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
101 
102     bool IsConvolution3dSupported(const TensorInfo& input,
103                                   const TensorInfo& output,
104                                   const Convolution3dDescriptor& descriptor,
105                                   const TensorInfo& weights,
106                                   const Optional<TensorInfo>& biases,
107                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108 
109     bool IsDequantizeSupported(const TensorInfo& input,
110                                const TensorInfo& output,
111                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
112 
113     bool IsDepthToSpaceSupported(const TensorInfo& input,
114                                  const TensorInfo& output,
115                                  const DepthToSpaceDescriptor& descriptor,
116                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
117 
118     bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
119                                          const TensorInfo& output,
120                                          const DepthwiseConvolution2dDescriptor& descriptor,
121                                          const TensorInfo& weights,
122                                          const Optional<TensorInfo>& biases,
123                                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
124 
125     bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
126                                                 const TensorInfo& output,
127                                                 const DepthwiseConvolution2dDescriptor& descriptor,
128                                                 const TensorInfo& weights,
129                                                 const Optional<TensorInfo>& biases,
130                                                 Optional<std::string&> reason = EmptyOptional()) const override;
131 
132     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
133     bool IsDivisionSupported(const TensorInfo& input0,
134                              const TensorInfo& input1,
135                              const TensorInfo& output,
136                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
137 
138     bool IsElementwiseUnarySupported(const TensorInfo& input,
139                                      const TensorInfo& output,
140                                      const ElementwiseUnaryDescriptor& descriptor,
141                                      Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
142 
143     bool IsFillSupported(const TensorInfo& input,
144                          const TensorInfo& output,
145                          const FillDescriptor& descriptor,
146                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
147 
148     bool IsFloorSupported(const TensorInfo& input,
149                           const TensorInfo& output,
150                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
151 
152     bool IsFullyConnectedSupported(const TensorInfo& input,
153                                    const TensorInfo& output,
154                                    const TensorInfo& weights,
155                                    const TensorInfo& biases,
156                                    const FullyConnectedDescriptor& descriptor,
157                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
158 
159     bool IsGatherNdSupported(const TensorInfo& input0,
160                              const TensorInfo& input1,
161                              const TensorInfo& output,
162                              Optional<std::string&> reasonIfUnsupported) const;
163 
164     bool IsGatherSupported(const TensorInfo& input0,
165                            const TensorInfo& input1,
166                            const TensorInfo& output,
167                            const GatherDescriptor& descriptor,
168                            Optional<std::string&> reasonIfUnsupported) const override;
169 
170     bool IsInputSupported(const TensorInfo& input,
171                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
172 
173     bool IsInstanceNormalizationSupported(const TensorInfo& input,
174                                           const TensorInfo& output,
175                                           const InstanceNormalizationDescriptor& descriptor,
176                                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
177 
178     bool IsL2NormalizationSupported(const TensorInfo& input,
179                                     const TensorInfo& output,
180                                     const L2NormalizationDescriptor& descriptor,
181                                     Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182 
183     bool IsLogicalBinarySupported(const TensorInfo& input0,
184                                   const TensorInfo& input1,
185                                   const TensorInfo& output,
186                                   const LogicalBinaryDescriptor& descriptor,
187                                   Optional<std::string&> reasonIfUnsupported) const override;
188 
189     bool IsLogSoftmaxSupported(const TensorInfo& input,
190                                const TensorInfo& output,
191                                const LogSoftmaxDescriptor& descriptor,
192                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193 
194     bool IsLstmSupported(const TensorInfo& input,
195                          const TensorInfo& outputStateIn,
196                          const TensorInfo& cellStateIn,
197                          const TensorInfo& scratchBuffer,
198                          const TensorInfo& outputStateOut,
199                          const TensorInfo& cellStateOut,
200                          const TensorInfo& output,
201                          const LstmDescriptor& descriptor,
202                          const LstmInputParamsInfo& paramsInfo,
203                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204 
205     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
206     bool IsMaximumSupported(const TensorInfo& input0,
207                             const TensorInfo& input1,
208                             const TensorInfo& output,
209                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
210 
211     bool IsMeanSupported(const TensorInfo& input,
212                          const TensorInfo& output,
213                          const MeanDescriptor& descriptor,
214                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
215 
216     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
217     bool IsMinimumSupported(const TensorInfo& input0,
218                             const TensorInfo& input1,
219                             const TensorInfo& output,
220                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221 
222     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
223     bool IsMultiplicationSupported(const TensorInfo& input0,
224                                    const TensorInfo& input1,
225                                    const TensorInfo& output,
226                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
227 
228     bool IsNormalizationSupported(const TensorInfo& input,
229                                   const TensorInfo& output,
230                                   const NormalizationDescriptor& descriptor,
231                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232 
233     bool IsOutputSupported(const TensorInfo& output,
234                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
235 
236     bool IsPadSupported(const TensorInfo& input,
237                         const TensorInfo& output,
238                         const PadDescriptor& descriptor,
239                         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
240 
241     bool IsPermuteSupported(const TensorInfo& input,
242                             const TensorInfo& output,
243                             const PermuteDescriptor& descriptor,
244                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
245 
246     bool IsPooling2dSupported(const TensorInfo& input,
247                               const TensorInfo& output,
248                               const Pooling2dDescriptor& descriptor,
249                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
250 
251     bool IsPooling3dSupported(const TensorInfo& input,
252                               const TensorInfo& output,
253                               const Pooling3dDescriptor& descriptor,
254                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
255 
256     bool IsPreluSupported(const TensorInfo& input,
257                           const TensorInfo& alpha,
258                           const TensorInfo& output,
259                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
260 
261     bool IsQLstmSupported(const TensorInfo& input,
262                           const TensorInfo& previousOutputIn,
263                           const TensorInfo& previousCellStateIn,
264                           const TensorInfo& outputStateOut,
265                           const TensorInfo& cellStateOut,
266                           const TensorInfo& output,
267                           const QLstmDescriptor& descriptor,
268                           const LstmInputParamsInfo& paramsInfo,
269                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
270 
271     bool IsQuantizedLstmSupported(const TensorInfo& input,
272                                   const TensorInfo& previousCellStateIn,
273                                   const TensorInfo& previousOutputIn,
274                                   const TensorInfo& cellStateOut,
275                                   const TensorInfo& output,
276                                   const QuantizedLstmInputParamsInfo& paramsInfo,
277                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
278 
279     bool IsQuantizeSupported(const TensorInfo& input,
280                              const TensorInfo& output,
281                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
282 
283     bool IsReduceSupported(const TensorInfo& input,
284                            const TensorInfo& output,
285                            const ReduceDescriptor& descriptor,
286                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
287 
288     bool IsReshapeSupported(const TensorInfo& input,
289                             const TensorInfo& output,
290                             const ReshapeDescriptor& descriptor,
291                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
292 
293     bool IsResizeSupported(const TensorInfo& input,
294                            const TensorInfo& output,
295                            const ResizeDescriptor& descriptor,
296                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
297 
298     bool IsSliceSupported(const TensorInfo& input,
299                           const TensorInfo& output,
300                           const SliceDescriptor& descriptor,
301                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
302 
303     bool IsSoftmaxSupported(const TensorInfo& input,
304                             const TensorInfo& output,
305                             const SoftmaxDescriptor& descriptor,
306                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
307 
308     bool IsSpaceToBatchNdSupported(const TensorInfo& input,
309                                    const TensorInfo& output,
310                                    const SpaceToBatchNdDescriptor& descriptor,
311                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
312 
313     bool IsSpaceToDepthSupported(const TensorInfo& input,
314                                  const TensorInfo& output,
315                                  const SpaceToDepthDescriptor& descriptor,
316                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
317 
318     bool IsSplitterSupported(const TensorInfo& input,
319                              const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
320                              const ViewsDescriptor& descriptor,
321                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
322 
323     bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
324                           const TensorInfo& output,
325                           const StackDescriptor& descriptor,
326                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
327 
328     bool IsStridedSliceSupported(const TensorInfo& input,
329                                  const TensorInfo& output,
330                                  const StridedSliceDescriptor& descriptor,
331                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
332 
333     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
334     bool IsSubtractionSupported(const TensorInfo& input0,
335                                 const TensorInfo& input1,
336                                 const TensorInfo& output,
337                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
338 
339     bool IsTransposeConvolution2dSupported(const TensorInfo& input,
340                                            const TensorInfo& output,
341                                            const TransposeConvolution2dDescriptor& descriptor,
342                                            const TensorInfo& weights,
343                                            const Optional<TensorInfo>& biases,
344                                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
345 
346     bool IsTransposeSupported(const TensorInfo& input,
347                               const TensorInfo& output,
348                               const TransposeDescriptor& descriptor,
349                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
350 
351     bool IsUnidirectionalSequenceLstmSupported(const TensorInfo& input,
352                                                const TensorInfo& outputStateIn,
353                                                const TensorInfo& cellStateIn,
354                                                const TensorInfo& outputStateOut,
355                                                const TensorInfo& cellStateOut,
356                                                const TensorInfo& output,
357                                                const UnidirectionalSequenceLstmDescriptor& descriptor,
358                                                const LstmInputParamsInfo& paramsInfo,
359                                                Optional<std::string&> reasonIfUnsupported) const override;
360 
361 private:
362     const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr;
363 
364 };
365 
366 } // namespace armnn
367