blob: 95b14b3ba6070b49af2b26148447bdd4cb2f64b0 [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>
10
arovir01a6824102018-08-28 17:40:45 +010011#include <boost/optional.hpp>
12
telsoa014fcda012018-03-09 14:13:49 +000013namespace armnn
14{
15
telsoa014fcda012018-03-09 14:13:49 +000016bool IsNeonDirectConvolutionPreferred(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
17
18bool IsNeonNormalizationDescParamsSupported(std::string* reasonIfUnsupported,
19 const NormalizationDescriptor& parameters);
20
21bool IsActivationSupportedNeon(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);
25
26bool IsNeonDepthwiseConvolution2dDescParamsSupported(std::string* reasonIfUnsupported,
27 const DepthwiseConvolution2dDescriptor& parameters,
28 const TensorInfo& weights);
29
30bool IsAdditionSupportedNeon(const TensorInfo& input0,
31 const TensorInfo& input1,
32 const TensorInfo& output,
33 std::string* reasonIfUnsupported);
34
35bool IsBatchNormalizationSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010036 const TensorInfo& output,
37 const TensorInfo& mean,
38 const TensorInfo& var,
39 const TensorInfo& beta,
40 const TensorInfo& gamma,
telsoa014fcda012018-03-09 14:13:49 +000041 const BatchNormalizationDescriptor& descriptor,
42 std::string* reasonIfUnsupported = nullptr);
43
44bool IsConstantSupportedNeon(const TensorInfo& output,
45 std::string* reasonIfUnsupported = nullptr);
46
47bool IsConvolution2dSupportedNeon(const TensorInfo& input,
surmeh013537c2c2018-05-18 16:31:43 +010048 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000049 const Convolution2dDescriptor& 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
telsoa01c577f2c2018-08-31 09:22:23 +010054
telsoa014fcda012018-03-09 14:13:49 +000055bool IsDepthwiseConvolutionSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010056 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000057 const DepthwiseConvolution2dDescriptor& descriptor,
58 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010059 const boost::optional<TensorInfo>& biases,
telsoa014fcda012018-03-09 14:13:49 +000060 std::string* reasonIfUnsupported = nullptr);
61
Francis Murtaghe7a86a42018-08-29 12:42:10 +010062bool IsDivisionSupportedNeon(const TensorInfo& input0,
63 const TensorInfo& input1,
64 const TensorInfo& output,
65 std::string* reasonIfUnsupported = nullptr);
66
David Beckc2044fe2018-09-05 15:00:38 +010067bool IsSubtractionSupportedNeon(const TensorInfo& input0,
68 const TensorInfo& input1,
69 const TensorInfo& output,
70 std::string* reasonIfUnsupported = nullptr);
71
telsoa014fcda012018-03-09 14:13:49 +000072bool IsFullyConnectedSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010073 const TensorInfo& output,
74 const TensorInfo& weights,
75 const TensorInfo& biases,
telsoa014fcda012018-03-09 14:13:49 +000076 const FullyConnectedDescriptor& descriptor,
77 std::string* reasonIfUnsupported = nullptr);
78
79bool IsInputSupportedNeon(const TensorInfo& input,
80 std::string* reasonIfUnsupported = nullptr);
81
82bool IsL2NormalizationSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +010083 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000084 std::string* reasonIfUnsupported = nullptr);
85
86bool IsMergerSupportedNeon(const std::vector<const TensorInfo*> inputs,
87 const OriginsDescriptor& descriptor,
88 std::string* reasonIfUnsupported = nullptr);
89
90bool IsMultiplicationSupportedNeon(const TensorInfo& input0,
91 const TensorInfo& input1,
telsoa01c577f2c2018-08-31 09:22:23 +010092 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +000093 std::string* reasonIfUnsupported = nullptr);
94
95bool IsNormalizationSupportedNeon(const TensorInfo& input,
96 const TensorInfo& output,
97 const NormalizationDescriptor& descriptor,
98 std::string* reasonIfUnsupported = nullptr);
99
100bool IsOutputSupportedNeon(const TensorInfo& output,
101 std::string* reasonIfUnsupported = nullptr);
102
103bool IsPermuteSupportedNeon(const TensorInfo& input,
104 const TensorInfo& output,
105 const PermuteDescriptor& descriptor,
106 std::string* reasonIfUnsupported = nullptr);
107
108bool IsPooling2dSupportedNeon(const TensorInfo& input,
109 const TensorInfo& output,
110 const Pooling2dDescriptor& descriptor,
111 std::string* reasonIfUnsupported = nullptr);
112
113bool IsResizeBilinearSupportedNeon(const TensorInfo& input,
114 std::string* reasonIfUnsupported = nullptr);
115
116bool IsSoftmaxSupportedNeon(const TensorInfo& input,
telsoa01c577f2c2018-08-31 09:22:23 +0100117 const TensorInfo& output,
telsoa014fcda012018-03-09 14:13:49 +0000118 const SoftmaxDescriptor& descriptor,
119 std::string* reasonIfUnsupported = nullptr);
120
121bool IsSplitterSupportedNeon(const TensorInfo& input,
122 const ViewsDescriptor& descriptor,
123 std::string* reasonIfUnsupported = nullptr);
124
125bool IsFakeQuantizationSupportedNeon(const TensorInfo& input,
126 const FakeQuantizationDescriptor& descriptor,
127 std::string* reasonIfUnsupported = nullptr);
128
129bool IsReshapeSupportedNeon(const TensorInfo& input,
130 std::string* reasonIfUnsupported = nullptr);
131
132bool IsFloorSupportedNeon(const TensorInfo& input,
133 const TensorInfo& output,
134 std::string* reasonIfUnsupported = nullptr);
135
telsoa01c577f2c2018-08-31 09:22:23 +0100136bool IsLstmSupportedNeon(const TensorInfo& input, const TensorInfo& outputStateIn,
137 const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
138 const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
139 const TensorInfo& output, const LstmDescriptor& descriptor,
140 const TensorInfo& inputToForgetWeights, const TensorInfo& inputToCellWeights,
141 const TensorInfo& inputToOutputWeights, const TensorInfo& recurrentToForgetWeights,
142 const TensorInfo& recurrentToCellWeights, const TensorInfo& recurrentToOutputWeights,
143 const TensorInfo& forgetGateBias, const TensorInfo& cellBias,
144 const TensorInfo& outputGateBias, const TensorInfo* inputToInputWeights,
145 const TensorInfo* recurrentToInputWeights, const TensorInfo* cellToInputWeights,
146 const TensorInfo* inputGateBias, const TensorInfo* projectionWeights,
147 const TensorInfo* projectionBias, const TensorInfo* cellToForgetWeights,
148 const TensorInfo* cellToOutputWeights, std::string* reasonIfUnsupported = nullptr);
149
150bool IsConvertFp16ToFp32SupportedNeon(const TensorInfo& input,
151 const TensorInfo& output,
152 std::string* reasonIfUnsupported = nullptr);
153
154bool IsConvertFp32ToFp16SupportedNeon(const TensorInfo& input,
155 const TensorInfo& output,
156 std::string* reasonIfUnsupported = nullptr);
157
narpra0132b90462018-09-13 11:07:48 +0100158bool IsMeanSupportedNeon(const TensorInfo& input,
159 const TensorInfo& output,
160 const MeanDescriptor& descriptor,
161 std::string* reasonIfUnsupported = nullptr);
162
telsoa014fcda012018-03-09 14:13:49 +0000163}