ArmNN
 20.02
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 <boost/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  BOOST_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  BOOST_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 
487  const TensorInfo& input,
488  const TensorInfo& previousCellStateIn,
489  const TensorInfo& previousOutputIn,
490  const TensorInfo& cellStateOut,
491  const TensorInfo& output,
492  const QuantizedLstmInputParamsInfo& paramsInfo,
493  char* reasonIfUnsupported,
494  size_t reasonIfUnsupportedMaxLength)
495 
496 {
497  FORWARD_LAYER_SUPPORT_FUNC(backend, IsQuantizedLstmSupported, input, previousCellStateIn, previousOutputIn,
498  cellStateOut, output, paramsInfo);
499 }
500 
501 bool IsPermuteSupported(const BackendId& backend,
502  const TensorInfo& input,
503  const TensorInfo& output,
504  const PermuteDescriptor& descriptor,
505  char* reasonIfUnsupported,
506  size_t reasonIfUnsupportedMaxLength)
507 {
508  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPermuteSupported, input, output, descriptor);
509 }
510 
511 bool IsPooling2dSupported(const BackendId& backend,
512  const TensorInfo& input,
513  const TensorInfo& output,
514  const Pooling2dDescriptor& descriptor,
515  char* reasonIfUnsupported,
516  size_t reasonIfUnsupportedMaxLength)
517 {
518  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPooling2dSupported, input, output, descriptor);
519 }
520 
521 bool IsPreluSupported(const BackendId& backend,
522  const TensorInfo& input,
523  const TensorInfo& alpha,
524  const TensorInfo& output,
525  char* reasonIfUnsupported,
526  size_t reasonIfUnsupportedMaxLength)
527 {
528  FORWARD_LAYER_SUPPORT_FUNC(backend, IsPreluSupported, input, alpha, output);
529 }
530 
531 bool IsReshapeSupported(const BackendId& backend,
532  const TensorInfo& input,
533  const TensorInfo& output,
534  const ReshapeDescriptor& descriptor,
535  char* reasonIfUnsupported,
536  size_t reasonIfUnsupportedMaxLength)
537 {
538  FORWARD_LAYER_SUPPORT_FUNC(backend, IsReshapeSupported, input, output, descriptor);
539 }
540 
541 bool IsResizeSupported(const BackendId& backend,
542  const TensorInfo& input,
543  const TensorInfo& output,
544  const ResizeDescriptor& descriptor,
545  char* reasonIfUnsupported,
546  size_t reasonIfUnsupportedMaxLength)
547 {
548  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
549 }
550 
551 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
553  const TensorInfo& input,
554  const TensorInfo& output,
555  char* reasonIfUnsupported,
556  size_t reasonIfUnsupportedMaxLength)
557 {
558  ResizeDescriptor descriptor;
559  descriptor.m_Method = ResizeMethod::Bilinear;
560 
561  const TensorShape& outputShape = output.GetShape();
562  descriptor.m_TargetWidth = outputShape[3];
563  descriptor.m_TargetHeight = outputShape[2];
564 
565  FORWARD_LAYER_SUPPORT_FUNC(backend, IsResizeSupported, input, output, descriptor);
566 }
567 
568 bool IsRsqrtSupported(const BackendId& backend,
569  const TensorInfo& input,
570  const TensorInfo& output,
571  char* reasonIfUnsupported,
572  size_t reasonIfUnsupportedMaxLength)
573 {
575  IsElementwiseUnarySupported,
576  input,
577  output,
579 }
580 
581 bool IsSoftmaxSupported(const BackendId& backend,
582  const TensorInfo& input,
583  const TensorInfo& output,
584  const SoftmaxDescriptor& descriptor,
585  char* reasonIfUnsupported,
586  size_t reasonIfUnsupportedMaxLength)
587 {
588  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSoftmaxSupported, input, output, descriptor);
589 }
590 
592  const TensorInfo& input,
593  const TensorInfo& output,
594  const SpaceToBatchNdDescriptor& descriptor,
595  char* reasonIfUnsupported,
596  size_t reasonIfUnsupportedMaxLength)
597 {
598  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToBatchNdSupported, input, output, descriptor);
599 }
600 
601 bool IsSpaceToDepthSupported(const BackendId& backend,
602  const TensorInfo& input,
603  const TensorInfo& output,
604  const SpaceToDepthDescriptor& descriptor,
605  char* reasonIfUnsupported,
606  size_t reasonIfUnsupportedMaxLength)
607 {
608  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSpaceToDepthSupported, input, output, descriptor);
609 }
610 
611 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
612 bool IsSplitterSupported(const BackendId& backend,
613  const TensorInfo& input,
614  const ViewsDescriptor& descriptor,
615  char* reasonIfUnsupported,
616  size_t reasonIfUnsupportedMaxLength)
617 {
619  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, descriptor);
621 }
622 
623 bool IsSplitterSupported(const BackendId& backend,
624  const TensorInfo& input,
625  const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
626  const ViewsDescriptor& descriptor,
627  char* reasonIfUnsupported,
628  size_t reasonIfUnsupportedMaxLength)
629 {
630  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSplitterSupported, input, outputs, descriptor);
631 }
632 
633 bool IsStridedSliceSupported(const BackendId& backend,
634  const TensorInfo& input,
635  const TensorInfo& output,
636  const StridedSliceDescriptor& descriptor,
637  char* reasonIfUnsupported,
638  size_t reasonIfUnsupportedMaxLength)
639 {
640  FORWARD_LAYER_SUPPORT_FUNC(backend, IsStridedSliceSupported, input, output, descriptor);
641 }
642 
643 bool IsSubtractionSupported(const BackendId& backend,
644  const TensorInfo& input0,
645  const TensorInfo& input1,
646  const TensorInfo& output,
647  char* reasonIfUnsupported,
648  size_t reasonIfUnsupportedMaxLength)
649 {
650  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSubtractionSupported, input0, input1, output);
651 }
652 
653 bool IsSwitchSupported(const BackendId& backend,
654  const TensorInfo& input0,
655  const TensorInfo& input1,
656  const TensorInfo& output0,
657  const TensorInfo& output1,
658  char* reasonIfUnsupported,
659  size_t reasonIfUnsupportedMaxLength)
660 {
661  FORWARD_LAYER_SUPPORT_FUNC(backend, IsSwitchSupported, input0, input1, output0, output1);
662 }
663 
664 } // 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:62
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.
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:43
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)
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:82
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.