ArmNN
 20.11
LayerSupport.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/LayerSupport.hpp>
7 #include <armnn/Optional.hpp>
10 
12 
13 #include <armnn/utility/Assert.hpp>
14 
15 #include <cstring>
16 #include <algorithm>
17 #include <unordered_map>
18 
19 namespace
20 {
21 
22 /// Helper function to copy a full string to a truncated version.
23 void CopyErrorMessage(char* truncatedString, const char* fullString, size_t maxLength)
24 {
25  if(truncatedString != nullptr)
26  {
27  std::snprintf(truncatedString, maxLength, "%s", fullString);
28  }
29 }
30 
31 } // anonymous namespace
32 
33 namespace armnn
34 {
35 
36 // Helper macro to avoid code duplication.
37 // Forwards function func to funcRef, funcNeon or funcCl, depending on the value of backendId.
38 #define FORWARD_LAYER_SUPPORT_FUNC(backendId, func, ...) \
39  std::string reasonIfUnsupportedFull; \
40  bool isSupported; \
41  try { \
42  auto const& backendRegistry = BackendRegistryInstance(); \
43  if (!backendRegistry.IsBackendRegistered(backendId)) \
44  { \
45  std::stringstream ss; \
46  ss << __func__ << " is not supported on " << backendId << " because this backend is not registered."; \
47  reasonIfUnsupportedFull = ss.str(); \
48  isSupported = false; \
49  } \
50  else \
51  { \
52  auto factoryFunc = backendRegistry.GetFactory(backendId); \
53  auto backendObject = factoryFunc(); \
54  auto layerSupportObject = backendObject->GetLayerSupport(); \
55  isSupported = layerSupportObject->func(__VA_ARGS__, Optional<std::string&>(reasonIfUnsupportedFull)); \
56  CopyErrorMessage(reasonIfUnsupported, reasonIfUnsupportedFull.c_str(), reasonIfUnsupportedMaxLength); \
57  } \
58  } catch (const InvalidArgumentException &e) { \
59  /* re-throwing with more context information */ \
60  throw InvalidArgumentException(e, "Failed to check layer support", CHECK_LOCATION()); \
61  } \
62  return isSupported;
63 
64 bool CheckTensorDataTypesEqual(const TensorInfo& input0, const TensorInfo& input1)
65 {
66  return input0.GetDataType() == input1.GetDataType();
67 }
68 
69 bool IsActivationSupported(const BackendId& backend,
70  const TensorInfo& input,
71  const TensorInfo& output,
72  const ActivationDescriptor& descriptor,
73  char* reasonIfUnsupported,
74  size_t reasonIfUnsupportedMaxLength)
75 {
76  FORWARD_LAYER_SUPPORT_FUNC(backend, IsActivationSupported, input, output, descriptor);
77 }
78 
79 bool IsAdditionSupported(const BackendId& backend,
80  const TensorInfo& input0,
81  const TensorInfo& input1,
82  const TensorInfo& output,
83  char* reasonIfUnsupported,
84  size_t reasonIfUnsupportedMaxLength)
85 {
86  if(!CheckTensorDataTypesEqual(input0, input1))
87  {
88  return false;
89  }
90 
91  FORWARD_LAYER_SUPPORT_FUNC(backend, IsAdditionSupported, input0, input1, output);
92 }
93 
94 bool IsArgMinMaxSupported(const BackendId& backend,
95  const TensorInfo& input,
96  const TensorInfo& output,
97  const ArgMinMaxDescriptor& descriptor,
98  char* reasonIfUnsupported,
99  size_t reasonIfUnsupportedMaxLength)
100 {
101  FORWARD_LAYER_SUPPORT_FUNC(backend, IsArgMinMaxSupported, input, output, descriptor);
102 }
103 
105  const TensorInfo& input,
106  const TensorInfo& output,
107  const TensorInfo& mean,
108  const TensorInfo& var,
109  const TensorInfo& beta,
110  const TensorInfo& gamma,
111  const BatchNormalizationDescriptor& descriptor,
112  char* reasonIfUnsupported,
113  size_t reasonIfUnsupportedMaxLength)
114 {
117  input,
118  output,
119  mean,
120  var,
121  beta,
122  gamma,
123  descriptor);
124 }
125 
127  const TensorInfo& input,
128  const TensorInfo& output,
129  const BatchToSpaceNdDescriptor& descriptor,
130  char* reasonIfUnsupported,
131  size_t reasonIfUnsupportedMaxLength)
132 {
135  input,
136  output,
137  descriptor);
138 }
139 
140 bool IsConcatSupported(const BackendId& backend,
141  std::vector<const TensorInfo*> inputs,
142  const TensorInfo& output,
143  const OriginsDescriptor& descriptor,
144  char* reasonIfUnsupported,
145  size_t reasonIfUnsupportedMaxLength)
146 {
147  ARMNN_ASSERT(inputs.size() > 0);
148 
149  FORWARD_LAYER_SUPPORT_FUNC(backend, IsConcatSupported, inputs, output, descriptor);
150 }
151 
152 bool IsConstantSupported(const BackendId& backend,
153  const TensorInfo& output,
154  char* reasonIfUnsupported,
155  size_t reasonIfUnsupportedMaxLength)
156 {
158 }
159 
161  const TensorInfo& input,
162  const TensorInfo& output,
163  char* reasonIfUnsupported,
164  size_t reasonIfUnsupportedMaxLength)
165 {
167 }
168 
170  const TensorInfo& input,
171  const TensorInfo& output,
172  char* reasonIfUnsupported,
173  size_t reasonIfUnsupportedMaxLength)
174 {
176 }
177 
179  const TensorInfo& input,
180  const TensorInfo& output,
181  const Convolution2dDescriptor& descriptor,
182  const TensorInfo& weights,
183  const Optional<TensorInfo>& biases,
184  char* reasonIfUnsupported,
185  size_t reasonIfUnsupportedMaxLength)
186 {
187  FORWARD_LAYER_SUPPORT_FUNC(backend, IsConvolution2dSupported, input, output, descriptor, weights, biases);
188 }
189 
190 bool IsDebugSupported(const BackendId& backend,
191  const TensorInfo& input,
192  const TensorInfo& output,
193  char* reasonIfUnsupported,
194  size_t reasonIfUnsupportedMaxLength)
195 {
196  FORWARD_LAYER_SUPPORT_FUNC(backend, IsDebugSupported, input, output);
197 }
198 
200  const TensorInfo& input,
201  const TensorInfo& output,
202  const DepthwiseConvolution2dDescriptor& descriptor,
203  const TensorInfo& weights,
204  const Optional<TensorInfo>& biases,
205  char* reasonIfUnsupported,
206  size_t reasonIfUnsupportedMaxLength)
207 {
208  if (descriptor.m_DilationX == 1 && descriptor.m_DilationY == 1)
209  {
210  // Pre 19.05 ArmNN did not have the dilation parameters.
211  // This version of IsDepthwiseConvolutionSupported is called for backwards-compatibility
214  input,
215  output,
216  descriptor,
217  weights,
218  biases);
219  }
220  else
221  {
223  IsDilatedDepthwiseConvolutionSupported,
224  input,
225  output,
226  descriptor,
227  weights,
228  biases);
229  }
230 }
231 
232 bool IsDequantizeSupported(const BackendId& backend,
233  const TensorInfo& input,
234  const TensorInfo& output,
235  char* reasonIfUnsupported,
236  size_t reasonIfUnsupportedMaxLength)
237 {
238  FORWARD_LAYER_SUPPORT_FUNC(backend, IsDequantizeSupported, input, output);
239 }
240 
241 bool IsDetectionPostProcessSupported(const BackendId& backend,
242  const TensorInfo& input0,
243  const TensorInfo& input1,
244  const DetectionPostProcessDescriptor& descriptor,
245  char* reasonIfUnsupported,
246  size_t reasonIfUnsupportedMaxLength);
247 
248 bool IsDivisionSupported(const BackendId& backend,
249  const TensorInfo& input0,
250  const TensorInfo& input1,
251  const TensorInfo& output,
252  char* reasonIfUnsupported,
253  size_t reasonIfUnsupportedMaxLength)
254 {
255  FORWARD_LAYER_SUPPORT_FUNC(backend, IsDivisionSupported, input0, input1, output);
256 }
257 
258 bool IsEqualSupported(const BackendId& backend,
259  const TensorInfo& input0,
260  const TensorInfo& input1,
261  const TensorInfo& output,
262  char* reasonIfUnsupported,
263  size_t reasonIfUnsupportedMaxLength)
264 {
266  IsComparisonSupported,
267  input0,
268  input1,
269  output,
271 }
272 
274  const TensorInfo& input,
275  const FakeQuantizationDescriptor& descriptor,
276  char* reasonIfUnsupported,
277  size_t reasonIfUnsupportedMaxLength)
278 {
279  FORWARD_LAYER_SUPPORT_FUNC(backend, IsFakeQuantizationSupported, input, descriptor);
280 }
281 
282 bool IsFloorSupported(const BackendId& backend,
283  const TensorInfo& input,
284  const TensorInfo& output,
285  char* reasonIfUnsupported,
286  size_t reasonIfUnsupportedMaxLength)
287 {
288  // By definition (that is, regardless of compute device), shapes and data type must match.
289  if (input.GetShape() != output.GetShape() || input.GetDataType() != output.GetDataType())
290  {
291  return false;
292  }
293 
294  FORWARD_LAYER_SUPPORT_FUNC(backend, IsFloorSupported, input, output);
295 }
297  const TensorInfo& input,
298  const TensorInfo& output,
299  const TensorInfo& weights,
300  const TensorInfo& biases,
301  const FullyConnectedDescriptor& descriptor,
302  char* reasonIfUnsupported,
303  size_t reasonIfUnsupportedMaxLength)
304 {
305  FORWARD_LAYER_SUPPORT_FUNC(backend, IsFullyConnectedSupported, input, output, weights, biases, descriptor);
306 }
307 
308 ARMNN_DEPRECATED_MSG("Use IsGatherSupported with descriptor instead")
309 bool IsGatherSupported(const BackendId& backend,
310  const TensorInfo& input0,
311  const TensorInfo& input1,
312  const TensorInfo& output,
313  char* reasonIfUnsupported,
314  size_t reasonIfUnsupportedMaxLength)
315 {
316  const GatherDescriptor descriptor{};
317  FORWARD_LAYER_SUPPORT_FUNC(backend, IsGatherSupported, input0, input1, output, descriptor);
318 }
319 
320 bool IsGatherSupported(const BackendId& backend,
321  const TensorInfo& input0,
322  const TensorInfo& input1,
323  const TensorInfo& output,
324  const GatherDescriptor& descriptor,
325  char* reasonIfUnsupported,
326  size_t reasonIfUnsupportedMaxLength)
327 {
328  FORWARD_LAYER_SUPPORT_FUNC(backend, IsGatherSupported, input0, input1, output, descriptor);
329 }
330 
331 bool IsGreaterSupported(const BackendId& backend,
332  const TensorInfo& input0,
333  const TensorInfo& input1,
334  const TensorInfo& output,
335  char* reasonIfUnsupported,
336  size_t reasonIfUnsupportedMaxLength)
337 {
339  IsComparisonSupported,
340  input0,
341  input1,
342  output,
344 }
345 
346 bool IsInputSupported(const BackendId& backend,
347  const TensorInfo& input,
348  char* reasonIfUnsupported,
349  size_t reasonIfUnsupportedMaxLength)
350 {
352 }
353 
354 
356  const TensorInfo& input,
357  const TensorInfo& output,
358  const L2NormalizationDescriptor& descriptor,
359  char* reasonIfUnsupported,
360  size_t reasonIfUnsupportedMaxLength)
361 {
362  FORWARD_LAYER_SUPPORT_FUNC(backend, IsL2NormalizationSupported, input, output, descriptor);
363 }
364 
365 bool IsLstmSupported(const BackendId& backend, const TensorInfo& input, const TensorInfo& outputStateIn,
366  const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
367  const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
368  const TensorInfo& output, const LstmDescriptor& descriptor,
369  const LstmInputParamsInfo& paramsInfo, char* reasonIfUnsupported,
370  size_t reasonIfUnsupportedMaxLength)
371 
372 {
373  FORWARD_LAYER_SUPPORT_FUNC(backend, IsLstmSupported, input, outputStateIn, cellStateIn,
374  scratchBuffer, outputStateOut, cellStateOut,
375  output, descriptor, paramsInfo);
376 }
377 
378 bool IsMaximumSupported(const BackendId& backend,
379  const TensorInfo& input0,
380  const TensorInfo& input1,
381  const TensorInfo& output,
382  char* reasonIfUnsupported,
383  size_t reasonIfUnsupportedMaxLength)
384 {
385  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMaximumSupported, input0, input1, output);
386 }
387 
388 bool IsMeanSupported(const BackendId& backend,
389  const TensorInfo& input,
390  const TensorInfo& output,
391  const MeanDescriptor& descriptor,
392  char* reasonIfUnsupported,
393  size_t reasonIfUnsupportedMaxLength)
394 {
395  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMeanSupported, input, output, descriptor);
396 }
397 
398 bool IsMemCopySupported(const BackendId &backend,
399  const TensorInfo &input,
400  const TensorInfo &output,
401  char *reasonIfUnsupported,
402  size_t reasonIfUnsupportedMaxLength)
403 {
404  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMemCopySupported, input, output);
405 }
406 
407 bool IsMemImportSupported(const BackendId &backend,
408  const TensorInfo &input,
409  const TensorInfo &output,
410  char *reasonIfUnsupported,
411  size_t reasonIfUnsupportedMaxLength)
412 {
413  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMemImportSupported, input, output);
414 }
415 
416 bool IsMergeSupported(const BackendId& backend,
417  const TensorInfo& input0,
418  const TensorInfo& input1,
419  const TensorInfo& output,
420  char* reasonIfUnsupported,
421  size_t reasonIfUnsupportedMaxLength)
422 {
423  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergeSupported, input0, input1, output);
424 }
425 
426 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
427 bool IsMergerSupported(const BackendId& backend,
428  std::vector<const TensorInfo*> inputs,
429  const TensorInfo& output,
430  const OriginsDescriptor& descriptor,
431  char* reasonIfUnsupported,
432  size_t reasonIfUnsupportedMaxLength)
433 {
434  ARMNN_ASSERT(inputs.size() > 0);
435 
437  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergerSupported, inputs, output, descriptor);
439 }
440 
441 bool IsMinimumSupported(const BackendId& backend,
442  const TensorInfo& input0,
443  const TensorInfo& input1,
444  const TensorInfo& output,
445  char* reasonIfUnsupported,
446  size_t reasonIfUnsupportedMaxLength)
447 {
448  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMinimumSupported, input0, input1, output);
449 }
450 
452  const TensorInfo& input0,
453  const TensorInfo& input1,
454  const TensorInfo& output,
455  char* reasonIfUnsupported,
456  size_t reasonIfUnsupportedMaxLength)
457 {
458  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMultiplicationSupported, input0, input1, output);
459 }
460 
462  const TensorInfo& input,
463  const TensorInfo& output,
464  const NormalizationDescriptor& descriptor,
465  char* reasonIfUnsupported,
466  size_t reasonIfUnsupportedMaxLength)
467 {
468  FORWARD_LAYER_SUPPORT_FUNC(backend, IsNormalizationSupported, input, output, descriptor);
469 }
470 
471 bool IsOutputSupported(const BackendId& backend,
472  const TensorInfo& output,
473  char* reasonIfUnsupported,
474  size_t reasonIfUnsupportedMaxLength)
475 {
477 }
478 
479 bool IsPadSupported(const BackendId& backend,
480  const TensorInfo& input,
481  const TensorInfo& output,
482  const PadDescriptor& descriptor,
483  char* reasonIfUnsupported,
484  size_t reasonIfUnsupportedMaxLength)
485 {
486 
487  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPadSupported, input, output, descriptor);
488 }
489 
490 bool IsQuantizeSupported(const BackendId& backend,
491  const TensorInfo& input,
492  const TensorInfo& output,
493  char* reasonIfUnsupported,
494  size_t reasonIfUnsupportedMaxLength)
495 {
496  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQuantizeSupported, input, output);
497 }
498 
499 bool IsQLstmSupported(const BackendId& backend,
500  const TensorInfo& input,
501  const TensorInfo& previousOutputIn,
502  const TensorInfo& previousCellStateIn,
503  const TensorInfo& outputStateOut,
504  const TensorInfo& cellStateOut,
505  const TensorInfo& output,
506  const QLstmDescriptor& descriptor,
507  const LstmInputParamsInfo& paramsInfo,
508  char* reasonIfUnsupported,
509  size_t reasonIfUnsupportedMaxLength)
510 
511 {
512  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQLstmSupported, input, previousOutputIn, previousCellStateIn,
513  outputStateOut, cellStateOut, output, descriptor, paramsInfo);
514 }
515 
517  const TensorInfo& input,
518  const TensorInfo& previousCellStateIn,
519  const TensorInfo& previousOutputIn,
520  const TensorInfo& cellStateOut,
521  const TensorInfo& output,
522  const QuantizedLstmInputParamsInfo& paramsInfo,
523  char* reasonIfUnsupported,
524  size_t reasonIfUnsupportedMaxLength)
525 
526 {
527  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQuantizedLstmSupported, input, previousCellStateIn, previousOutputIn,
528  cellStateOut, output, paramsInfo);
529 }
530 
531 bool IsPermuteSupported(const BackendId& backend,
532  const TensorInfo& input,
533  const TensorInfo& output,
534  const PermuteDescriptor& descriptor,
535  char* reasonIfUnsupported,
536  size_t reasonIfUnsupportedMaxLength)
537 {
538  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPermuteSupported, input, output, descriptor);
539 }
540 
541 bool IsPooling2dSupported(const BackendId& backend,
542  const TensorInfo& input,
543  const TensorInfo& output,
544  const Pooling2dDescriptor& descriptor,
545  char* reasonIfUnsupported,
546  size_t reasonIfUnsupportedMaxLength)
547 {
548  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPooling2dSupported, input, output, descriptor);
549 }
550 
551 bool IsPreluSupported(const BackendId& backend,
552  const TensorInfo& input,
553  const TensorInfo& alpha,
554  const TensorInfo& output,
555  char* reasonIfUnsupported,
556  size_t reasonIfUnsupportedMaxLength)
557 {
558  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPreluSupported, input, alpha, output);
559 }
560 
561 bool IsReshapeSupported(const BackendId& backend,
562  const TensorInfo& input,
563  const TensorInfo& output,
564  const ReshapeDescriptor& descriptor,
565  char* reasonIfUnsupported,
566  size_t reasonIfUnsupportedMaxLength)
567 {
568  FORWARD_LAYER_SUPPORT_FUNC(backend, IsReshapeSupported, input, output, descriptor);
569 }
570 
571 bool IsResizeSupported(const BackendId& backend,
572  const TensorInfo& input,
573  const TensorInfo& output,
574  const ResizeDescriptor& descriptor,
575  char* reasonIfUnsupported,
576  size_t reasonIfUnsupportedMaxLength)
577 {
578  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
579 }
580 
581 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
583  const TensorInfo& input,
584  const TensorInfo& output,
585  char* reasonIfUnsupported,
586  size_t reasonIfUnsupportedMaxLength)
587 {
588  ResizeDescriptor descriptor;
589  descriptor.m_Method = ResizeMethod::Bilinear;
590 
591  const TensorShape& outputShape = output.GetShape();
592  descriptor.m_TargetWidth = outputShape[3];
593  descriptor.m_TargetHeight = outputShape[2];
594 
595  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
596 }
597 
598 bool IsRsqrtSupported(const BackendId& backend,
599  const TensorInfo& input,
600  const TensorInfo& output,
601  char* reasonIfUnsupported,
602  size_t reasonIfUnsupportedMaxLength)
603 {
605  IsElementwiseUnarySupported,
606  input,
607  output,
609 }
610 
611 bool IsSoftmaxSupported(const BackendId& backend,
612  const TensorInfo& input,
613  const TensorInfo& output,
614  const SoftmaxDescriptor& descriptor,
615  char* reasonIfUnsupported,
616  size_t reasonIfUnsupportedMaxLength)
617 {
618  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSoftmaxSupported, input, output, descriptor);
619 }
620 
622  const TensorInfo& input,
623  const TensorInfo& output,
624  const SpaceToBatchNdDescriptor& descriptor,
625  char* reasonIfUnsupported,
626  size_t reasonIfUnsupportedMaxLength)
627 {
628  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToBatchNdSupported, input, output, descriptor);
629 }
630 
631 bool IsSpaceToDepthSupported(const BackendId& backend,
632  const TensorInfo& input,
633  const TensorInfo& output,
634  const SpaceToDepthDescriptor& descriptor,
635  char* reasonIfUnsupported,
636  size_t reasonIfUnsupportedMaxLength)
637 {
638  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToDepthSupported, input, output, descriptor);
639 }
640 
641 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
642 bool IsSplitterSupported(const BackendId& backend,
643  const TensorInfo& input,
644  const ViewsDescriptor& descriptor,
645  char* reasonIfUnsupported,
646  size_t reasonIfUnsupportedMaxLength)
647 {
649  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, descriptor);
651 }
652 
653 bool IsSplitterSupported(const BackendId& backend,
654  const TensorInfo& input,
655  const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
656  const ViewsDescriptor& descriptor,
657  char* reasonIfUnsupported,
658  size_t reasonIfUnsupportedMaxLength)
659 {
660  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, outputs, descriptor);
661 }
662 
663 bool IsStridedSliceSupported(const BackendId& backend,
664  const TensorInfo& input,
665  const TensorInfo& output,
666  const StridedSliceDescriptor& descriptor,
667  char* reasonIfUnsupported,
668  size_t reasonIfUnsupportedMaxLength)
669 {
670  FORWARD_LAYER_SUPPORT_FUNC(backend, IsStridedSliceSupported, input, output, descriptor);
671 }
672 
673 bool IsSubtractionSupported(const BackendId& backend,
674  const TensorInfo& input0,
675  const TensorInfo& input1,
676  const TensorInfo& output,
677  char* reasonIfUnsupported,
678  size_t reasonIfUnsupportedMaxLength)
679 {
680  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSubtractionSupported, input0, input1, output);
681 }
682 
683 bool IsSwitchSupported(const BackendId& backend,
684  const TensorInfo& input0,
685  const TensorInfo& input1,
686  const TensorInfo& output0,
687  const TensorInfo& output1,
688  char* reasonIfUnsupported,
689  size_t reasonIfUnsupportedMaxLength)
690 {
691  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSwitchSupported, input0, input1, output0, output1);
692 }
693 
694 } // namespace armnn
bool IsSoftmaxSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const SoftmaxDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsDequantizeSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsDivisionSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsConvertFp32ToFp16Supported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsConcatSupported(const BackendId &backend, const std::vector< const TensorInfo *> inputs, const TensorInfo &output, const OriginsDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A ViewsDescriptor for the SplitterLayer.
bool IsPooling2dSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const Pooling2dDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
const TensorShape & GetShape() const
Definition: Tensor.hpp:187
bool IsL2NormalizationSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const L2NormalizationDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A ReshapeDescriptor for the ReshapeLayer.
bool IsArgMinMaxSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const ArgMinMaxDescriptor &descriptor, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
bool IsBatchToSpaceNdSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const BatchToSpaceNdDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:73
bool IsMeanSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const MeanDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsMultiplicationSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A Convolution2dDescriptor for the Convolution2dLayer.
bool IsDebugSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsConvertFp16ToFp32Supported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsPreluSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &alpha, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
ResizeMethod m_Method
The Interpolation method to use (Bilinear, NearestNeighbor).
bool IsFullyConnectedSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const TensorInfo &weights, const TensorInfo &biases, const FullyConnectedDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsEqualSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsDepthwiseConvolutionSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const DepthwiseConvolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsGreaterSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsPadSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const PadDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
Copyright (c) 2020 ARM Limited.
bool IsNormalizationSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const NormalizationDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
#define FORWARD_LAYER_SUPPORT_FUNC(backendId, func,...)
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
uint32_t m_DilationY
Dilation factor value for height dimension.
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
bool IsAdditionSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A ResizeDescriptor for the ResizeLayer.
bool IsResizeSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const ResizeDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsFloorSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsInputSupported(const BackendId &backend, const TensorInfo &input, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsMemCopySupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A PadDescriptor for the PadLayer.
bool IsConstantSupported(const BackendId &backend, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsQLstmSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &previousOutputIn, const TensorInfo &previousCellStateIn, const TensorInfo &outputStateOut, const TensorInfo &cellStateOut, const TensorInfo &output, const QLstmDescriptor &descriptor, const LstmInputParamsInfo &paramsInfo, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
An LstmDescriptor for the LstmLayer.
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
uint32_t m_DilationX
Dilation factor value for width dimension.
bool IsRsqrtSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A L2NormalizationDescriptor for the L2NormalizationLayer.
An ArgMinMaxDescriptor for ArgMinMaxLayer.
Definition: Descriptors.hpp:51
bool IsOutputSupported(const BackendId &backend, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
DataType GetDataType() const
Definition: Tensor.hpp:194
An OriginsDescriptor for the ConcatLayer.
bool IsLstmSupported(const BackendId &backend, 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, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A FullyConnectedDescriptor for the FullyConnectedLayer.
bool IsFakeQuantizationSupported(const BackendId &backend, const TensorInfo &input, const FakeQuantizationDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsStridedSliceSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const StridedSliceDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsSubtractionSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A FakeQuantizationDescriptor for the FakeQuantizationLayer.
bool IsResizeBilinearSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
uint32_t m_TargetWidth
Target width value.
A GatherDescriptor for the GatherLayer.
bool IsPermuteSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const PermuteDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsQuantizeSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
A QLstmDescriptor for the QLstmLayer.
bool IsSwitchSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output0, const TensorInfo &output1, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsSpaceToBatchNdSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const SpaceToBatchNdDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsBatchNormalizationSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const TensorInfo &mean, const TensorInfo &var, const TensorInfo &beta, const TensorInfo &gamma, const BatchNormalizationDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsActivationSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const ActivationDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:20
bool IsSplitterSupported(const BackendId &backend, const TensorInfo &input, const ViewsDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
uint32_t m_TargetHeight
Target height value.
bool CheckTensorDataTypesEqual(const TensorInfo &input0, const TensorInfo &input1)
bool IsQuantizedLstmSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &previousCellStateIn, const TensorInfo &previousOutputIn, const TensorInfo &cellStateOut, const TensorInfo &output, const QuantizedLstmInputParamsInfo &paramsInfo, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
Definition: Descriptors.hpp:93
bool IsConvolution2dSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const Convolution2dDescriptor &descriptor, const TensorInfo &weights, const Optional< TensorInfo > &biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A MeanDescriptor for the MeanLayer.
bool IsMergerSupported(const BackendId &backend, const std::vector< const TensorInfo *> inputs, const TensorInfo &output, const OriginsDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
bool IsMaximumSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnSupported=nullptr, size_t reasonIfUnSupportedMaxLength=0)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A StridedSliceDescriptor for the StridedSliceLayer.
#define ARMNN_DEPRECATED_MSG(message)
Definition: Deprecated.hpp:43
bool IsGatherSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
A Pooling2dDescriptor for the Pooling2dLayer.
bool IsSpaceToDepthSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, const SpaceToDepthDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A NormalizationDescriptor for the NormalizationLayer.
bool IsMergeSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A SoftmaxDescriptor for the SoftmaxLayer.
bool IsMemImportSupported(const BackendId &backend, const TensorInfo &input, const TensorInfo &output, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
bool IsMinimumSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const TensorInfo &output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
bool IsDetectionPostProcessSupported(const BackendId &backend, const TensorInfo &input0, const TensorInfo &input1, const DetectionPostProcessDescriptor &descriptor, char *reasonIfUnsupported, size_t reasonIfUnsupportedMaxLength)
A PermuteDescriptor for the PermuteLayer.
bool IsReshapeSupported(const BackendId &backend, const TensorInfo &input, const ReshapeDescriptor &descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)
Deprecated in favor of IBackend and ILayerSupport interfaces.