blob: 700d71801d88219fc3a28b729c76d7ba309c832d [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
7#include <armnn/DescriptorsFwd.hpp>
8#include <armnn/Types.hpp>
9#include <armnn/Tensor.hpp>
telsoa01c577f2c2018-08-31 09:22:23 +010010#include <armnn/ArmNN.hpp>
telsoa014fcda012018-03-09 14:13:49 +000011
arovir01a6824102018-08-28 17:40:45 +010012#include <boost/optional.hpp>
13
telsoa014fcda012018-03-09 14:13:49 +000014namespace armnn
15{
16bool IsClDirectConvolution2dSupported(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
telsoa014fcda012018-03-09 14:13:49 +000017bool IsClDepthwiseConvolution2dDescParamsSupported(std::string* reasonIfUnsupported,
18 const DepthwiseConvolution2dDescriptor& parameters,
19 const TensorInfo& weights);
20
21bool IsActivationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010022 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000023 const ActivationDescriptor& descriptor,
24 std::string* reasonIfUnsupported = nullptr);
25
26bool IsAdditionSupportedCl(const TensorInfo& input0,
27 const TensorInfo& input1,
28 const TensorInfo& output,
29 std::string* reasonIfUnsupported = nullptr);
30
31bool IsBatchNormalizationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010032 const TensorInfo& output,
33 const TensorInfo& mean,
34 const TensorInfo& var,
35 const TensorInfo& beta,
36 const TensorInfo& gamma,
telsoa014fcda012018-03-09 14:13:49 +000037 const BatchNormalizationDescriptor& descriptor,
38 std::string* reasonIfUnsupported = nullptr);
39
40bool IsConstantSupportedCl(const TensorInfo& output,
41 std::string* reasonIfUnsupported = nullptr);
42
43bool IsConvolution2dSupportedCl(const TensorInfo& input,
surmeh013537c2c2018-05-18 16:31:43 +010044 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000045 const Convolution2dDescriptor& descriptor,
46 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010047 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000048 std::string* reasonIfUnsupported = nullptr);
49
50bool IsDepthwiseConvolutionSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010051 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000052 const DepthwiseConvolution2dDescriptor& descriptor,
53 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010054 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000055 std::string* reasonIfUnsupported = nullptr);
56
Francis Murtaghe7a86a42018-08-29 12:42:10 +010057bool IsDivisionSupportedCl(const TensorInfo& input0,
58 const TensorInfo& input1,
59 const TensorInfo& output,
60 std::string* reasonIfUnsupported = nullptr);
61
David Beckc2044fe2018-09-05 15:00:38 +010062bool IsSubtractionSupportedCl(const TensorInfo& input0,
63 const TensorInfo& input1,
64 const TensorInfo& output,
65 std::string* reasonIfUnsupported = nullptr);
66
telsoa014fcda012018-03-09 14:13:49 +000067bool IsFullyConnectedSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010068 const TensorInfo& output,
69 const TensorInfo& weights,
70 const TensorInfo& biases,
telsoa014fcda012018-03-09 14:13:49 +000071 const FullyConnectedDescriptor& descriptor,
72 std::string* reasonIfUnsupported = nullptr);
73
74bool IsInputSupportedCl(const TensorInfo& input,
75 std::string* reasonIfUnsupported = nullptr);
76
77bool IsL2NormalizationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010078 const TensorInfo& output,
Matteo Martincighbcd3c852018-09-28 14:14:12 +010079 const L2NormalizationDescriptor& descriptor,
telsoa014fcda012018-03-09 14:13:49 +000080 std::string* reasonIfUnsupported = nullptr);
81
telsoa01c577f2c2018-08-31 09:22:23 +010082bool IsLstmSupportedCl(const TensorInfo& input, const TensorInfo& outputStateIn,
83 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
84 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
85 const TensorInfo& output, const LstmDescriptor& descriptor,
86 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
87 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
88 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
89 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
90 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
91 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
92 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
93 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
94 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
95
telsoa014fcda012018-03-09 14:13:49 +000096bool IsMergerSupportedCl(const std::vector<const TensorInfo*> inputs,
97 const OriginsDescriptor& descriptor,
98 std::string* reasonIfUnsupported = nullptr);
99
100bool IsMultiplicationSupportedCl(const TensorInfo& input0,
101 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +0100102 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000103 std::string* reasonIfUnsupported = nullptr);
104
105bool IsNormalizationSupportedCl(const TensorInfo& input,
106 const TensorInfo& output,
107 const NormalizationDescriptor& descriptor,
108 std::string* reasonIfUnsupported = nullptr);
109
110bool IsOutputSupportedCl(const TensorInfo& output,
111 std::string* reasonIfUnsupported = nullptr);
112
jimfly01e1fa50c2018-09-21 12:09:51 +0100113bool IsPadSupportedCl(const TensorInfo& input,
114 const TensorInfo& output,
115 const PadDescriptor& descriptor,
116 std::string* reasonIfUnsupported = nullptr);
117
telsoa014fcda012018-03-09 14:13:49 +0000118bool IsPermuteSupportedCl(const TensorInfo& input,
119 const TensorInfo& output,
120 const PermuteDescriptor& descriptor,
121 std::string* reasonIfUnsupported = nullptr);
122
123bool IsPooling2dSupportedCl(const TensorInfo& input,
124 const TensorInfo& output,
125 const Pooling2dDescriptor& descriptor,
126 std::string* reasonIfUnsupported = nullptr);
127
128bool IsResizeBilinearSupportedCl(const TensorInfo& input,
129 std::string* reasonIfUnsupported = nullptr);
130
131bool IsSoftmaxSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100132 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000133 const SoftmaxDescriptor& descriptor,
134 std::string* reasonIfUnsupported = nullptr);
135
136bool IsSplitterSupportedCl(const TensorInfo& input,
137 const ViewsDescriptor& descriptor,
138 std::string* reasonIfUnsupported = nullptr);
139
140bool IsFakeQuantizationSupportedCl(const TensorInfo& input,
141 const FakeQuantizationDescriptor& descriptor,
142 std::string* reasonIfUnsupported = nullptr);
143
144bool IsReshapeSupportedCl(const TensorInfo& input,
145 std::string* reasonIfUnsupported = nullptr);
146
147bool IsFloorSupportedCl(const TensorInfo& input,
148 const TensorInfo& output,
149 std::string* reasonIfUnsupported = nullptr);
telsoa01c577f2c2018-08-31 09:22:23 +0100150
narpra0132b90462018-09-13 11:07:48 +0100151bool IsMeanSupportedCl(const TensorInfo& input,
152 const TensorInfo& output,
153 const MeanDescriptor& descriptor,
154 std::string* reasonIfUnsupported = nullptr);
155
telsoa01c577f2c2018-08-31 09:22:23 +0100156bool IsConvertFp16ToFp32SupportedCl(const TensorInfo& input,
157 const TensorInfo& output,
158 std::string* reasonIfUnsupported = nullptr);
159
160bool IsConvertFp32ToFp16SupportedCl(const TensorInfo& input,
161 const TensorInfo& output,
162 std::string* reasonIfUnsupported = nullptr);
163
telsoa014fcda012018-03-09 14:13:49 +0000164}