ArmNN
 20.05
LayerSupport.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. 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 bool IsGatherSupported(const BackendId& backend,
309  const TensorInfo& input0,
310  const TensorInfo& input1,
311  const TensorInfo& output,
312  char* reasonIfUnsupported,
313  size_t reasonIfUnsupportedMaxLength)
314 {
315  FORWARD_LAYER_SUPPORT_FUNC(backend, IsGatherSupported, input0, input1, output);
316 }
317 
318 bool IsGreaterSupported(const BackendId& backend,
319  const TensorInfo& input0,
320  const TensorInfo& input1,
321  const TensorInfo& output,
322  char* reasonIfUnsupported,
323  size_t reasonIfUnsupportedMaxLength)
324 {
326  IsComparisonSupported,
327  input0,
328  input1,
329  output,
331 }
332 
333 bool IsInputSupported(const BackendId& backend,
334  const TensorInfo& input,
335  char* reasonIfUnsupported,
336  size_t reasonIfUnsupportedMaxLength)
337 {
339 }
340 
341 
343  const TensorInfo& input,
344  const TensorInfo& output,
345  const L2NormalizationDescriptor& descriptor,
346  char* reasonIfUnsupported,
347  size_t reasonIfUnsupportedMaxLength)
348 {
349  FORWARD_LAYER_SUPPORT_FUNC(backend, IsL2NormalizationSupported, input, output, descriptor);
350 }
351 
352 bool IsLstmSupported(const BackendId& backend, const TensorInfo& input, const TensorInfo& outputStateIn,
353  const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
354  const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
355  const TensorInfo& output, const LstmDescriptor& descriptor,
356  const LstmInputParamsInfo& paramsInfo, char* reasonIfUnsupported,
357  size_t reasonIfUnsupportedMaxLength)
358 
359 {
360  FORWARD_LAYER_SUPPORT_FUNC(backend, IsLstmSupported, input, outputStateIn, cellStateIn,
361  scratchBuffer, outputStateOut, cellStateOut,
362  output, descriptor, paramsInfo);
363 }
364 
365 bool IsMaximumSupported(const BackendId& backend,
366  const TensorInfo& input0,
367  const TensorInfo& input1,
368  const TensorInfo& output,
369  char* reasonIfUnsupported,
370  size_t reasonIfUnsupportedMaxLength)
371 {
372  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMaximumSupported, input0, input1, output);
373 }
374 
375 bool IsMeanSupported(const BackendId& backend,
376  const TensorInfo& input,
377  const TensorInfo& output,
378  const MeanDescriptor& descriptor,
379  char* reasonIfUnsupported,
380  size_t reasonIfUnsupportedMaxLength)
381 {
382  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMeanSupported, input, output, descriptor);
383 }
384 
385 bool IsMemCopySupported(const BackendId &backend,
386  const TensorInfo &input,
387  const TensorInfo &output,
388  char *reasonIfUnsupported,
389  size_t reasonIfUnsupportedMaxLength)
390 {
391  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMemCopySupported, input, output);
392 }
393 
394 bool IsMemImportSupported(const BackendId &backend,
395  const TensorInfo &input,
396  const TensorInfo &output,
397  char *reasonIfUnsupported,
398  size_t reasonIfUnsupportedMaxLength)
399 {
400  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMemImportSupported, input, output);
401 }
402 
403 bool IsMergeSupported(const BackendId& backend,
404  const TensorInfo& input0,
405  const TensorInfo& input1,
406  const TensorInfo& output,
407  char* reasonIfUnsupported,
408  size_t reasonIfUnsupportedMaxLength)
409 {
410  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergeSupported, input0, input1, output);
411 }
412 
413 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
414 bool IsMergerSupported(const BackendId& backend,
415  std::vector<const TensorInfo*> inputs,
416  const TensorInfo& output,
417  const OriginsDescriptor& descriptor,
418  char* reasonIfUnsupported,
419  size_t reasonIfUnsupportedMaxLength)
420 {
421  ARMNN_ASSERT(inputs.size() > 0);
422 
424  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergerSupported, inputs, output, descriptor);
426 }
427 
428 bool IsMinimumSupported(const BackendId& backend,
429  const TensorInfo& input0,
430  const TensorInfo& input1,
431  const TensorInfo& output,
432  char* reasonIfUnsupported,
433  size_t reasonIfUnsupportedMaxLength)
434 {
435  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMinimumSupported, input0, input1, output);
436 }
437 
439  const TensorInfo& input0,
440  const TensorInfo& input1,
441  const TensorInfo& output,
442  char* reasonIfUnsupported,
443  size_t reasonIfUnsupportedMaxLength)
444 {
445  FORWARD_LAYER_SUPPORT_FUNC(backend, IsMultiplicationSupported, input0, input1, output);
446 }
447 
449  const TensorInfo& input,
450  const TensorInfo& output,
451  const NormalizationDescriptor& descriptor,
452  char* reasonIfUnsupported,
453  size_t reasonIfUnsupportedMaxLength)
454 {
455  FORWARD_LAYER_SUPPORT_FUNC(backend, IsNormalizationSupported, input, output, descriptor);
456 }
457 
458 bool IsOutputSupported(const BackendId& backend,
459  const TensorInfo& output,
460  char* reasonIfUnsupported,
461  size_t reasonIfUnsupportedMaxLength)
462 {
464 }
465 
466 bool IsPadSupported(const BackendId& backend,
467  const TensorInfo& input,
468  const TensorInfo& output,
469  const PadDescriptor& descriptor,
470  char* reasonIfUnsupported,
471  size_t reasonIfUnsupportedMaxLength)
472 {
473 
474  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPadSupported, input, output, descriptor);
475 }
476 
477 bool IsQuantizeSupported(const BackendId& backend,
478  const TensorInfo& input,
479  const TensorInfo& output,
480  char* reasonIfUnsupported,
481  size_t reasonIfUnsupportedMaxLength)
482 {
483  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQuantizeSupported, input, output);
484 }
485 
486 bool IsQLstmSupported(const BackendId& backend,
487  const TensorInfo& input,
488  const TensorInfo& previousOutputIn,
489  const TensorInfo& previousCellStateIn,
490  const TensorInfo& outputStateOut,
491  const TensorInfo& cellStateOut,
492  const TensorInfo& output,
493  const QLstmDescriptor& descriptor,
494  const LstmInputParamsInfo& paramsInfo,
495  char* reasonIfUnsupported,
496  size_t reasonIfUnsupportedMaxLength)
497 
498 {
499  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQLstmSupported, input, previousOutputIn, previousCellStateIn,
500  outputStateOut, cellStateOut, output, descriptor, paramsInfo);
501 }
502 
504  const TensorInfo& input,
505  const TensorInfo& previousCellStateIn,
506  const TensorInfo& previousOutputIn,
507  const TensorInfo& cellStateOut,
508  const TensorInfo& output,
509  const QuantizedLstmInputParamsInfo& paramsInfo,
510  char* reasonIfUnsupported,
511  size_t reasonIfUnsupportedMaxLength)
512 
513 {
514  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQuantizedLstmSupported, input, previousCellStateIn, previousOutputIn,
515  cellStateOut, output, paramsInfo);
516 }
517 
518 bool IsPermuteSupported(const BackendId& backend,
519  const TensorInfo& input,
520  const TensorInfo& output,
521  const PermuteDescriptor& descriptor,
522  char* reasonIfUnsupported,
523  size_t reasonIfUnsupportedMaxLength)
524 {
525  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPermuteSupported, input, output, descriptor);
526 }
527 
528 bool IsPooling2dSupported(const BackendId& backend,
529  const TensorInfo& input,
530  const TensorInfo& output,
531  const Pooling2dDescriptor& descriptor,
532  char* reasonIfUnsupported,
533  size_t reasonIfUnsupportedMaxLength)
534 {
535  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPooling2dSupported, input, output, descriptor);
536 }
537 
538 bool IsPreluSupported(const BackendId& backend,
539  const TensorInfo& input,
540  const TensorInfo& alpha,
541  const TensorInfo& output,
542  char* reasonIfUnsupported,
543  size_t reasonIfUnsupportedMaxLength)
544 {
545  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPreluSupported, input, alpha, output);
546 }
547 
548 bool IsReshapeSupported(const BackendId& backend,
549  const TensorInfo& input,
550  const TensorInfo& output,
551  const ReshapeDescriptor& descriptor,
552  char* reasonIfUnsupported,
553  size_t reasonIfUnsupportedMaxLength)
554 {
555  FORWARD_LAYER_SUPPORT_FUNC(backend, IsReshapeSupported, input, output, descriptor);
556 }
557 
558 bool IsResizeSupported(const BackendId& backend,
559  const TensorInfo& input,
560  const TensorInfo& output,
561  const ResizeDescriptor& descriptor,
562  char* reasonIfUnsupported,
563  size_t reasonIfUnsupportedMaxLength)
564 {
565  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
566 }
567 
568 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
570  const TensorInfo& input,
571  const TensorInfo& output,
572  char* reasonIfUnsupported,
573  size_t reasonIfUnsupportedMaxLength)
574 {
575  ResizeDescriptor descriptor;
576  descriptor.m_Method = ResizeMethod::Bilinear;
577 
578  const TensorShape& outputShape = output.GetShape();
579  descriptor.m_TargetWidth = outputShape[3];
580  descriptor.m_TargetHeight = outputShape[2];
581 
582  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
583 }
584 
585 bool IsRsqrtSupported(const BackendId& backend,
586  const TensorInfo& input,
587  const TensorInfo& output,
588  char* reasonIfUnsupported,
589  size_t reasonIfUnsupportedMaxLength)
590 {
592  IsElementwiseUnarySupported,
593  input,
594  output,
596 }
597 
598 bool IsSoftmaxSupported(const BackendId& backend,
599  const TensorInfo& input,
600  const TensorInfo& output,
601  const SoftmaxDescriptor& descriptor,
602  char* reasonIfUnsupported,
603  size_t reasonIfUnsupportedMaxLength)
604 {
605  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSoftmaxSupported, input, output, descriptor);
606 }
607 
609  const TensorInfo& input,
610  const TensorInfo& output,
611  const SpaceToBatchNdDescriptor& descriptor,
612  char* reasonIfUnsupported,
613  size_t reasonIfUnsupportedMaxLength)
614 {
615  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToBatchNdSupported, input, output, descriptor);
616 }
617 
618 bool IsSpaceToDepthSupported(const BackendId& backend,
619  const TensorInfo& input,
620  const TensorInfo& output,
621  const SpaceToDepthDescriptor& descriptor,
622  char* reasonIfUnsupported,
623  size_t reasonIfUnsupportedMaxLength)
624 {
625  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToDepthSupported, input, output, descriptor);
626 }
627 
628 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
629 bool IsSplitterSupported(const BackendId& backend,
630  const TensorInfo& input,
631  const ViewsDescriptor& descriptor,
632  char* reasonIfUnsupported,
633  size_t reasonIfUnsupportedMaxLength)
634 {
636  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, descriptor);
638 }
639 
640 bool IsSplitterSupported(const BackendId& backend,
641  const TensorInfo& input,
642  const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
643  const ViewsDescriptor& descriptor,
644  char* reasonIfUnsupported,
645  size_t reasonIfUnsupportedMaxLength)
646 {
647  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, outputs, descriptor);
648 }
649 
650 bool IsStridedSliceSupported(const BackendId& backend,
651  const TensorInfo& input,
652  const TensorInfo& output,
653  const StridedSliceDescriptor& descriptor,
654  char* reasonIfUnsupported,
655  size_t reasonIfUnsupportedMaxLength)
656 {
657  FORWARD_LAYER_SUPPORT_FUNC(backend, IsStridedSliceSupported, input, output, descriptor);
658 }
659 
660 bool IsSubtractionSupported(const BackendId& backend,
661  const TensorInfo& input0,
662  const TensorInfo& input1,
663  const TensorInfo& output,
664  char* reasonIfUnsupported,
665  size_t reasonIfUnsupportedMaxLength)
666 {
667  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSubtractionSupported, input0, input1, output);
668 }
669 
670 bool IsSwitchSupported(const BackendId& backend,
671  const TensorInfo& input0,
672  const TensorInfo& input1,
673  const TensorInfo& output0,
674  const TensorInfo& output1,
675  char* reasonIfUnsupported,
676  size_t reasonIfUnsupportedMaxLength)
677 {
678  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSwitchSupported, input0, input1, output0, output1);
679 }
680 
681 } // 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:88
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:70
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:95
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.
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:90
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.