ArmNN
 20.08
LayerSupportBase.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <armnn/Deprecated.hpp>
7 #include <armnn/Descriptors.hpp>
8 #include <armnn/Exceptions.hpp>
9 #include <armnn/Types.hpp>
10 
12 
14 
15 namespace
16 {
17 
18 bool DefaultLayerSupport(const char* func,
19  const char* file,
20  unsigned int line,
21  armnn::Optional<std::string&> reasonIfUnsupported)
22 {
23  // NOTE: We only need to return the reason if the optional parameter is not empty
24  if (reasonIfUnsupported)
25  {
26  std::stringstream message;
27  message << func << " is not implemented [" << file << ":" << line << "]";
28 
29  reasonIfUnsupported.value() = message.str();
30  }
31 
32  return false;
33 }
34 
35 } // anonymous namespace
36 
37 namespace armnn
38 {
39 
41  const TensorInfo&, // output
42  Optional<std::string &> reasonIfUnsupported) const
43 {
44  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
45 }
46 
48  const TensorInfo&, //output
49  const ActivationDescriptor&, // descriptor
50  Optional<std::string&> reasonIfUnsupported) const
51 {
52  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
53 }
54 
56  const TensorInfo&, // input1
57  const TensorInfo&, // output
58  Optional<std::string&> reasonIfUnsupported) const
59 {
60  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
61 }
62 
64  const armnn::TensorInfo&, // output
65  const armnn::ArgMinMaxDescriptor&, // descriptor
66  armnn::Optional<std::string &> reasonIfUnsupported) const
67 {
68  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
69 }
70 
72  const TensorInfo&, // output
73  const TensorInfo&, //mean
74  const TensorInfo&, //var
75  const TensorInfo&, //beta
76  const TensorInfo&, //gamma
77  const BatchNormalizationDescriptor&, // descriptor
78  Optional<std::string&> reasonIfUnsupported) const
79 {
80  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
81 }
82 
84  const TensorInfo&, // output
85  const BatchToSpaceNdDescriptor&, //descriptor
86  Optional<std::string&> reasonIfUnsupported) const
87 {
88  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
89 }
90 
92  const TensorInfo&, // input1
93  const TensorInfo&, // output
94  const ComparisonDescriptor&, // descriptor
95  Optional<std::string&> reasonIfUnsupported) const
96 {
97  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
98 }
99 
100 bool LayerSupportBase::IsConcatSupported(const std::vector<const TensorInfo*>, // inputs
101  const TensorInfo&, // output
102  const OriginsDescriptor&, // descriptor
103  Optional<std::string&> reasonIfUnsupported) const
104 {
105  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
106 }
107 
109  Optional<std::string&> reasonIfUnsupported) const
110 {
111  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
112 }
113 
115  const TensorInfo&, // output
116  Optional<std::string&> reasonIfUnsupported) const
117 {
118  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
119 }
120 
122  const TensorInfo&, // output
123  Optional<std::string&> reasonIfUnsupported) const
124 {
125  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
126 }
127 
129  const TensorInfo&, // output
130  Optional<std::string&> reasonIfUnsupported) const
131 {
132  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
133 }
134 
135 
137  const TensorInfo&, // output
138  Optional<std::string&> reasonIfUnsupported) const
139 {
140  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
141 }
142 
144  const TensorInfo&, // output
145  const Convolution2dDescriptor&, // descriptor
146  const TensorInfo&, // weights
147  const Optional<TensorInfo>&, // biases
148  Optional<std::string&> reasonIfUnsupported) const
149 {
150  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
151 }
152 
154  const TensorInfo&, // output
155  Optional<std::string&> reasonIfUnsupported) const
156 {
157  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
158 }
159 
161  const TensorInfo&, // output
162  const DepthToSpaceDescriptor&, // descriptor
163  Optional<std::string&> reasonIfUnsupported) const
164 {
165  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
166 }
167 
169  const TensorInfo&, //output
170  const DepthwiseConvolution2dDescriptor&, // descriptor
171  const TensorInfo&, // weights
172  const Optional<TensorInfo>&, // biases
173  Optional<std::string&> reasonIfUnsupported) const
174 {
175  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
176 }
177 
179  const TensorInfo&, // output
180  Optional<std::string&> reasonIfUnsupported) const
181 {
182  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
183 }
184 
186  const TensorInfo&, // scores
187  const TensorInfo&, // anchors
188  const TensorInfo&, // detectionBoxes
189  const TensorInfo&, // detectionClasses
190  const TensorInfo&, // detectionScores
191  const TensorInfo&, // numDetections
192  const DetectionPostProcessDescriptor&, //descriptor
193  Optional<std::string&> reasonIfUnsupported) const
194 {
195  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
196 }
197 
199  const TensorInfo&, // output
200  const DepthwiseConvolution2dDescriptor&, // descriptor
201  const TensorInfo&,// weights
202  const Optional<TensorInfo>&, // biases
203  Optional<std::string&> reasonIfUnsupported) const
204 {
205  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
206 }
207 
209  const TensorInfo&, // input1
210  const TensorInfo&, // output
211  Optional<std::string&> reasonIfUnsupported) const
212 {
213  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
214 }
215 
217  const TensorInfo& output,
218  const ElementwiseUnaryDescriptor& descriptor,
219  Optional<std::string&> reasonIfUnsupported) const
220 {
221  if (descriptor.m_Operation == UnaryOperation::Abs)
222  {
224  return IsAbsSupported(input, output, reasonIfUnsupported);
226  }
227  else if (descriptor.m_Operation == UnaryOperation::Rsqrt)
228  {
230  return IsRsqrtSupported(input, output, reasonIfUnsupported);
232  }
233  return false;
234 }
235 
237  const armnn::TensorInfo&, // input1
238  const armnn::TensorInfo&, // output
239  armnn::Optional<std::string &> reasonIfUnsupported) const
240 {
241  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
242 }
243 
245  const FakeQuantizationDescriptor&, // descriptor
246  Optional<std::string&> reasonIfUnsupported) const
247 {
248  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
249 }
250 
252  const TensorInfo&, // output
253  const FillDescriptor&, // descriptor
254  Optional<std::string&> reasonIfUnsupported) const
255 {
256  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
257 }
258 
260  const TensorInfo&, // output
261  Optional<std::string&> reasonIfUnsupported) const
262 {
263  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
264 }
265 
267  const TensorInfo&, // output
268  const TensorInfo&, // weights
269  const TensorInfo&, // biases
270  const FullyConnectedDescriptor&, // descriptor
271  Optional<std::string&> reasonIfUnsupported) const
272 {
273  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
274 }
275 
277  const armnn::TensorInfo&, // input1
278  const armnn::TensorInfo&, // output
279  armnn::Optional<std::string&> reasonIfUnsupported) const
280 {
281  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
282 }
283 
285  const armnn::TensorInfo&, // input1
286  const armnn::TensorInfo&, // output
287  const GatherDescriptor&, // descriptor
288  armnn::Optional<std::string&> reasonIfUnsupported) const
289 {
290  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
291 }
292 
294  const TensorInfo&, // input1
295  const TensorInfo&, // output
296  Optional<std::string&> reasonIfUnsupported) const
297 {
298  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
299 }
300 
302  Optional<std::string&> reasonIfUnsupported) const
303 {
304  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
305 }
306 
308  const TensorInfo&, // output
309  const InstanceNormalizationDescriptor&, // descriptor
310  Optional<std::string&> reasonIfUnsupported) const
311 {
312  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
313 }
314 
316  const TensorInfo&, // output
317  const L2NormalizationDescriptor&, // descriptor
318  Optional<std::string&> reasonIfUnsupported) const
319 {
320  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
321 }
322 
324  const TensorInfo&, // output
325  const LogSoftmaxDescriptor&, // descriptor
326  Optional<std::string&> reasonIfUnsupported) const
327 {
328  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
329 }
330 
332  const TensorInfo&, // outputStateIn
333  const TensorInfo&, // cellStateIn
334  const TensorInfo&, // scratchBuffer
335  const TensorInfo&, // outputStateOut
336  const TensorInfo&, // cellStateOut
337  const TensorInfo&, // output
338  const LstmDescriptor&, // descriptor
339  const LstmInputParamsInfo&, // paramsInfo
340  Optional<std::string&> reasonIfUnsupported) const
341 {
342  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
343 }
344 
346  const TensorInfo&, // input1
347  const TensorInfo&, // output
348  Optional<std::string&> reasonIfUnsupported) const
349 {
350  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
351 }
352 
354  const TensorInfo&, // output
355  const MeanDescriptor&, // descriptor
356  Optional<std::string&> reasonIfUnsupported) const
357 {
358  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
359 }
360 
362  const armnn::TensorInfo&, // output
363  armnn::Optional<std::string &> ) const // reasonIfUnsupported
364 {
365  return true;
366 }
367 
369  const armnn::TensorInfo&, // output
370  armnn::Optional<std::string &> ) const // reasonIfUnsupported
371 {
372  return true;
373 }
374 
376  const TensorInfo&, // input1
377  const TensorInfo&, // output
378  Optional<std::string&> reasonIfUnsupported) const
379 {
380  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
381 }
382 
383 bool LayerSupportBase::IsMergerSupported(const std::vector<const TensorInfo*> inputs,
384  const TensorInfo& output,
385  const OriginsDescriptor& descriptor,
386  Optional<std::string&> reasonIfUnsupported) const
387 {
388  return IsConcatSupported(inputs, output, descriptor, reasonIfUnsupported);
389 }
390 
392  const TensorInfo&, // input1
393  const TensorInfo&, // output
394  Optional<std::string&> reasonIfUnsupported) const
395 {
396  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
397 }
398 
400  const TensorInfo&, // input1
401  const TensorInfo&, // output
402  Optional<std::string&> reasonIfUnsupported) const
403 {
404  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
405 }
406 
408  const TensorInfo&, // output
409  const NormalizationDescriptor&, // descriptor
410  Optional<std::string&> reasonIfUnsupported) const
411 {
412  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
413 }
414 
416  Optional<std::string&> reasonIfUnsupported) const
417 {
418  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
419 }
420 
422  const TensorInfo&, // output
423  const PadDescriptor&, // descriptor
424  Optional<std::string&> reasonIfUnsupported) const
425 {
426  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
427 }
428 
430  const TensorInfo&, // output
431  const PermuteDescriptor&, // descriptor
432  Optional<std::string&> reasonIfUnsupported) const
433 {
434  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
435 }
436 
438  const TensorInfo&, // output
439  const Pooling2dDescriptor&, // descriptor
440  Optional<std::string&> reasonIfUnsupported) const
441 {
442  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
443 }
444 
446  const PreCompiledDescriptor&, // descriptor
447  Optional<std::string&> reasonIfUnsupported) const
448 {
449  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
450 }
451 
453  const TensorInfo&, // alpha
454  const TensorInfo&, // output
455  Optional<std::string &> reasonIfUnsupported) const
456 {
457  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
458 }
459 
461  const armnn::TensorInfo&, // output
462  armnn::Optional<std::string&> reasonIfUnsupported) const
463 {
464  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
465 }
466 
468  const TensorInfo&, // previousOutputIn
469  const TensorInfo&, // previousCellStateIn
470  const TensorInfo&, // outputStateOut
471  const TensorInfo&, // cellStateOut
472  const TensorInfo&, // output
473  const QLstmDescriptor&, // descriptor
474  const LstmInputParamsInfo&, // paramsInfo
475  Optional<std::string&> reasonIfUnsupported) const
476 {
477  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
478 }
479 
481  const TensorInfo&, // previousCellStateIn
482  const TensorInfo&, // previousOutputIn
483  const TensorInfo&, // cellStateOut
484  const TensorInfo&, // output
485  const QuantizedLstmInputParamsInfo&, // paramsInfo
486  Optional<std::string&> reasonIfUnsupported) const
487 {
488  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
489 }
490 
492  const TensorInfo&, // output
493  Optional<std::string&> reasonIfUnsupported) const
494 {
495  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
496 }
497 
499  const TensorInfo&, // output
500  const ReshapeDescriptor&, // descriptor
501  Optional<std::string&> reasonIfUnsupported) const
502 {
503  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
504 }
505 
507  const TensorInfo&, // output
508  Optional<std::string&> reasonIfUnsupported) const
509 {
510  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
511 }
512 
514  const TensorInfo&, // output
515  const ResizeDescriptor&, // descriptor
516  Optional<std::string&> reasonIfUnsupported) const
517 {
518  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
519 }
520 
522  const TensorInfo&, // output
523  Optional<std::string &> reasonIfUnsupported) const
524 {
525  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
526 }
527 
529  const TensorInfo&, // output
530  const SliceDescriptor&, // descriptor
531  Optional<std::string&> reasonIfUnsupported) const
532 {
533  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
534 }
535 
537  const TensorInfo&, // output
538  const SoftmaxDescriptor&, // descriptor
539  Optional<std::string&> reasonIfUnsupported) const
540 {
541  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
542 }
543 /**/
545  const TensorInfo&, // output
546  const SpaceToBatchNdDescriptor&, // descriptor
547  Optional<std::string&> reasonIfUnsupported) const
548 {
549  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
550 }
551 
553  const TensorInfo&, // output
554  const SpaceToDepthDescriptor&, // descriptor
555  Optional<std::string&> reasonIfUnsupported) const
556 {
557  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
558 }
559 
561  const ViewsDescriptor&, // descriptor
562  Optional<std::string&> reasonIfUnsupported) const
563 {
564  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
565 }
566 
568  const std::vector<std::reference_wrapper<TensorInfo>>&, // outputs
569  const ViewsDescriptor&, // descriptor
570  Optional<std::string&> reasonIfUnsupported) const
571 {
572  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
573 }
574 
575 bool LayerSupportBase::IsStackSupported(const std::vector<const TensorInfo*>&, // inputs
576  const TensorInfo&, // output
577  const StackDescriptor&, // descriptor
578  Optional<std::string&> reasonIfUnsupported) const
579 {
580  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
581 }
582 
583 bool LayerSupportBase::IsStandInSupported(const std::vector<const TensorInfo*>&, // inputs
584  const std::vector<const TensorInfo*>&, // outputs
585  const StandInDescriptor&, // descriptor
586  Optional<std::string&> reasonIfUnsupported) const
587 {
588  if (reasonIfUnsupported)
589  {
590  std::stringstream message;
591  message << "StandIn layer is not executable via backends";
592 
593  reasonIfUnsupported.value() = message.str();
594  }
595 
596  return false;
597 }
598 
600  const TensorInfo&, // output
601  const StridedSliceDescriptor&, // descriptor
602  Optional<std::string&> reasonIfUnsupported) const
603 {
604  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
605 }
606 
608  const TensorInfo&, // input1
609  const TensorInfo&, // output
610  Optional<std::string&> reasonIfUnsupported) const
611 {
612  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
613 }
614 
616  const TensorInfo&, // input1
617  const TensorInfo&, // output0
618  const TensorInfo&, // output1
619  Optional<std::string&> reasonIfUnsupported) const
620 {
621  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
622 }
623 
625  const TensorInfo&, // output
626  const TransposeConvolution2dDescriptor&, // descriptor
627  const TensorInfo&, // weights
628  const Optional<TensorInfo>&, // biases
629  Optional<std::string&> reasonIfUnsupported) const
630 {
631  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
632 }
633 
635  const TensorInfo&, // output
636  const TransposeDescriptor&, // descriptor
637  Optional<std::string&> reasonIfUnsupported) const
638 {
639  return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
640 }
641 
642 } // namespace armnn
bool IsEqualSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsInputSupported(const TensorInfo &input, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
UnaryOperation m_Operation
Specifies the elementwiseUnary operation to execute.
A ViewsDescriptor for the SplitterLayer.
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< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
bool IsPreluSupported(const TensorInfo &input, const TensorInfo &alpha, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported) const override
A ReshapeDescriptor for the ReshapeLayer.
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< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMemImportSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
bool IsLogSoftmaxSupported(const TensorInfo &input, const TensorInfo &output, const LogSoftmaxDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:70
bool IsTransposeSupported(const TensorInfo &input, const TensorInfo &output, const TransposeDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsQuantizeSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMultiplicationSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsQuantizedLstmSupported(const TensorInfo &input, const TensorInfo &previousCellStateIn, const TensorInfo &previousOutputIn, const TensorInfo &cellStateOut, const TensorInfo &output, const QuantizedLstmInputParamsInfo &paramsInfo, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A Convolution2dDescriptor for the Convolution2dLayer.
bool IsAdditionSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsDebugSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsRsqrtSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsActivationSupported(const TensorInfo &input, const TensorInfo &output, const ActivationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMeanSupported(const TensorInfo &input, const TensorInfo &output, const MeanDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsArgMinMaxSupported(const TensorInfo &input, const TensorInfo &output, const ArgMinMaxDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsGatherSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsSpaceToBatchNdSupported(const TensorInfo &input, const TensorInfo &output, const SpaceToBatchNdDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsSoftmaxSupported(const TensorInfo &input, const TensorInfo &output, const SoftmaxDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsComparisonSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, const ComparisonDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
Copyright (c) 2020 ARM Limited.
bool IsStandInSupported(const std::vector< const TensorInfo *> &inputs, const std::vector< const TensorInfo *> &outputs, const StandInDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsDepthwiseConvolutionSupported(const TensorInfo &input, const TensorInfo &output, const DepthwiseConvolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsL2NormalizationSupported(const TensorInfo &input, const TensorInfo &output, const L2NormalizationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
bool IsSliceSupported(const TensorInfo &input, const TensorInfo &output, const SliceDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsFakeQuantizationSupported(const TensorInfo &input, const FakeQuantizationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
virtual bool IsFillSupported(const TensorInfo &input, const TensorInfo &output, const FillDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsPreCompiledSupported(const TensorInfo &input, const PreCompiledDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsStridedSliceSupported(const TensorInfo &input, const TensorInfo &output, const StridedSliceDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A ResizeDescriptor for the ResizeLayer.
A StackDescriptor for the StackLayer.
A PadDescriptor for the PadLayer.
bool IsSwitchSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output0, const TensorInfo &output1, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMergerSupported(const std::vector< const TensorInfo *> inputs, const TensorInfo &output, const OriginsDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsAbsSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsBatchToSpaceNdSupported(const TensorInfo &input, const TensorInfo &output, const BatchToSpaceNdDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsDivisionSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
An LstmDescriptor for the LstmLayer.
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
A L2NormalizationDescriptor for the L2NormalizationLayer.
An ArgMinMaxDescriptor for ArgMinMaxLayer.
Definition: Descriptors.hpp:51
An OriginsDescriptor for the ConcatLayer.
bool IsPermuteSupported(const TensorInfo &input, const TensorInfo &output, const PermuteDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A FullyConnectedDescriptor for the FullyConnectedLayer.
A FakeQuantizationDescriptor for the FakeQuantizationLayer.
bool IsConvertFp32ToFp16Supported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsElementwiseUnarySupported(const TensorInfo &input, const TensorInfo &output, const ElementwiseUnaryDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsConvertFp16ToFp32Supported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A GatherDescriptor for the GatherLayer.
A StandInDescriptor for the StandIn layer.
bool IsReshapeSupported(const TensorInfo &input, const TensorInfo &output, const ReshapeDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A QLstmDescriptor for the QLstmLayer.
bool IsMergeSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsStackSupported(const std::vector< const TensorInfo *> &inputs, const TensorInfo &output, const StackDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsSpaceToDepthSupported(const TensorInfo &input, const TensorInfo &output, const SpaceToDepthDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:20
bool IsMemCopySupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsInstanceNormalizationSupported(const TensorInfo &input, const TensorInfo &output, const InstanceNormalizationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A SliceDescriptor for the SliceLayer.
bool IsRankSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported) const override
bool IsTransposeConvolution2dSupported(const TensorInfo &input, const TensorInfo &output, const TransposeConvolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
bool IsPadSupported(const TensorInfo &input, const TensorInfo &output, const PadDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMinimumSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsConvertBf16ToFp32Supported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsSplitterSupported(const TensorInfo &input, const ViewsDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
Definition: Descriptors.hpp:90
bool IsConvolution2dSupported(const TensorInfo &input, const TensorInfo &output, const Convolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsSubtractionSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
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< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A MeanDescriptor for the MeanLayer.
bool IsFloorSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsConstantSupported(const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsNormalizationSupported(const TensorInfo &input, const TensorInfo &output, const NormalizationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A TransposeDescriptor for the TransposeLayer.
A StridedSliceDescriptor for the StridedSliceLayer.
bool IsFullyConnectedSupported(const TensorInfo &input, const TensorInfo &output, const TensorInfo &weights, const TensorInfo &biases, const FullyConnectedDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsOutputSupported(const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsResizeSupported(const TensorInfo &input, const TensorInfo &output, const ResizeDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsPooling2dSupported(const TensorInfo &input, const TensorInfo &output, const Pooling2dDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A PreCompiledDescriptor for the PreCompiledLayer.
A Pooling2dDescriptor for the Pooling2dLayer.
A NormalizationDescriptor for the NormalizationLayer.
bool IsConvertFp32ToBf16Supported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsMaximumSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
An InstanceNormalizationDescriptor for InstanceNormalizationLayer.
bool IsDepthToSpaceSupported(const TensorInfo &input, const TensorInfo &output, const DepthToSpaceDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A SoftmaxDescriptor for the SoftmaxLayer.
bool IsConcatSupported(const std::vector< const TensorInfo *> inputs, const TensorInfo &output, const OriginsDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsBatchNormalizationSupported(const TensorInfo &input, const TensorInfo &output, const TensorInfo &mean, const TensorInfo &var, const TensorInfo &beta, const TensorInfo &gamma, const BatchNormalizationDescriptor &descriptor, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsResizeBilinearSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
bool IsGreaterSupported(const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
A FillDescriptor for the FillLayer.
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
bool IsDequantizeSupported(const TensorInfo &input, const TensorInfo &output, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override
A PermuteDescriptor for the PermuteLayer.
bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo &input, const TensorInfo &output, const DepthwiseConvolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, Optional< std::string &> reasonIfUnsupported=EmptyOptional()) const override