blob: ff2e7e387fc1646fc514b65cff33141862b79de0 [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,
telsoa014fcda012018-03-09 14:13:49 +000076 std::string* reasonIfUnsupported = nullptr);
77
telsoa01c577f2c2018-08-31 09:22:23 +010078bool IsLstmSupportedRef(const TensorInfo& input, const TensorInfo& outputStateIn,
79 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
80 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
81 const TensorInfo& output, const LstmDescriptor& descriptor,
82 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
83 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
84 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
85 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
86 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
87 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
88 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
89 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
90 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
91
telsoa014fcda012018-03-09 14:13:49 +000092bool IsMergerSupportedRef(const std::vector<const TensorInfo*> inputs,
93 const OriginsDescriptor& descriptor,
94 std::string* reasonIfUnsupported = nullptr);
95
96bool IsMultiplicationSupportedRef(const TensorInfo& input0,
97 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +010098 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000099 std::string* reasonIfUnsupported = nullptr);
100
101bool IsNormalizationSupportedRef(const TensorInfo& input,
102 const TensorInfo& output,
103 const NormalizationDescriptor& descriptor,
104 std::string* reasonIfUnsupported = nullptr);
105
106bool IsOutputSupportedRef(const TensorInfo& output,
107 std::string* reasonIfUnsupported = nullptr);
108
109bool IsPermuteSupportedRef(const TensorInfo& input,
110 const TensorInfo& output,
111 const PermuteDescriptor& descriptor,
112 std::string* reasonIfUnsupported = nullptr);
113
114bool IsPooling2dSupportedRef(const TensorInfo& input,
115 const TensorInfo& output,
116 const Pooling2dDescriptor& descriptor,
117 std::string* reasonIfUnsupported = nullptr);
118
119bool IsResizeBilinearSupportedRef(const TensorInfo& input,
120 std::string* reasonIfUnsupported = nullptr);
121
122bool IsSoftmaxSupportedRef(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100123 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000124 const SoftmaxDescriptor& descriptor,
125 std::string* reasonIfUnsupported = nullptr);
126
127bool IsSplitterSupportedRef(const TensorInfo& input,
128 const ViewsDescriptor& descriptor,
129 std::string* reasonIfUnsupported = nullptr);
130
131bool IsFakeQuantizationSupportedRef(const TensorInfo& input,
132 const FakeQuantizationDescriptor& descriptor,
133 std::string* reasonIfUnsupported = nullptr);
134
135bool IsReshapeSupportedRef(const TensorInfo& input,
136 std::string* reasonIfUnsupported = nullptr);
137
138bool IsFloorSupportedRef(const TensorInfo& input,
139 const TensorInfo& output,
140 std::string* reasonIfUnsupported = nullptr);
141
telsoa01c577f2c2018-08-31 09:22:23 +0100142bool IsConvertFp16ToFp32SupportedRef(const TensorInfo& input,
143 const TensorInfo& output,
144 std::string* reasonIfUnsupported = nullptr);
145
146bool IsConvertFp32ToFp16SupportedRef(const TensorInfo& input,
147 const TensorInfo& output,
148 std::string* reasonIfUnsupported = nullptr);
149
narpra0132b90462018-09-13 11:07:48 +0100150bool IsMeanSupportedRef(const TensorInfo& input,
151 const TensorInfo& output,
152 const MeanDescriptor& descriptor,
153 std::string* reasonIfUnsupported = nullptr);
154
telsoa014fcda012018-03-09 14:13:49 +0000155}