blob: 80e8488b3ba7160b85c792e0bd134edf87df2f3f [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{
arovir014424b0a2018-10-04 10:46:04 +010016
17class ClLayerSupport : public ILayerSupport
18{
19 // TODO implement
20};
21
telsoa014fcda012018-03-09 14:13:49 +000022bool IsClDirectConvolution2dSupported(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
telsoa014fcda012018-03-09 14:13:49 +000023bool IsClDepthwiseConvolution2dDescParamsSupported(std::string* reasonIfUnsupported,
24 const DepthwiseConvolution2dDescriptor& parameters,
25 const TensorInfo& weights);
26
27bool IsActivationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010028 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000029 const ActivationDescriptor& descriptor,
30 std::string* reasonIfUnsupported = nullptr);
31
32bool IsAdditionSupportedCl(const TensorInfo& input0,
33 const TensorInfo& input1,
34 const TensorInfo& output,
35 std::string* reasonIfUnsupported = nullptr);
36
37bool IsBatchNormalizationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010038 const TensorInfo& output,
39 const TensorInfo& mean,
40 const TensorInfo& var,
41 const TensorInfo& beta,
42 const TensorInfo& gamma,
telsoa014fcda012018-03-09 14:13:49 +000043 const BatchNormalizationDescriptor& descriptor,
44 std::string* reasonIfUnsupported = nullptr);
45
46bool IsConstantSupportedCl(const TensorInfo& output,
47 std::string* reasonIfUnsupported = nullptr);
48
49bool IsConvolution2dSupportedCl(const TensorInfo& input,
surmeh013537c2c2018-05-18 16:31:43 +010050 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000051 const Convolution2dDescriptor& descriptor,
52 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010053 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000054 std::string* reasonIfUnsupported = nullptr);
55
56bool IsDepthwiseConvolutionSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010057 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000058 const DepthwiseConvolution2dDescriptor& descriptor,
59 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010060 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000061 std::string* reasonIfUnsupported = nullptr);
62
Francis Murtaghe7a86a42018-08-29 12:42:10 +010063bool IsDivisionSupportedCl(const TensorInfo& input0,
64 const TensorInfo& input1,
65 const TensorInfo& output,
66 std::string* reasonIfUnsupported = nullptr);
67
David Beckc2044fe2018-09-05 15:00:38 +010068bool IsSubtractionSupportedCl(const TensorInfo& input0,
69 const TensorInfo& input1,
70 const TensorInfo& output,
71 std::string* reasonIfUnsupported = nullptr);
72
telsoa014fcda012018-03-09 14:13:49 +000073bool IsFullyConnectedSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010074 const TensorInfo& output,
75 const TensorInfo& weights,
76 const TensorInfo& biases,
telsoa014fcda012018-03-09 14:13:49 +000077 const FullyConnectedDescriptor& descriptor,
78 std::string* reasonIfUnsupported = nullptr);
79
80bool IsInputSupportedCl(const TensorInfo& input,
81 std::string* reasonIfUnsupported = nullptr);
82
83bool IsL2NormalizationSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010084 const TensorInfo& output,
Matteo Martincighbcd3c852018-09-28 14:14:12 +010085 const L2NormalizationDescriptor& descriptor,
telsoa014fcda012018-03-09 14:13:49 +000086 std::string* reasonIfUnsupported = nullptr);
87
telsoa01c577f2c2018-08-31 09:22:23 +010088bool IsLstmSupportedCl(const TensorInfo& input, const TensorInfo& outputStateIn,
89 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
90 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
91 const TensorInfo& output, const LstmDescriptor& descriptor,
92 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
93 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
94 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
95 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
96 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
97 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
98 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
99 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
100 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
101
telsoa014fcda012018-03-09 14:13:49 +0000102bool IsMergerSupportedCl(const std::vector<const TensorInfo*> inputs,
103 const OriginsDescriptor& descriptor,
104 std::string* reasonIfUnsupported = nullptr);
105
106bool IsMultiplicationSupportedCl(const TensorInfo& input0,
107 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +0100108 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000109 std::string* reasonIfUnsupported = nullptr);
110
111bool IsNormalizationSupportedCl(const TensorInfo& input,
112 const TensorInfo& output,
113 const NormalizationDescriptor& descriptor,
114 std::string* reasonIfUnsupported = nullptr);
115
116bool IsOutputSupportedCl(const TensorInfo& output,
117 std::string* reasonIfUnsupported = nullptr);
118
jimfly01e1fa50c2018-09-21 12:09:51 +0100119bool IsPadSupportedCl(const TensorInfo& input,
120 const TensorInfo& output,
121 const PadDescriptor& descriptor,
122 std::string* reasonIfUnsupported = nullptr);
123
telsoa014fcda012018-03-09 14:13:49 +0000124bool IsPermuteSupportedCl(const TensorInfo& input,
125 const TensorInfo& output,
126 const PermuteDescriptor& descriptor,
127 std::string* reasonIfUnsupported = nullptr);
128
129bool IsPooling2dSupportedCl(const TensorInfo& input,
130 const TensorInfo& output,
131 const Pooling2dDescriptor& descriptor,
132 std::string* reasonIfUnsupported = nullptr);
133
134bool IsResizeBilinearSupportedCl(const TensorInfo& input,
135 std::string* reasonIfUnsupported = nullptr);
136
137bool IsSoftmaxSupportedCl(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100138 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000139 const SoftmaxDescriptor& descriptor,
140 std::string* reasonIfUnsupported = nullptr);
141
142bool IsSplitterSupportedCl(const TensorInfo& input,
143 const ViewsDescriptor& descriptor,
144 std::string* reasonIfUnsupported = nullptr);
145
146bool IsFakeQuantizationSupportedCl(const TensorInfo& input,
147 const FakeQuantizationDescriptor& descriptor,
148 std::string* reasonIfUnsupported = nullptr);
149
150bool IsReshapeSupportedCl(const TensorInfo& input,
151 std::string* reasonIfUnsupported = nullptr);
152
153bool IsFloorSupportedCl(const TensorInfo& input,
154 const TensorInfo& output,
155 std::string* reasonIfUnsupported = nullptr);
telsoa01c577f2c2018-08-31 09:22:23 +0100156
narpra0132b90462018-09-13 11:07:48 +0100157bool IsMeanSupportedCl(const TensorInfo& input,
158 const TensorInfo& output,
159 const MeanDescriptor& descriptor,
160 std::string* reasonIfUnsupported = nullptr);
161
telsoa01c577f2c2018-08-31 09:22:23 +0100162bool IsConvertFp16ToFp32SupportedCl(const TensorInfo& input,
163 const TensorInfo& output,
164 std::string* reasonIfUnsupported = nullptr);
165
166bool IsConvertFp32ToFp16SupportedCl(const TensorInfo& input,
167 const TensorInfo& output,
168 std::string* reasonIfUnsupported = nullptr);
169
telsoa014fcda012018-03-09 14:13:49 +0000170}