blob: d29e95645f2fa19a749a2ade9eed138c708ea134 [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 <layers/LstmLayer.hpp>
11#include <boost/optional.hpp>
telsoa014fcda012018-03-09 14:13:49 +000012
arovir01a6824102018-08-28 17:40:45 +010013#include <boost/optional.hpp>
14
telsoa014fcda012018-03-09 14:13:49 +000015namespace armnn
16{
17
18bool IsActivationSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010019 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000020 const ActivationDescriptor& descriptor,
21 std::string* reasonIfUnsupported = nullptr);
22
23bool IsAdditionSupportedRef(const TensorInfo& input0,
24 const TensorInfo& input1,
25 const TensorInfo& output,
26 std::string* reasonIfUnsupported = nullptr);
27
28bool IsBatchNormalizationSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010029 const TensorInfo& output,
30 const TensorInfo& mean,
31 const TensorInfo& var,
32 const TensorInfo& beta,
33 const TensorInfo& gamma,
telsoa014fcda012018-03-09 14:13:49 +000034 const BatchNormalizationDescriptor& descriptor,
35 std::string* reasonIfUnsupported = nullptr);
36
37bool IsConstantSupportedRef(const TensorInfo& output,
38 std::string* reasonIfUnsupported = nullptr);
39
40bool IsConvolution2dSupportedRef(const TensorInfo& input,
surmeh013537c2c2018-05-18 16:31:43 +010041 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000042 const Convolution2dDescriptor& descriptor,
43 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010044 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000045 std::string* reasonIfUnsupported = nullptr);
46
47bool IsDepthwiseConvolutionSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010048 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000049 const DepthwiseConvolution2dDescriptor& descriptor,
50 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010051 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000052 std::string* reasonIfUnsupported = nullptr);
53
Francis Murtaghe7a86a42018-08-29 12:42:10 +010054bool IsDivisionSupportedRef(const TensorInfo& input0,
55 const TensorInfo& input1,
56 const TensorInfo& output,
57 std::string* reasonIfUnsupported = nullptr);
58
David Beckc2044fe2018-09-05 15:00:38 +010059bool IsSubtractionSupportedRef(const TensorInfo& input0,
60 const TensorInfo& input1,
61 const TensorInfo& output,
62 std::string* reasonIfUnsupported = nullptr);
63
telsoa014fcda012018-03-09 14:13:49 +000064bool IsFullyConnectedSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010065 const TensorInfo& output,
66 const TensorInfo& weights,
67 const TensorInfo& biases,
telsoa014fcda012018-03-09 14:13:49 +000068 const FullyConnectedDescriptor& descriptor,
69 std::string* reasonIfUnsupported = nullptr);
70
71bool IsInputSupportedRef(const TensorInfo& input,
72 std::string* reasonIfUnsupported = nullptr);
73
74bool IsL2NormalizationSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010075 const TensorInfo& output,
Matteo Martincighbcd3c852018-09-28 14:14:12 +010076 const L2NormalizationDescriptor& descriptor,
telsoa014fcda012018-03-09 14:13:49 +000077 std::string* reasonIfUnsupported = nullptr);
78
telsoa01c577f2c2018-08-31 09:22:23 +010079bool IsLstmSupportedRef(const TensorInfo& input, const TensorInfo& outputStateIn,
80 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
81 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
82 const TensorInfo& output, const LstmDescriptor& descriptor,
83 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
84 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
85 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
86 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
87 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
88 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
89 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
90 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
91 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
92
telsoa014fcda012018-03-09 14:13:49 +000093bool IsMergerSupportedRef(const std::vector<const TensorInfo*> inputs,
94 const OriginsDescriptor& descriptor,
95 std::string* reasonIfUnsupported = nullptr);
96
97bool IsMultiplicationSupportedRef(const TensorInfo& input0,
98 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +010099 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000100 std::string* reasonIfUnsupported = nullptr);
101
102bool IsNormalizationSupportedRef(const TensorInfo& input,
103 const TensorInfo& output,
104 const NormalizationDescriptor& descriptor,
105 std::string* reasonIfUnsupported = nullptr);
106
107bool IsOutputSupportedRef(const TensorInfo& output,
108 std::string* reasonIfUnsupported = nullptr);
109
110bool IsPermuteSupportedRef(const TensorInfo& input,
111 const TensorInfo& output,
112 const PermuteDescriptor& descriptor,
113 std::string* reasonIfUnsupported = nullptr);
114
115bool IsPooling2dSupportedRef(const TensorInfo& input,
116 const TensorInfo& output,
117 const Pooling2dDescriptor& descriptor,
118 std::string* reasonIfUnsupported = nullptr);
119
120bool IsResizeBilinearSupportedRef(const TensorInfo& input,
121 std::string* reasonIfUnsupported = nullptr);
122
123bool IsSoftmaxSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100124 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000125 const SoftmaxDescriptor& descriptor,
126 std::string* reasonIfUnsupported = nullptr);
127
128bool IsSplitterSupportedRef(const TensorInfo& input,
129 const ViewsDescriptor& descriptor,
130 std::string* reasonIfUnsupported = nullptr);
131
132bool IsFakeQuantizationSupportedRef(const TensorInfo& input,
133 const FakeQuantizationDescriptor& descriptor,
134 std::string* reasonIfUnsupported = nullptr);
135
136bool IsReshapeSupportedRef(const TensorInfo& input,
137 std::string* reasonIfUnsupported = nullptr);
138
139bool IsFloorSupportedRef(const TensorInfo& input,
140 const TensorInfo& output,
141 std::string* reasonIfUnsupported = nullptr);
142
telsoa01c577f2c2018-08-31 09:22:23 +0100143bool IsConvertFp16ToFp32SupportedRef(const TensorInfo& input,
144 const TensorInfo& output,
145 std::string* reasonIfUnsupported = nullptr);
146
147bool IsConvertFp32ToFp16SupportedRef(const TensorInfo& input,
148 const TensorInfo& output,
149 std::string* reasonIfUnsupported = nullptr);
150
narpra0132b90462018-09-13 11:07:48 +0100151bool IsMeanSupportedRef(const TensorInfo& input,
152 const TensorInfo& output,
153 const MeanDescriptor& descriptor,
154 std::string* reasonIfUnsupported = nullptr);
155
telsoa014fcda012018-03-09 14:13:49 +0000156}