blob: 058d6946f65b8d79f06e23338abf223e2255d72a [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
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00007#include <armnn/ArmNN.hpp>
8#include <armnn/Tensor.hpp>
9
10#include <Half.hpp>
Francis Murtagh46c09d02019-05-28 08:15:28 +010011#include "TensorCopyUtils.hpp"
12#include "WorkloadTestUtils.hpp"
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +010013#include "TensorUtils.hpp"
14#include "Permute.hpp"
telsoa014fcda012018-03-09 14:13:49 +000015
Francis Murtagh46c09d02019-05-28 08:15:28 +010016#include <backendsCommon/CpuTensorHandle.hpp>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000017#include <backendsCommon/IBackendInternal.hpp>
18#include <backendsCommon/IMemoryManager.hpp>
Francis Murtagh46c09d02019-05-28 08:15:28 +010019#include <reference/workloads/Decoders.hpp>
20#include <reference/workloads/Encoders.hpp>
21#include <test/TensorHelpers.hpp>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000022
telsoa014fcda012018-03-09 14:13:49 +000023#include <boost/multi_array.hpp>
24#include <boost/assert.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000025
telsoa014fcda012018-03-09 14:13:49 +000026#include <array>
27
telsoa01c577f2c2018-08-31 09:22:23 +010028// Layer callables.
telsoa014fcda012018-03-09 14:13:49 +000029
30namespace armnn
31{
32class IWorkloadFactory;
33}
34
35template <std::size_t n>
36boost::array<unsigned int, n> GetTensorShapeAsArray(const armnn::TensorInfo& tensorInfo)
37{
38 BOOST_ASSERT_MSG(n == tensorInfo.GetNumDimensions(),
39 "Attempting to construct a shape array of mismatching size");
40
41 boost::array<unsigned int, n> shape;
42 for (unsigned int i = 0; i < n; i++)
43 {
44 shape[i] = tensorInfo.GetShape()[i];
45 }
46 return shape;
47}
48
49template <typename T, std::size_t n>
50struct LayerTestResult
51{
52 LayerTestResult(const armnn::TensorInfo& outputInfo)
53 {
54 auto shape( GetTensorShapeAsArray<n>(outputInfo) );
55 output.resize(shape);
56 outputExpected.resize(shape);
57 supported = true;
kevmay012b4d88e2019-01-24 14:05:09 +000058 compareBoolean = false;
telsoa014fcda012018-03-09 14:13:49 +000059 }
60
61 boost::multi_array<T, n> output;
62 boost::multi_array<T, n> outputExpected;
63 bool supported;
kevmay012b4d88e2019-01-24 14:05:09 +000064 bool compareBoolean;
telsoa014fcda012018-03-09 14:13:49 +000065};
66
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000067LayerTestResult<float, 4> SimpleConvolution2d3x5Test(
68 armnn::IWorkloadFactory& workloadFactory,
69 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
70 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +000071 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000072
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000073LayerTestResult<float, 4> SimpleConvolution2d3x3Test(
74 armnn::IWorkloadFactory& workloadFactory,
75 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
76 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +000077 const armnn::DataLayout layout);
Francis Murtaghd59116e2018-10-04 16:03:07 +010078
Mike Kelly7332ed82018-12-20 17:03:06 +000079LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test(
80 armnn::IWorkloadFactory& workloadFactory,
81 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
82 bool biasEnabled,
83 const armnn::DataLayout layout);
84
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000085LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest(
86 armnn::IWorkloadFactory& workloadFactory,
87 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
88 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +000089
Teresa Charlinedeeb162019-06-14 11:09:19 +010090LayerTestResult<float, 4> Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000091 armnn::IWorkloadFactory& workloadFactory,
92 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Teresa Charlinedeeb162019-06-14 11:09:19 +010093 armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000094
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000095LayerTestResult<float, 4> Convolution2dAsymmetricPaddingTest(
96 armnn::IWorkloadFactory& workloadFactory,
97 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Teresa Charlinedeeb162019-06-14 11:09:19 +010098 armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000099
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000100LayerTestResult<float, 4> Convolution1dTest(
101 armnn::IWorkloadFactory& workloadFactory,
102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
103 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000104
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000105LayerTestResult<uint8_t, 4> Convolution1dUint8Test(
106 armnn::IWorkloadFactory& workloadFactory,
107 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
108 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000109
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000110LayerTestResult<float, 4> DepthwiseConvolution2dTest(
111 armnn::IWorkloadFactory& workloadFactory,
112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
113 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000114 const armnn::DataLayout layout);
Nikhil Rajcec6b652018-10-12 13:51:57 +0100115
Teresa Charlinedeeb162019-06-14 11:09:19 +0100116template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
117LayerTestResult<T, 4> Convolution2d3x3Dilation3x3Test(
118 armnn::IWorkloadFactory& workloadFactory,
119 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
120 bool biasEnabled,
121 const armnn::DataLayout layout);
122
123template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
124LayerTestResult<T, 4> Convolution2d2x3x3Dilation3x3Test(
125 armnn::IWorkloadFactory& workloadFactory,
126 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
127 bool biasEnabled,
128 const armnn::DataLayout layout);
129
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000130LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
131 armnn::IWorkloadFactory& workloadFactory,
132 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
133 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000134
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000135LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
136 armnn::IWorkloadFactory& workloadFactory,
137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
138 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000139 const armnn::DataLayout layout);
surmeh013537c2c2018-05-18 16:31:43 +0100140
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000141LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
142 armnn::IWorkloadFactory& workloadFactory,
143 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
144 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000145 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000146
Bruno Goncalves22972f02019-04-26 21:03:24 -0300147LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(armnn::IWorkloadFactory& workloadFactory,
148 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
149
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000150LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
151 armnn::IWorkloadFactory& workloadFactory,
152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
153 armnn::IWorkloadFactory& refWorkloadFactory,
154 const armnn::DataLayout layout);
155
156LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
157 armnn::IWorkloadFactory& workloadFactory,
158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
159 armnn::IWorkloadFactory& refWorkloadFactory,
160 const armnn::DataLayout layout);
161
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000162LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
165 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000166
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000167LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
168 armnn::IWorkloadFactory& workloadFactory,
169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
170 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000171
Teresa Charlin0434df62019-06-06 13:40:35 +0100172LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
173 armnn::IWorkloadFactory& workloadFactory,
174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
175 bool forceNoPadding);
176
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000177LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 bool forceNoPadding);
181
182LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
183 armnn::IWorkloadFactory& workloadFactory,
184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
185 bool forceNoPadding );
186
Teresa Charlin0434df62019-06-06 13:40:35 +0100187LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000188 armnn::IWorkloadFactory& workloadFactory,
Teresa Charlin0434df62019-06-06 13:40:35 +0100189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
190 bool forceNoPadding );
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000191
192LayerTestResult<float, 4> SimpleMaxPooling2dTest(
193 armnn::IWorkloadFactory& workloadFactory,
194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000195 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000196
197LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
198 armnn::IWorkloadFactory& workloadFactory,
199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000200 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000201
Teresa Charlin0434df62019-06-06 13:40:35 +0100202LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
203 armnn::IWorkloadFactory& workloadFactory,
204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205 const armnn::DataLayout dataLayout);
206
207LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
210
211LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
212 armnn::IWorkloadFactory& workloadFactory,
213 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
214
215LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
216 armnn::IWorkloadFactory& workloadFactory,
217 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
218
219LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
220 armnn::IWorkloadFactory& workloadFactory,
221 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
222
223LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
224 armnn::IWorkloadFactory& workloadFactory,
225 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
226
227LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
228 armnn::IWorkloadFactory& workloadFactory,
229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
230
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000231LayerTestResult<float, 4> SimpleAveragePooling2dTest(
232 armnn::IWorkloadFactory& workloadFactory,
233 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000234 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000235
236LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
237 armnn::IWorkloadFactory& workloadFactory,
238 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000239 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000240
Teresa Charlin0434df62019-06-06 13:40:35 +0100241LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
242 armnn::IWorkloadFactory& workloadFactory,
243 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
244 const armnn::DataLayout dataLayout);
245
246LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
247 armnn::IWorkloadFactory& workloadFactory,
248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
249
250LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
251 armnn::IWorkloadFactory& workloadFactory,
252 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
253
254LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
255 armnn::IWorkloadFactory& workloadFactory,
256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
257
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000258LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
259 armnn::IWorkloadFactory& workloadFactory,
260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
261 bool forceNoPadding);
262
263LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
264 armnn::IWorkloadFactory& workloadFactory,
265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
266
267LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
268 armnn::IWorkloadFactory& workloadFactory,
269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
270
Teresa Charlin0434df62019-06-06 13:40:35 +0100271LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
272 armnn::IWorkloadFactory& workloadFactory,
273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
274
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000275LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
276 armnn::IWorkloadFactory& workloadFactory,
277 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
278
telsoa014fcda012018-03-09 14:13:49 +0000279LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000280 armnn::IWorkloadFactory& workloadFactory,
281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000282
Teresa Charlin0434df62019-06-06 13:40:35 +0100283LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
284 armnn::IWorkloadFactory& workloadFactory,
285 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
286
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000287LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
288 armnn::IWorkloadFactory& workloadFactory,
289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000290
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000291LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
292 armnn::IWorkloadFactory& workloadFactory,
293 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000294
Teresa Charlin0434df62019-06-06 13:40:35 +0100295LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
296 armnn::IWorkloadFactory& workloadFactory,
297 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
298
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000299LayerTestResult<float, 4> SimpleL2Pooling2dTest(
300 armnn::IWorkloadFactory& workloadFactory,
301 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000302 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000303
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000304LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
305 armnn::IWorkloadFactory& workloadFactory,
306 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000307 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000308
Teresa Charlin0434df62019-06-06 13:40:35 +0100309LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
310 armnn::IWorkloadFactory& workloadFactory,
311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
312 const armnn::DataLayout dataLayout);
313
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000314LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
315 armnn::IWorkloadFactory& workloadFactory,
316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000317
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000318LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
319 armnn::IWorkloadFactory& workloadFactory,
320 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000321
Teresa Charlin0434df62019-06-06 13:40:35 +0100322LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
323 armnn::IWorkloadFactory& workloadFactory,
324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
325
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000326LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
327 armnn::IWorkloadFactory& workloadFactory,
328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000329
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000330LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
331 armnn::IWorkloadFactory& workloadFactory,
332 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000333
Teresa Charlin0434df62019-06-06 13:40:35 +0100334LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
335 armnn::IWorkloadFactory& workloadFactory,
336 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
337
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000338LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
339 armnn::IWorkloadFactory& workloadFactory,
340 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000341
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000342LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
343 armnn::IWorkloadFactory& workloadFactory,
344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000345
Teresa Charlin0434df62019-06-06 13:40:35 +0100346LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
347 armnn::IWorkloadFactory& workloadFactory,
348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
349
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000350LayerTestResult<float, 4> L2Pooling2dSize7Test(
351 armnn::IWorkloadFactory& workloadFactory,
352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000353
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000354LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
355 armnn::IWorkloadFactory& workloadFactory,
356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000357
Teresa Charlin0434df62019-06-06 13:40:35 +0100358LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
359 armnn::IWorkloadFactory& workloadFactory,
360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
361
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000362LayerTestResult<float, 4> L2Pooling2dSize9Test(
363 armnn::IWorkloadFactory& workloadFactory,
364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000365
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000366LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
367 armnn::IWorkloadFactory& workloadFactory,
368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
369
Teresa Charlin0434df62019-06-06 13:40:35 +0100370LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000371 armnn::IWorkloadFactory& workloadFactory,
372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
373
374LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
375 armnn::IWorkloadFactory& workloadFactory,
376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
377
378LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
379 armnn::IWorkloadFactory& workloadFactory,
380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
381
Teresa Charlin0434df62019-06-06 13:40:35 +0100382LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
383 armnn::IWorkloadFactory& workloadFactory,
384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
385
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000386LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
387 armnn::IWorkloadFactory& workloadFactory,
388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
389
390LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
391 armnn::IWorkloadFactory& workloadFactory,
392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
393
Teresa Charlin0434df62019-06-06 13:40:35 +0100394LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
395 armnn::IWorkloadFactory& workloadFactory,
396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
397
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000398LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
399 armnn::IWorkloadFactory& workloadFactory,
400 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
401
402LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
403 armnn::IWorkloadFactory& workloadFactory,
404 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
405
Teresa Charlin0434df62019-06-06 13:40:35 +0100406LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
407 armnn::IWorkloadFactory& workloadFactory,
408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
409
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000410LayerTestResult<float, 4> ComparePooling2dTest(
411 armnn::IWorkloadFactory& workloadFactory,
412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
413 armnn::IWorkloadFactory& refWorkloadFactory,
414 armnn::PoolingAlgorithm poolingType);
415
416LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
417 armnn::IWorkloadFactory& workloadFactory,
418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
419 armnn::IWorkloadFactory& refWorkloadFactory,
420 armnn::PoolingAlgorithm poolingType);
421
Teresa Charlin0434df62019-06-06 13:40:35 +0100422LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
423 armnn::IWorkloadFactory& workloadFactory,
424 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
425 armnn::IWorkloadFactory& refWorkloadFactory,
426 armnn::PoolingAlgorithm poolingType);
427
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000428LayerTestResult<float, 4> ConstantLinearActivationTest(
429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
431
432LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
433 armnn::IWorkloadFactory& workloadFactory,
434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
435
436LayerTestResult<float, 4> SimpleNormalizationWithinTest(
437 armnn::IWorkloadFactory& workloadFactory,
438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
439
440LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
441 armnn::IWorkloadFactory& workloadFactory,
442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
443
444LayerTestResult<float, 2> SimpleSoftmaxTest(
445 armnn::IWorkloadFactory& workloadFactory,
446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
447 float beta);
448
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000449LayerTestResult<float, 3> Simple3dSoftmaxTest(
450 armnn::IWorkloadFactory& workloadFactory,
451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
452 float beta);
453
454LayerTestResult<float, 4> Simple4dSoftmaxTest(
455 armnn::IWorkloadFactory& workloadFactory,
456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
457 float beta);
458
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000459LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
460 armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
462 float beta);
463
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000464LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
465 armnn::IWorkloadFactory& workloadFactory,
466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
467 float beta);
468
469LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
470 armnn::IWorkloadFactory& workloadFactory,
471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
472 float beta);
473
nikraj01248683f2019-05-29 16:46:50 +0100474LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
475 armnn::IWorkloadFactory& workloadFactory,
476 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
477 float beta);
478
479LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
480 armnn::IWorkloadFactory& workloadFactory,
481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
482 float beta);
483
484LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
485 armnn::IWorkloadFactory& workloadFactory,
486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
487 float beta);
488
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000489LayerTestResult<float, 4> SimpleSigmoidTest(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
492
Nina Drozd8ed4b8c2019-05-29 10:41:04 +0100493template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
494LayerTestResult<T, 4> SimpleReshapeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000495 armnn::IWorkloadFactory& workloadFactory,
496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
497
498LayerTestResult<float, 4> SimpleFloorTest(
499 armnn::IWorkloadFactory& workloadFactory,
500 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
501
502LayerTestResult<float, 1> Concatenation1dTest(
503 armnn::IWorkloadFactory& workloadFactory,
504 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
505
506LayerTestResult<float, 2> Concatenation2dDim0Test(
507 armnn::IWorkloadFactory& workloadFactory,
508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
509
510LayerTestResult<float, 2> Concatenation2dDim1Test(
511 armnn::IWorkloadFactory& workloadFactory,
512 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
513
514LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
515 armnn::IWorkloadFactory& workloadFactory,
516 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
517
518LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
519 armnn::IWorkloadFactory& workloadFactory,
520 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
521
522LayerTestResult<float, 3> Concatenation3dDim0Test(
523 armnn::IWorkloadFactory& workloadFactory,
524 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
525
526LayerTestResult<float, 3> Concatenation3dDim1Test(
527 armnn::IWorkloadFactory& workloadFactory,
528 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
529
530LayerTestResult<float, 3> Concatenation3dDim2Test(
531 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000532 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
533 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000534
535LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
536 armnn::IWorkloadFactory& workloadFactory,
537 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
538
539LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
540 armnn::IWorkloadFactory& workloadFactory,
541 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
542
543LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
544 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000545 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
546 bool useSubtensor);
547
548LayerTestResult<float, 4> Concatenation4dDim0Test(
549 armnn::IWorkloadFactory& workloadFactory,
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000550 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
551
narpra015cdda352018-11-19 15:30:27 +0000552LayerTestResult<float, 4> Concatenation4dDim1Test(
553 armnn::IWorkloadFactory& workloadFactory,
554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
555
556LayerTestResult<float, 4> Concatenation4dDim2Test(
557 armnn::IWorkloadFactory& workloadFactory,
558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
559
560LayerTestResult<float, 4> Concatenation4dDim3Test(
561 armnn::IWorkloadFactory& workloadFactory,
562 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
563 bool useSubtensor);
564
565LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
566 armnn::IWorkloadFactory& workloadFactory,
567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
568
569LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
570 armnn::IWorkloadFactory& workloadFactory,
571 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
572
573LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
574 armnn::IWorkloadFactory& workloadFactory,
575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
576
577LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
578 armnn::IWorkloadFactory& workloadFactory,
579 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
580 bool useSubtensor);
581
582LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
583 armnn::IWorkloadFactory& workloadFactory,
584 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
585
586LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
587 armnn::IWorkloadFactory& workloadFactory,
588 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
589
590LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
591 armnn::IWorkloadFactory& workloadFactory,
592 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
593
594LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
595 armnn::IWorkloadFactory& workloadFactory,
596 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
597 bool useSubtensor);
598
599LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
600 armnn::IWorkloadFactory& workloadFactory,
601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
602
603LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
604 armnn::IWorkloadFactory& workloadFactory,
605 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
606
607LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
608 armnn::IWorkloadFactory& workloadFactory,
609 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
610
611LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
612 armnn::IWorkloadFactory& workloadFactory,
613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
614 bool useSubtensor);
615
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000616LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
619
Teresa Charlin18515e22019-04-24 10:17:46 +0100620LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
621 armnn::IWorkloadFactory& workloadFactory,
622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
623
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000624LayerTestResult<float, 4> CompareConvolution2dTest(
625 armnn::IWorkloadFactory& workloadFactory,
626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000627 armnn::IWorkloadFactory& refWorkloadFactory);
628
629template<typename T>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000630LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
631 armnn::IWorkloadFactory& workloadFactory,
632 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
633 armnn::IWorkloadFactory& refWorkloadFactory,
Matthew Bentham8800c002018-11-19 13:19:28 +0000634 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000635
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000636LayerTestResult<float, 4> CompareNormalizationTest(
637 armnn::IWorkloadFactory& workloadFactory,
638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
639 armnn::IWorkloadFactory& refWorkloadFactory,
640 armnn::NormalizationAlgorithmChannel normChannel,
641 armnn::NormalizationAlgorithmMethod normMethod);
telsoa014fcda012018-03-09 14:13:49 +0000642
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000643LayerTestResult<float, 2> CompareSoftmaxTest(
644 armnn::IWorkloadFactory& workloadFactory,
645 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000646 armnn::IWorkloadFactory& refWorkloadFactory,
647 float beta);
648
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000649LayerTestResult<float, 2> FullyConnectedFloat32Test(
650 armnn::IWorkloadFactory& workloadFactory,
651 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
652 bool biasEnabled,
653 bool transposeWeights);
telsoa014fcda012018-03-09 14:13:49 +0000654
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000655std::vector<LayerTestResult<float, 3>> SplitterTest(
656 armnn::IWorkloadFactory& workloadFactory,
657 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
David Beck5cd01f32018-09-12 16:00:08 +0100658
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000659LayerTestResult<float, 3> CopyViaSplitterTest(
660 armnn::IWorkloadFactory& workloadFactory,
661 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000662
Jim Flynn4ed6c832019-05-20 11:02:46 +0100663LayerTestResult<float, 3> ConcatTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000664 armnn::IWorkloadFactory& workloadFactory,
665 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000666
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000667LayerTestResult<float, 4> AdditionTest(
668 armnn::IWorkloadFactory& workloadFactory,
669 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000670
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000671LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
672 armnn::IWorkloadFactory& workloadFactory,
673 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000674
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000675LayerTestResult<float, 4> AdditionBroadcastTest(
676 armnn::IWorkloadFactory& workloadFactory,
677 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000678
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000679LayerTestResult<float, 4> CompareAdditionTest(
680 armnn::IWorkloadFactory& workloadFactory,
681 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
682 armnn::IWorkloadFactory& refWorkloadFactory);
telsoa014fcda012018-03-09 14:13:49 +0000683
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000684LayerTestResult<float, 4> SubtractionTest(
685 armnn::IWorkloadFactory& workloadFactory,
686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000687
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000688LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
689 armnn::IWorkloadFactory& workloadFactory,
690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000691
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000692LayerTestResult<float, 4> SubtractionBroadcastTest(
693 armnn::IWorkloadFactory& workloadFactory,
694 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000695
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000696LayerTestResult<float, 4> CompareActivationTest(
697 armnn::IWorkloadFactory& workloadFactory,
698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
699 armnn::IWorkloadFactory& refWorkloadFactory,
700 armnn::ActivationFunction f,
701 unsigned int batchSize);
telsoa014fcda012018-03-09 14:13:49 +0000702
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000703LayerTestResult<float, 4> DivisionTest(
704 armnn::IWorkloadFactory& workloadFactory,
705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000706
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000707LayerTestResult<float, 4> DivisionByZeroTest(
708 armnn::IWorkloadFactory& workloadFactory,
709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100710
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000711LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
712 armnn::IWorkloadFactory& workloadFactory,
713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100714
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000715LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
716 armnn::IWorkloadFactory& workloadFactory,
717 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100718
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000719LayerTestResult<float, 4> MultiplicationTest(
720 armnn::IWorkloadFactory& workloadFactory,
721 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100722
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000723LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
724 armnn::IWorkloadFactory& workloadFactory,
725 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100726
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000727LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
728 armnn::IWorkloadFactory& workloadFactory,
729 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100730
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000731LayerTestResult<float, 4> CompareMultiplicationTest(
732 armnn::IWorkloadFactory& workloadFactory,
733 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
734 armnn::IWorkloadFactory& refWorkloadFactory);
Matteo Martincigh28dcab62018-10-19 16:40:03 +0100735
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000736LayerTestResult<float, 4> BatchNormTest(
737 armnn::IWorkloadFactory& workloadFactory,
738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000739
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000740LayerTestResult<float, 4> BatchNormNhwcTest(
741 armnn::IWorkloadFactory& workloadFactory,
742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000743
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000744LayerTestResult<float, 4> CompareBatchNormTest(
745 armnn::IWorkloadFactory& workloadFactory,
746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
747 armnn::IWorkloadFactory& refWorkloadFactory);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000748
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000749LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
750 armnn::IWorkloadFactory& workloadFactory,
751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000752
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000753LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
754 armnn::IWorkloadFactory& workloadFactor,
755 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000756
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000757LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
758 armnn::IWorkloadFactory& workloadFactory,
759 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000760
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000761LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
762 armnn::IWorkloadFactory& workloadFactory,
763 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin262553e2018-11-14 11:26:23 +0000764
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000765LayerTestResult<float, 4> CompareBoundedReLuTest(
766 armnn::IWorkloadFactory& workloadFactory,
767 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
768 armnn::IWorkloadFactory& refWorkloadFactory,
769 float upperBound,
770 float lowerBound);
771
konsof017f6db402019-06-07 15:15:58 +0100772LayerTestResult<float, 4> ReLuTest(
773 armnn::IWorkloadFactory& workloadFactory,
774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
775
776LayerTestResult<uint8_t, 4> ReLuUint8Test(
777 armnn::IWorkloadFactory& workloadFactory,
778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Teresa Charlin18515e22019-04-24 10:17:46 +0100779
780LayerTestResult<int16_t, 4> ReLuInt16Test(
781 armnn::IWorkloadFactory& workloadFactory,
782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
783
784LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
785 armnn::IWorkloadFactory& workloadFactory,
786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
787
konsof017f6db402019-06-07 15:15:58 +0100788LayerTestResult<float, 4> SoftReLuTest(
789 armnn::IWorkloadFactory& workloadFactory,
790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
791
792LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
793 armnn::IWorkloadFactory& workloadFactory,
794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
795
Teresa Charlin18515e22019-04-24 10:17:46 +0100796LayerTestResult<int16_t, 4> SoftReLuInt16Test(
797 armnn::IWorkloadFactory& workloadFactory,
798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
799
konsof017f6db402019-06-07 15:15:58 +0100800LayerTestResult<float, 4> LeakyReLuTest(
801 armnn::IWorkloadFactory& workloadFactory,
802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
803
804LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
805 armnn::IWorkloadFactory& workloadFactory,
806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
807
Teresa Charlin18515e22019-04-24 10:17:46 +0100808LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
809 armnn::IWorkloadFactory& workloadFactory,
810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
811
konsof017f6db402019-06-07 15:15:58 +0100812LayerTestResult<float, 4> AbsTest(
813 armnn::IWorkloadFactory& workloadFactory,
814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
815
816LayerTestResult<uint8_t, 4> AbsUint8Test(
817 armnn::IWorkloadFactory& workloadFactory,
818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
819
Teresa Charlin18515e22019-04-24 10:17:46 +0100820LayerTestResult<int16_t, 4> AbsInt16Test(
821 armnn::IWorkloadFactory& workloadFactory,
822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
823
konsof017f6db402019-06-07 15:15:58 +0100824LayerTestResult<float, 4> SqrtTest(
825 armnn::IWorkloadFactory& workloadFactory,
826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
827
828LayerTestResult<uint8_t, 4> SqrtUint8Test(
829 armnn::IWorkloadFactory& workloadFactory,
830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
831
Teresa Charlin18515e22019-04-24 10:17:46 +0100832LayerTestResult<int16_t, 4> SqrtInt16Test(
833 armnn::IWorkloadFactory& workloadFactory,
834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
835
konsof017f6db402019-06-07 15:15:58 +0100836LayerTestResult<float, 4> SquareTest(
837 armnn::IWorkloadFactory& workloadFactory,
838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
839
840LayerTestResult<uint8_t, 4> SquareUint8Test(
841 armnn::IWorkloadFactory& workloadFactory,
842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
843
Teresa Charlin18515e22019-04-24 10:17:46 +0100844LayerTestResult<int16_t, 4> SquareInt16Test(
845 armnn::IWorkloadFactory& workloadFactory,
846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
847
konsof017f6db402019-06-07 15:15:58 +0100848LayerTestResult<float, 4> TanhTest(
849 armnn::IWorkloadFactory& workloadFactory,
850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
851
852LayerTestResult<uint8_t, 4> TanhUint8Test(
853 armnn::IWorkloadFactory& workloadFactory,
854 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
855
Teresa Charlin18515e22019-04-24 10:17:46 +0100856LayerTestResult<int16_t, 4> TanhInt16Test(
857 armnn::IWorkloadFactory& workloadFactory,
858 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
859
860
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100861/// Tests that the output should be identical to the input when the output dimensions match the input ones.
862template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
863LayerTestResult<T, 4> ResizeBilinearNopTest(
864 armnn::IWorkloadFactory& workloadFactory,
865 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
866 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000867
868// Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100869template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
870LayerTestResult<T, 4> SimpleResizeBilinearTest(
871 armnn::IWorkloadFactory& workloadFactory,
872 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
873 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000874
875// Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
876// multiple of output dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100877template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
878LayerTestResult<T, 4> ResizeBilinearSqMinTest(
879 armnn::IWorkloadFactory& workloadFactory,
880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
881 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000882
883// Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100884template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
885LayerTestResult<T, 4> ResizeBilinearMinTest(
886 armnn::IWorkloadFactory& workloadFactory,
887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
888 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000889
890// Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100891template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
892LayerTestResult<T, 4> ResizeBilinearMagTest(
893 armnn::IWorkloadFactory& workloadFactory,
894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
895 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000896
nikraj0193f84a92019-06-05 10:48:46 +0100897template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
898LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000899 armnn::IWorkloadFactory& workloadFactory,
900 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
901 const armnn::TensorInfo inputTensorInfo,
902 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +0100903 const std::vector<float>& inputValues,
904 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000905
nikraj0193f84a92019-06-05 10:48:46 +0100906template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
907LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
910
nikraj0193f84a92019-06-05 10:48:46 +0100911template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
912LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000913 armnn::IWorkloadFactory& workloadFactory,
914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
915
nikraj0193f84a92019-06-05 10:48:46 +0100916template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
917LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000918 armnn::IWorkloadFactory& workloadFactory,
919 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
920
nikraj0193f84a92019-06-05 10:48:46 +0100921template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
922LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000923 armnn::IWorkloadFactory& workloadFactory,
924 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
925
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000926LayerTestResult<float, 4> BatchNormTest(
927 armnn::IWorkloadFactory& workloadFactory,
928 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
929
930LayerTestResult<float, 4> BatchNormNhwcTest(
931 armnn::IWorkloadFactory& workloadFactory,
932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
933
934LayerTestResult<float, 2> FakeQuantizationTest(
935 armnn::IWorkloadFactory& workloadFactory,
936 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
937
Ferran Balaguere52211e2019-06-17 12:23:52 +0100938LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
939 armnn::IWorkloadFactory& workloadFactory,
940 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
941 const armnn::DataLayout layout);
942
943LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
944 armnn::IWorkloadFactory& workloadFactory,
945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
946 const armnn::DataLayout layout);
947
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000948LayerTestResult<float, 4> L2Normalization1dTest(
949 armnn::IWorkloadFactory& workloadFactory,
950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000951 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000952
Ferran Balaguerd73d14f2019-06-10 10:29:54 +0100953LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
954 armnn::IWorkloadFactory& workloadFactory,
955 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
956 const armnn::DataLayout layout);
957
Ferran Balaguerc6138d82019-06-13 17:23:50 +0100958LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
959 armnn::IWorkloadFactory& workloadFactory,
960 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
961 const armnn::DataLayout layout);
962
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000963LayerTestResult<float, 4> L2Normalization2dTest(
964 armnn::IWorkloadFactory& workloadFactory,
965 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000966 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000967
Ferran Balaguerd73d14f2019-06-10 10:29:54 +0100968LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
969 armnn::IWorkloadFactory& workloadFactory,
970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
971 const armnn::DataLayout layout);
972
Ferran Balaguerc6138d82019-06-13 17:23:50 +0100973LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
974 armnn::IWorkloadFactory& workloadFactory,
975 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
976 const armnn::DataLayout layout);
977
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000978LayerTestResult<float, 4> L2Normalization3dTest(
979 armnn::IWorkloadFactory& workloadFactory,
980 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000981 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000982
Ferran Balaguerd73d14f2019-06-10 10:29:54 +0100983LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
984 armnn::IWorkloadFactory& workloadFactory,
985 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
986 const armnn::DataLayout layout);
987
Ferran Balaguerc6138d82019-06-13 17:23:50 +0100988LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
989 armnn::IWorkloadFactory& workloadFactory,
990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
991 const armnn::DataLayout layout);
992
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000993LayerTestResult<float, 4> L2Normalization4dTest(
994 armnn::IWorkloadFactory& workloadFactory,
995 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000996 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000997
Ferran Balaguerd73d14f2019-06-10 10:29:54 +0100998LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
999 armnn::IWorkloadFactory& workloadFactory,
1000 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1001 const armnn::DataLayout layout);
1002
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001003LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1004 armnn::IWorkloadFactory& workloadFactory,
1005 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1006 const armnn::DataLayout layout);
1007
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001008LayerTestResult<float, 4> ConstantTest(
1009 armnn::IWorkloadFactory& workloadFactory,
1010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1011
Nina Drozd58ef2c62019-05-16 12:09:18 +01001012LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1013 armnn::IWorkloadFactory& workloadFactory,
1014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1015
1016LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001017 armnn::IWorkloadFactory& workloadFactory,
1018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1019
1020LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1021 armnn::IWorkloadFactory& workloadFactory,
1022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1023 float upperBound);
1024
1025LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1026 armnn::IWorkloadFactory& workloadFactory,
1027 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1028 float upperBound,
1029 float lowerBound);
1030
Francis Murtagh46c09d02019-05-28 08:15:28 +01001031template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1032LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001033 armnn::IWorkloadFactory& workloadFactory,
1034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1035 bool biasEnabled);
1036
1037std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1038 armnn::IWorkloadFactory& workloadFactory,
1039 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1040
Ruomei Yan25339c32019-05-28 16:48:20 +01001041std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1042 armnn::IWorkloadFactory& workloadFactory,
1043 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1044
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001045LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1046 armnn::IWorkloadFactory& workloadFactory,
1047 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1048
Ruomei Yan25339c32019-05-28 16:48:20 +01001049LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1050 armnn::IWorkloadFactory& workloadFactory,
1051 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1052
Jim Flynn4ed6c832019-05-20 11:02:46 +01001053LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001054 armnn::IWorkloadFactory& workloadFactory,
1055 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1056
Jim Flynn4ed6c832019-05-20 11:02:46 +01001057LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001058 armnn::IWorkloadFactory& workloadFactory,
1059 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1060
Jim Flynn4ed6c832019-05-20 11:02:46 +01001061LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001062 armnn::IWorkloadFactory& workloadFactory,
1063 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001064
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001065LayerTestResult<uint8_t, 4> AdditionUint8Test(
1066 armnn::IWorkloadFactory& workloadFactory,
1067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1068
1069LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1070 armnn::IWorkloadFactory& workloadFactory,
1071 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1072
1073LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1074 armnn::IWorkloadFactory& workloadFactory,
1075 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1076
Sadik Armagan2999a022019-04-09 14:20:12 +01001077LayerTestResult<int16_t, 4> AdditionInt16Test(
1078 armnn::IWorkloadFactory& workloadFactory,
1079 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1080
1081LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1082 armnn::IWorkloadFactory& workloadFactory,
1083 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1084
1085LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1086 armnn::IWorkloadFactory& workloadFactory,
1087 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1088
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001089LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1090 armnn::IWorkloadFactory& workloadFactory,
1091 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1092
1093LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1094 armnn::IWorkloadFactory& workloadFactory,
1095 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1096
1097LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1098 armnn::IWorkloadFactory& workloadFactory,
1099 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1100
Sadik Armagan2999a022019-04-09 14:20:12 +01001101LayerTestResult<int16_t, 4> SubtractionInt16Test(
1102 armnn::IWorkloadFactory& workloadFactory,
1103 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1104
1105LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1106 armnn::IWorkloadFactory& workloadFactory,
1107 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1108
1109LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1110 armnn::IWorkloadFactory& workloadFactory,
1111 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1112
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001113LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1114 armnn::IWorkloadFactory& workloadFactory,
1115 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1116 armnn::IWorkloadFactory& refWorkloadFactory,
1117 armnn::ActivationFunction f);
1118
Teresa Charlin18515e22019-04-24 10:17:46 +01001119LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1120 armnn::IWorkloadFactory& workloadFactory,
1121 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1122 armnn::IWorkloadFactory& refWorkloadFactory,
1123 armnn::ActivationFunction f);
1124
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001125LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1126 armnn::IWorkloadFactory& workloadFactory,
1127 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1128 armnn::IWorkloadFactory& refWorkloadFactory,
1129 float beta);
1130
1131LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1132 armnn::IWorkloadFactory& workloadFactory,
1133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1134
1135LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1138
1139LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1140 armnn::IWorkloadFactory& workloadFactory,
1141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1142
Sadik Armagan2999a022019-04-09 14:20:12 +01001143LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1144 armnn::IWorkloadFactory& workloadFactory,
1145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1146
1147LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1148 armnn::IWorkloadFactory& workloadFactory,
1149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1150
1151LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1152 armnn::IWorkloadFactory& workloadFactory,
1153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1154
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001155LayerTestResult<uint8_t, 4> DivisionUint8Test(
1156 armnn::IWorkloadFactory& workloadFactory,
1157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1158
1159LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1160 armnn::IWorkloadFactory& workloadFactory,
1161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1162
1163LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1164 armnn::IWorkloadFactory& workloadFactory,
1165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1166
Sadik Armagan2999a022019-04-09 14:20:12 +01001167LayerTestResult<int16_t, 4> DivisionInt16Test(
1168 armnn::IWorkloadFactory& workloadFactory,
1169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1170
1171LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1172 armnn::IWorkloadFactory& workloadFactory,
1173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1174
1175LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1176 armnn::IWorkloadFactory& workloadFactory,
1177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1178
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001179LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1180 armnn::IWorkloadFactory& workloadFactory,
1181 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1182 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001183 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001184
1185LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1186 armnn::IWorkloadFactory& workloadFactory,
1187 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1188 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001189 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001190
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001191LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1192 armnn::IWorkloadFactory& workloadFactory,
1193 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1194 bool biasEnabled,
1195 const armnn::DataLayout layout);
1196
1197LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1198 armnn::IWorkloadFactory& workloadFactory,
1199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1200 bool biasEnabled,
1201 const armnn::DataLayout layout);
1202
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001203LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1204 armnn::IWorkloadFactory& workloadFactory,
1205 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1206 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001207 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001208
1209LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1210 armnn::IWorkloadFactory& workloadFactory,
1211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1212 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001213 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001214
Ruomei Yan88d44b82019-05-23 14:29:06 +01001215LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1216 armnn::IWorkloadFactory& workloadFactory,
1217 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1218 bool biasEnabled,
1219 const armnn::DataLayout layout);
1220
1221LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1222 armnn::IWorkloadFactory& workloadFactory,
1223 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1224 bool biasEnabled,
1225 const armnn::DataLayout layout);
1226
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001227LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1228 armnn::IWorkloadFactory& workloadFactory,
1229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1230
Teresa Charlin18515e22019-04-24 10:17:46 +01001231LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1232 armnn::IWorkloadFactory& workloadFactory,
1233 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1234
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001235LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1236 armnn::IWorkloadFactory& workloadFactory,
1237 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1238
1239LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1240 armnn::IWorkloadFactory& workloadFactory,
1241 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1242
Matteo Martincighf5507132019-06-04 10:59:47 +01001243LayerTestResult<int16_t, 4> BatchNormInt16Test(
1244 armnn::IWorkloadFactory& workloadFactory,
1245 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1246
1247LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1248 armnn::IWorkloadFactory& workloadFactory,
1249 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1250
Nina Drozd58ef2c62019-05-16 12:09:18 +01001251LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1252 armnn::IWorkloadFactory& workloadFactory,
1253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1254
1255LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001256 armnn::IWorkloadFactory& workloadFactory,
1257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1258
1259LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1260 armnn::IWorkloadFactory& workloadFactory,
1261 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1262
1263LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1264 armnn::IWorkloadFactory& workloadFactory,
1265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1266
1267LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1268 armnn::IWorkloadFactory& workloadFactory,
1269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1270
1271LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1272 armnn::IWorkloadFactory& workloadFactory,
1273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1274
1275LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1276 armnn::IWorkloadFactory& workloadFactory,
1277 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1278
1279LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1280 armnn::IWorkloadFactory& workloadFactory,
1281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1282
1283LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1284 armnn::IWorkloadFactory& workloadFactory,
1285 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1286
1287LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1288 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1290 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001291
1292LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1293 armnn::IWorkloadFactory& workloadFactory,
1294 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1295
1296LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1297 armnn::IWorkloadFactory& workloadFactory,
1298 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1299
1300LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1301 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001302 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1303 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001304
kevmay012b4d88e2019-01-24 14:05:09 +00001305LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001306 armnn::IWorkloadFactory& workloadFactory,
1307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1308
kevmay012b4d88e2019-01-24 14:05:09 +00001309LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001310 armnn::IWorkloadFactory& workloadFactory,
1311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1312
kevmay012b4d88e2019-01-24 14:05:09 +00001313LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001314 armnn::IWorkloadFactory& workloadFactory,
1315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1316
1317LayerTestResult<uint8_t, 4> EqualUint8Test(
1318 armnn::IWorkloadFactory& workloadFactory,
1319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1320
1321LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1322 armnn::IWorkloadFactory& workloadFactory,
1323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1324
1325LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1326 armnn::IWorkloadFactory& workloadFactory,
1327 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1328
kevmay012b4d88e2019-01-24 14:05:09 +00001329LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001330 armnn::IWorkloadFactory& workloadFactory,
1331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1332
kevmay012b4d88e2019-01-24 14:05:09 +00001333LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001334 armnn::IWorkloadFactory& workloadFactory,
1335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1336
kevmay012b4d88e2019-01-24 14:05:09 +00001337LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001338 armnn::IWorkloadFactory& workloadFactory,
1339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1340
1341LayerTestResult<uint8_t, 4> GreaterUint8Test(
1342 armnn::IWorkloadFactory& workloadFactory,
1343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1344
1345LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1346 armnn::IWorkloadFactory& workloadFactory,
1347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1348
1349LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1350 armnn::IWorkloadFactory& workloadFactory,
1351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1352
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001353LayerTestResult<float, 2> FullyConnectedLargeTest(
1354 armnn::IWorkloadFactory& workloadFactory,
1355 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1356 bool transposeWeights);
1357
1358LayerTestResult<float, 4> SimplePermuteFloat32Test(
1359 armnn::IWorkloadFactory& workloadFactory,
1360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1361
1362LayerTestResult<uint8_t, 4> SimplePermuteUint8Test(
1363 armnn::IWorkloadFactory& workloadFactory,
1364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1365
1366LayerTestResult<uint8_t, 2> PadUint82dTest(
1367 armnn::IWorkloadFactory& workloadFactory,
1368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1369
1370LayerTestResult<uint8_t, 3> PadUint83dTest(
1371 armnn::IWorkloadFactory& workloadFactory,
1372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1373
1374LayerTestResult<uint8_t, 4> PadUint84dTest(
1375 armnn::IWorkloadFactory& workloadFactory,
1376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1377
1378LayerTestResult<float, 2> PadFloat322dTest(
1379 armnn::IWorkloadFactory& workloadFactory,
1380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1381
1382LayerTestResult<float, 3> PadFloat323dTest(
1383 armnn::IWorkloadFactory& workloadFactory,
1384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1385
1386LayerTestResult<float, 4> PadFloat324dTest(
1387 armnn::IWorkloadFactory& workloadFactory,
1388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1389
1390LayerTestResult<float, 4> PermuteFloat32ValueSet1Test(
1391 armnn::IWorkloadFactory& workloadFactory,
1392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1393
1394LayerTestResult<float, 4> PermuteFloat32ValueSet2Test(
1395 armnn::IWorkloadFactory& workloadFactory,
1396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1397
1398LayerTestResult<float, 4> PermuteFloat32ValueSet3Test(
1399 armnn::IWorkloadFactory& workloadFactory,
1400 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1401
1402LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1403 armnn::IWorkloadFactory& workloadFactory,
1404 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1405
1406LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1407 armnn::IWorkloadFactory& workloadFactory,
1408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1409
1410LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1411 armnn::IWorkloadFactory& workloadFactory,
1412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1413
Conor Kennedyb9971c92019-05-07 07:14:23 +01001414LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1415 armnn::IWorkloadFactory& workloadFactory,
1416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1417
1418LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1419 armnn::IWorkloadFactory& workloadFactory,
1420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1421
1422LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1423 armnn::IWorkloadFactory& workloadFactory,
1424 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1425
1426LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1427 armnn::IWorkloadFactory& workloadFactory,
1428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1429
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001430LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1431 armnn::IWorkloadFactory& workloadFactory,
1432 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1433
1434LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1435 armnn::IWorkloadFactory& workloadFactory,
1436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1437
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001438LayerTestResult<float, 4> MaximumSimpleTest(
1439 armnn::IWorkloadFactory& workloadFactory,
1440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1441
1442LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1443 armnn::IWorkloadFactory& workloadFactory,
1444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1445
1446LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1447 armnn::IWorkloadFactory& workloadFactory,
1448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1449
1450LayerTestResult<uint8_t , 4> MaximumUint8Test(
1451 armnn::IWorkloadFactory& workloadFactory,
1452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1453
1454LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1455 armnn::IWorkloadFactory& workloadFactory,
1456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1457
1458LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1459 armnn::IWorkloadFactory& workloadFactory,
1460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1461
Sadik Armagan2999a022019-04-09 14:20:12 +01001462LayerTestResult<int16_t , 4> MaximumInt16Test(
1463 armnn::IWorkloadFactory& workloadFactory,
1464 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1465
1466LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1467 armnn::IWorkloadFactory& workloadFactory,
1468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1469
1470LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1471 armnn::IWorkloadFactory& workloadFactory,
1472 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1473
James Conroy4d1ff582019-06-10 17:06:39 +01001474template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1475LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001476 armnn::IWorkloadFactory& workloadFactory,
1477 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1478
James Conroy4d1ff582019-06-10 17:06:39 +01001479template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1480LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001481 armnn::IWorkloadFactory& workloadFactory,
1482 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1483
James Conroy4d1ff582019-06-10 17:06:39 +01001484template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1485LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
James Conroy4d1ff582019-06-10 17:06:39 +01001489template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1490LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001491 armnn::IWorkloadFactory& workloadFactory,
1492 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1493
James Conroy4d1ff582019-06-10 17:06:39 +01001494template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1495LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001496 armnn::IWorkloadFactory& workloadFactory,
1497 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1498
James Conroy4d1ff582019-06-10 17:06:39 +01001499template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1500LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001501 armnn::IWorkloadFactory& workloadFactory,
1502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1503
James Conroy4d1ff582019-06-10 17:06:39 +01001504template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1505LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001506 armnn::IWorkloadFactory& workloadFactory,
1507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1508
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001509LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1510 armnn::IWorkloadFactory& workloadFactory,
1511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1512
1513LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1514 armnn::IWorkloadFactory& workloadFactory,
1515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1516
1517LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1518 armnn::IWorkloadFactory & workloadFactory,
1519 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1520
Sadik Armagan2999a022019-04-09 14:20:12 +01001521LayerTestResult<int16_t , 4> MinimumInt16Test(
1522 armnn::IWorkloadFactory& workloadFactory,
1523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1524
1525LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1526 armnn::IWorkloadFactory& workloadFactory,
1527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1528
1529LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1530 armnn::IWorkloadFactory& workloadFactory,
1531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1532
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001533LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1534 armnn::IWorkloadFactory& workloadFactory,
1535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1536
1537LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1538 armnn::IWorkloadFactory& workloadFactory,
1539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1540
1541LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1542 armnn::IWorkloadFactory& workloadFactory,
1543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1544
1545LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1546 armnn::IWorkloadFactory& workloadFactory,
1547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1548
1549LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1550 armnn::IWorkloadFactory& workloadFactory,
1551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1552
1553LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1554 armnn::IWorkloadFactory& workloadFactory,
1555 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1556
1557LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1558 armnn::IWorkloadFactory& workloadFactory,
1559 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1560
1561LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1562 armnn::IWorkloadFactory& workloadFactory,
1563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1564
1565LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1566 armnn::IWorkloadFactory& workloadFactory,
1567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1568
1569LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1570 armnn::IWorkloadFactory& workloadFactory,
1571 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1572
1573LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1574 armnn::IWorkloadFactory& workloadFactory,
1575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1576
1577LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1578 armnn::IWorkloadFactory& workloadFactory,
1579 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1580
1581LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1582 armnn::IWorkloadFactory& workloadFactory,
1583 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1584
1585LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1586 armnn::IWorkloadFactory& workloadFactory,
1587 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1588
1589LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1590 armnn::IWorkloadFactory& workloadFactory,
1591 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1592
1593LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1594 armnn::IWorkloadFactory& workloadFactory,
1595 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1596
1597LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1598 armnn::IWorkloadFactory& workloadFactory,
1599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1600
nikraj01120522a2019-05-31 11:33:07 +01001601LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1602 armnn::IWorkloadFactory& workloadFactory,
1603 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1604
1605LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1606 armnn::IWorkloadFactory& workloadFactory,
1607 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1608
1609LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1610 armnn::IWorkloadFactory& workloadFactory,
1611 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1612
1613LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1614 armnn::IWorkloadFactory& workloadFactory,
1615 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1616
1617LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1618 armnn::IWorkloadFactory& workloadFactory,
1619 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1620
1621LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1622 armnn::IWorkloadFactory& workloadFactory,
1623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1624
1625LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1626 armnn::IWorkloadFactory& workloadFactory,
1627 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1628
1629LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1630 armnn::IWorkloadFactory& workloadFactory,
1631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1632
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001633LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test1(
1634 armnn::IWorkloadFactory& workloadFactory,
1635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1636
1637LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test2(
1638 armnn::IWorkloadFactory& workloadFactory,
1639 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1640
1641LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test3(
1642 armnn::IWorkloadFactory& workloadFactory,
1643 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1644
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001645LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test4(
1646 armnn::IWorkloadFactory& workloadFactory,
1647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1648
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001649LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test1(
1650 armnn::IWorkloadFactory &workloadFactory,
1651 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1652
Mike Kelly831faed2018-11-28 11:52:08 +00001653LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001654 armnn::IWorkloadFactory &workloadFactory,
1655 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001656
1657LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001658 armnn::IWorkloadFactory &workloadFactory,
1659 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001660
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001661LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest1(
1662 armnn::IWorkloadFactory &workloadFactory,
1663 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001664
Mike Kelly831faed2018-11-28 11:52:08 +00001665LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001666 armnn::IWorkloadFactory &workloadFactory,
1667 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001668
1669LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001670 armnn::IWorkloadFactory &workloadFactory,
1671 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001672
1673LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest1(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001674 armnn::IWorkloadFactory &workloadFactory,
1675 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001676
1677LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001678 armnn::IWorkloadFactory &workloadFactory,
1679 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001680
1681LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001682 armnn::IWorkloadFactory &workloadFactory,
1683 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1684
1685LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest4(
1686 armnn::IWorkloadFactory &workloadFactory,
1687 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001688
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001689LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1690 armnn::IWorkloadFactory& workloadFactory,
1691 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001692
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001693LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1694 armnn::IWorkloadFactory& workloadFactory,
1695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1696
1697LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1698 armnn::IWorkloadFactory& workloadFactory,
1699 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1700
1701LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1702 armnn::IWorkloadFactory& workloadFactory,
1703 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1704
1705LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1706 armnn::IWorkloadFactory& workloadFactory,
1707 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1708
1709LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1710 armnn::IWorkloadFactory& workloadFactory,
1711 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1712
1713LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1714 armnn::IWorkloadFactory& workloadFactory,
1715 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1716
1717LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1718 armnn::IWorkloadFactory& workloadFactory,
1719 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1720
1721LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1722 armnn::IWorkloadFactory& workloadFactory,
1723 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1724
1725LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1726 armnn::IWorkloadFactory& workloadFactory,
1727 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1728
1729LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1730 armnn::IWorkloadFactory& workloadFactory,
1731 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1732
1733LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1734 armnn::IWorkloadFactory& workloadFactory,
1735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1736
1737LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1738 armnn::IWorkloadFactory& workloadFactory,
1739 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1740
1741LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1742 armnn::IWorkloadFactory& workloadFactory,
1743 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1744
1745LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1746 armnn::IWorkloadFactory& workloadFactory,
1747 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1748
1749LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1750 armnn::IWorkloadFactory& workloadFactory,
1751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1752
1753LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1754 armnn::IWorkloadFactory& workloadFactory,
1755 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1756
1757LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1758 armnn::IWorkloadFactory& workloadFactory,
1759 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001760
Matteo Martincigh42666a12019-05-29 08:53:41 +01001761LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1762 armnn::IWorkloadFactory& workloadFactory,
1763 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1764
1765LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1766 armnn::IWorkloadFactory& workloadFactory,
1767 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1768
1769LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1770 armnn::IWorkloadFactory& workloadFactory,
1771 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1772
1773LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1774 armnn::IWorkloadFactory& workloadFactory,
1775 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1776
1777LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1778 armnn::IWorkloadFactory& workloadFactory,
1779 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1780
1781LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1782 armnn::IWorkloadFactory& workloadFactory,
1783 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1784
1785LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1786 armnn::IWorkloadFactory& workloadFactory,
1787 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1788
1789LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1790 armnn::IWorkloadFactory& workloadFactory,
1791 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1792
1793LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1794 armnn::IWorkloadFactory& workloadFactory,
1795 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1796
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001797LayerTestResult<float, 4> Debug4DFloat32Test(
1798 armnn::IWorkloadFactory& workloadFactory,
1799 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1800
1801LayerTestResult<float, 3> Debug3DFloat32Test(
1802 armnn::IWorkloadFactory& workloadFactory,
1803 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1804
1805LayerTestResult<float, 2> Debug2DFloat32Test(
1806 armnn::IWorkloadFactory& workloadFactory,
1807 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1808
1809LayerTestResult<float, 1> Debug1DFloat32Test(
1810 armnn::IWorkloadFactory& workloadFactory,
1811 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1812
1813LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1814 armnn::IWorkloadFactory& workloadFactory,
1815 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1816
1817LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1818 armnn::IWorkloadFactory& workloadFactory,
1819 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1820
1821LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1822 armnn::IWorkloadFactory& workloadFactory,
1823 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1824
1825LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1826 armnn::IWorkloadFactory& workloadFactory,
1827 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001828
1829LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1830 armnn::IWorkloadFactory& workloadFactory,
1831 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1832
1833LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1834 armnn::IWorkloadFactory& workloadFactory,
1835 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1836
1837LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1838 armnn::IWorkloadFactory & workloadFactory,
1839 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1840
1841LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1842 armnn::IWorkloadFactory & workloadFactory,
1843 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1844
1845LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1846 armnn::IWorkloadFactory& workloadFactory,
1847 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1848
1849LayerTestResult<float, 4> Debug4DFloat32Test(
1850 armnn::IWorkloadFactory& workloadFactory,
1851 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1852
1853LayerTestResult<float, 3> Debug3DFloat32Test(
1854 armnn::IWorkloadFactory& workloadFactory,
1855 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1856
1857LayerTestResult<float, 2> Debug2DFloat32Test(
1858 armnn::IWorkloadFactory& workloadFactory,
1859 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1860
1861LayerTestResult<float, 1> Debug1DFloat32Test(
1862 armnn::IWorkloadFactory& workloadFactory,
1863 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1864
1865LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1866 armnn::IWorkloadFactory& workloadFactory,
1867 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1868
1869LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1870 armnn::IWorkloadFactory& workloadFactory,
1871 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1872
1873LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1874 armnn::IWorkloadFactory& workloadFactory,
1875 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1876
1877LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1878 armnn::IWorkloadFactory& workloadFactory,
1879 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001880
1881LayerTestResult<float, 1> Gather1DParamsFloatTest(
1882 armnn::IWorkloadFactory& workloadFactory,
1883 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1884
1885LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1886 armnn::IWorkloadFactory& workloadFactory,
1887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1888
1889LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1890 armnn::IWorkloadFactory& workloadFactory,
1891 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1892
1893LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1894 armnn::IWorkloadFactory& workloadFactory,
1895 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1896
1897LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1898 armnn::IWorkloadFactory& workloadFactory,
1899 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1900
1901LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1902 armnn::IWorkloadFactory& workloadFactory,
1903 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001904
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001905LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1906 armnn::IWorkloadFactory& workloadFactory,
1907 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1908
1909LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1910 armnn::IWorkloadFactory& workloadFactory,
1911 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1912
1913LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001914 armnn::IWorkloadFactory& workloadFactory,
1915 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001916
1917LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
1918 armnn::IWorkloadFactory& workloadFactory,
1919 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1920
1921LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
1922 armnn::IWorkloadFactory& workloadFactory,
1923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1924
1925LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
1926 armnn::IWorkloadFactory& workloadFactory,
1927 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01001928
1929template<typename T, typename B>
1930LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
1931 armnn::IWorkloadFactory& workloadFactory,
1932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1933 armnn::TensorInfo inputTensorInfo,
1934 armnn::TensorInfo outputTensorInfo,
1935 armnn::TensorInfo weightsDesc,
1936 armnn::TensorInfo biasesDesc,
1937 boost::multi_array<T, 2>& weights,
1938 boost::multi_array<B, 1>& bias,
1939 boost::multi_array<T, 4>& input,
1940 bool biasEnabled,
1941 bool transposeWeights)
1942{
1943 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
1944 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
1945
1946 armnn::FullyConnectedQueueDescriptor data;
1947 armnn::WorkloadInfo info;
1948 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
1949 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
1950
1951 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
1952 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
1953
1954 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
1955 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
1956 data.m_Weight = &weightsTensor;
1957 data.m_Bias = &biasTensor;
1958 data.m_Parameters.m_BiasEnabled = biasEnabled;
1959 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
1960
1961 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
1962 LayerTestResult<T, 2> result(outputTensorInfo);
1963
1964 inputHandle->Allocate();
1965 outputHandle->Allocate();
1966 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
1967
1968 ExecuteWorkload(*workload, memoryManager);
1969
1970 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
1971
1972 return result;
1973}
1974
1975template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1976std::vector<T> ConvertToDataType(const std::vector<float>& input,
1977 const armnn::TensorInfo& inputTensorInfo)
1978{
1979 std::vector<T> output(input.size());
1980 auto outputTensorInfo = inputTensorInfo;
1981 outputTensorInfo.SetDataType(ArmnnType);
1982
1983 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
1984 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
1985
1986 for (auto it = input.begin(); it != input.end(); ++it)
1987 {
1988 rOutputEncoder.Set(*it);
1989 ++rOutputEncoder;
1990 }
1991 return output;
1992}
1993
nikraj010421e7f2019-06-14 09:40:34 +01001994template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01001995LayerTestResult<T, 2> Rsqrt2dTestCommon(
1996 armnn::IWorkloadFactory& workloadFactory,
1997 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1998 const armnn::TensorInfo inputTensorInfo,
1999 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002000 const std::vector<float>& inputValues,
2001 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002002{
nikraj010421e7f2019-06-14 09:40:34 +01002003 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002004
2005 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002006
2007 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2008 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002009
2010 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2011 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2012
2013 armnn::RsqrtQueueDescriptor descriptor;
2014
2015 armnn::WorkloadInfo info;
2016
2017 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2018 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2019
2020 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2021
2022 inputHandle->Allocate();
2023 outputHandle->Allocate();
2024
2025 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2026
2027 workload->PostAllocationConfigure();
2028 workload->Execute();
2029
2030 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2031
2032 return result;
2033}
2034
2035template<armnn::DataType ArmnnType, typename T>
2036LayerTestResult<T, 2> Rsqrt2dTest(
2037 armnn::IWorkloadFactory& workloadFactory,
2038 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2039{
2040 const armnn::TensorShape inputShape{ 2, 2 };
2041 const armnn::TensorShape outputShape{ 2, 2 };
2042
nikraj010421e7f2019-06-14 09:40:34 +01002043 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2044 inputTensorInfo.SetQuantizationScale(0.1f);
2045 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002046
nikraj010421e7f2019-06-14 09:40:34 +01002047 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2048 outputTensorInfo.SetQuantizationScale(0.1f);
2049 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002050
nikraj010421e7f2019-06-14 09:40:34 +01002051 std::vector<float> inputValues
2052 {
2053 1.f, 4.f,
2054 16.f, 25.f
2055 };
nikraj0193f84a92019-06-05 10:48:46 +01002056
nikraj010421e7f2019-06-14 09:40:34 +01002057 std::vector<float> expectedOutputValues
2058 {
2059 1.f, 0.5f,
2060 0.25f, 0.2f
2061 };
2062
2063 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002064 inputTensorInfo, outputTensorInfo,
2065 inputValues, expectedOutputValues);
2066}
2067
2068template<armnn::DataType ArmnnType, typename T>
2069LayerTestResult<T, 3> Rsqrt3dTest(
2070 armnn::IWorkloadFactory& workloadFactory,
2071 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2072{
2073 const armnn::TensorShape inputShape{ 3, 1, 2 };
2074 const armnn::TensorShape outputShape{ 3, 1, 2 };
2075
nikraj010421e7f2019-06-14 09:40:34 +01002076 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2077 inputTensorInfo.SetQuantizationScale(0.1f);
2078 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002079
nikraj010421e7f2019-06-14 09:40:34 +01002080 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2081 outputTensorInfo.SetQuantizationScale(0.1f);
2082 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002083
nikraj010421e7f2019-06-14 09:40:34 +01002084 std::vector<float> inputValues
2085 {
2086 1.f, 4.f, 16.f,
2087 25.f, 64.f, 100.f
2088 };
nikraj0193f84a92019-06-05 10:48:46 +01002089
nikraj010421e7f2019-06-14 09:40:34 +01002090 std::vector<float> expectedOutputValues
2091 {
2092 1.f, 0.5f, 0.25f,
2093 0.2f, 0.125f, 0.1f
2094 };
2095
2096 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002097
2098 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002099 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2100 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002101
2102 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2103 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2104
2105 armnn::RsqrtQueueDescriptor descriptor;
2106
2107 armnn::WorkloadInfo info;
2108
2109 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2110 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2111
2112 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2113
2114 inputHandle->Allocate();
2115 outputHandle->Allocate();
2116
2117 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2118
2119 workload->PostAllocationConfigure();
2120 workload->Execute();
2121
2122 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2123
2124 return result;
2125}
2126
2127template<armnn::DataType ArmnnType, typename T>
2128LayerTestResult<T, 2> RsqrtZeroTest(
2129 armnn::IWorkloadFactory& workloadFactory,
2130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2131{
2132 const armnn::TensorShape inputShape{ 1, 2 };
2133 const armnn::TensorShape outputShape{ 1, 2 };
2134
nikraj010421e7f2019-06-14 09:40:34 +01002135 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2136 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002137
nikraj010421e7f2019-06-14 09:40:34 +01002138 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2139 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002140
nikraj010421e7f2019-06-14 09:40:34 +01002141 std::vector<float> inputValues
2142 {
2143 0.f, -0.f
2144 };
nikraj0193f84a92019-06-05 10:48:46 +01002145
nikraj010421e7f2019-06-14 09:40:34 +01002146 std::vector<float> expectedOutputValues
2147 {
2148 INFINITY, -INFINITY
2149 };
2150
2151 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002152 inputTensorInfo, outputTensorInfo,
2153 inputValues, expectedOutputValues);
2154}
2155
2156template<armnn::DataType ArmnnType, typename T>
2157LayerTestResult<T, 2> RsqrtNegativeTest(
2158 armnn::IWorkloadFactory& workloadFactory,
2159 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2160{
2161 const armnn::TensorShape inputShape{ 1, 2 };
2162 const armnn::TensorShape outputShape{ 1, 2 };
2163
nikraj010421e7f2019-06-14 09:40:34 +01002164 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2165 inputTensorInfo.SetQuantizationScale(0.1f);
2166 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002167
nikraj010421e7f2019-06-14 09:40:34 +01002168 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2169 outputTensorInfo.SetQuantizationScale(0.1f);
2170 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002171
nikraj010421e7f2019-06-14 09:40:34 +01002172 std::vector<float> inputValues
2173 {
2174 -25.f, -16.f
2175 };
nikraj0193f84a92019-06-05 10:48:46 +01002176
nikraj010421e7f2019-06-14 09:40:34 +01002177 std::vector<float> expectedOutputValues
2178 {
2179 -NAN, -NAN
2180 };
2181
2182 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002183 inputTensorInfo, outputTensorInfo,
2184 inputValues, expectedOutputValues);
2185}
2186
2187template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002188LayerTestResult<T, 4> SimpleReshapeTestImpl(
2189 armnn::IWorkloadFactory& workloadFactory,
2190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2191 armnn::TensorInfo inputTensorInfo,
2192 armnn::TensorInfo outputTensorInfo,
2193 const std::vector<T>& inputData,
2194 const std::vector<T>& outputExpectedData)
2195{
2196 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2197
2198 LayerTestResult<T, 4> ret(outputTensorInfo);
2199 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2200
2201 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2202 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2203
2204 armnn::ReshapeQueueDescriptor data;
2205 armnn::WorkloadInfo info;
2206 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2207 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2208
2209 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2210
2211 inputHandle->Allocate();
2212 outputHandle->Allocate();
2213
2214 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2215
2216 workload->Execute();
2217
2218 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2219
2220 return ret;
2221}
2222
Francis Murtagh46c09d02019-05-28 08:15:28 +01002223template<armnn::DataType ArmnnType, typename T>
2224LayerTestResult<T, 2> FullyConnectedTest(
2225 armnn::IWorkloadFactory& workloadFactory,
2226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2227 bool biasEnabled)
2228{
2229 constexpr static unsigned int inputWidth = 3u;
2230 constexpr static unsigned int inputHeight = 2u;
2231 constexpr static unsigned int inputChannels = 1u;
2232
2233 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2234
2235 constexpr static unsigned int outputChannels = 2u;
2236
2237 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2238 inputTensorInfo.SetQuantizationScale(0.1f);
2239 inputTensorInfo.SetQuantizationOffset(63);
2240
2241 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2242 outputTensorInfo.SetQuantizationScale(5.f);
2243 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2244
2245 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2246 weightsDesc.SetQuantizationScale(0.2f);
2247 weightsDesc.SetQuantizationOffset(93);
2248
2249 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2250 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2251 biasesDesc.SetQuantizationOffset(0);
2252
2253 LayerTestResult<T, 2> result(outputTensorInfo);
2254
2255 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2256 {
2257 -1.2f, 6.1f, -3.5f,
2258 18.8f, -5.5f, 2.9f
2259 },
2260 inputTensorInfo));
2261
2262 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2263 {
2264 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2265 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2266 },
2267 weightsDesc));
2268
2269 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2270
2271 result = SimpleFullyConnectedTestImpl<T>(
2272 workloadFactory,
2273 memoryManager,
2274 inputTensorInfo, outputTensorInfo,
2275 weightsDesc, biasesDesc,
2276 weights, bias, input,
2277 biasEnabled, true
2278 );
2279
2280 if (biasEnabled)
2281 {
2282 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2283 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2284 }
2285 else
2286 {
2287 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2288 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2289 }
2290
2291 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002292}
2293
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002294template<armnn::DataType ArmnnType, typename T>
2295LayerTestResult<T, 4> SimpleReshapeTest(
2296 armnn::IWorkloadFactory& workloadFactory,
2297 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2298{
2299 armnn::TensorInfo inputTensorInfo;
2300 armnn::TensorInfo outputTensorInfo;
2301
2302 unsigned int inputShape[] = { 2, 2, 3, 3 };
2303 unsigned int outputShape[] = { 2, 2, 9, 1 };
2304
2305 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2306 inputTensorInfo.SetQuantizationScale(1.0f);
2307 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2308 outputTensorInfo.SetQuantizationScale(1.0f);
2309
2310 auto input = ConvertToDataType<ArmnnType>(
2311 {
2312 0.0f, 1.0f, 2.0f,
2313 3.0f, 4.0f, 5.0f,
2314 6.0f, 7.0f, 8.0f,
2315
2316 9.0f, 10.0f, 11.0f,
2317 12.0f, 13.0f, 14.0f,
2318 15.0f, 16.0f, 17.0f,
2319
2320 18.0f, 19.0f, 20.0f,
2321 21.0f, 22.0f, 23.0f,
2322 24.0f, 25.0f, 26.0f,
2323
2324 27.0f, 28.0f, 29.0f,
2325 30.0f, 31.0f, 32.0f,
2326 33.0f, 34.0f, 35.0f,
2327 },
2328 inputTensorInfo);
2329
2330 auto outputExpected = ConvertToDataType<ArmnnType>(
2331 {
2332 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2333
2334 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2335
2336 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2337
2338 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2339 },
2340 outputTensorInfo);
2341
2342 return SimpleReshapeTestImpl<T>(
2343 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002344}
James Conroy83735b12019-05-30 16:36:59 +01002345
2346template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2347LayerTestResult<T, 4> SimpleFloorTest(
2348 armnn::IWorkloadFactory& workloadFactory,
2349 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2350{
James Conroyb40d7102019-06-04 12:32:09 +01002351 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2352 inputTensorInfo.SetQuantizationScale(0.1f);
2353
2354 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2355 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002356
2357 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2358 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2359 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2360 inputTensorInfo));
2361
2362 LayerTestResult<T, 4> ret(outputTensorInfo);
2363 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2364 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2365 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2366 outputTensorInfo));
2367
2368 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2369 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2370
2371 armnn::FloorQueueDescriptor data;
2372 armnn::WorkloadInfo info;
2373 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2374 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2375
2376 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2377
2378 inputHandle->Allocate();
2379 outputHandle->Allocate();
2380
2381 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2382
2383 workload->Execute();
2384
2385 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2386
2387 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002388}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002389
2390
2391template<armnn::DataType ArmnnType, typename T>
2392LayerTestResult<T, 4> ResizeBilinearNopTest(
2393 armnn::IWorkloadFactory& workloadFactory,
2394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2395 const armnn::DataLayout dataLayout)
2396{
2397 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2398 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2399 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2400 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2401 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2402 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2403 if (armnn::IsQuantizedType<T>())
2404 {
2405 inputTensorInfo.SetQuantizationScale(1.5f);
2406 inputTensorInfo.SetQuantizationOffset(-3);
2407 outputTensorInfo.SetQuantizationScale(1.5f);
2408 outputTensorInfo.SetQuantizationOffset(-3);
2409 }
2410
2411 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2412 ? std::initializer_list<float>
2413 {
2414 1, 2, 3, 4,
2415 2, 3, 4, 5,
2416 3, 4, 5, 6,
2417 4, 5, 6, 7
2418 }
2419 : std::initializer_list<float>
2420 {
2421 1.0f, 2.0f, 3.0f, 4.0f,
2422 2.0f, 3.0f, 4.0f, 5.0f,
2423 3.0f, 4.0f, 5.0f, 6.0f,
2424 4.0f, 5.0f, 6.0f, 7.0f,
2425
2426 1.0f, 2.0f, 3.0f, 4.0f,
2427 2.0f, 3.0f, 4.0f, 5.0f,
2428 3.0f, 4.0f, 5.0f, 6.0f,
2429 4.0f, 5.0f, 6.0f, 7.0f
2430 };
2431
2432 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2433 if (dataLayout == armnn::DataLayout::NHWC)
2434 {
2435 std::vector<float> tmp(inputData.size());
2436 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2437 inputData = tmp;
2438 }
2439
2440 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2441 inputTensorInfo.GetQuantizationOffset(),
2442 inputData));
2443
2444 LayerTestResult<T, 4> result(outputTensorInfo);
2445 result.outputExpected = input;
2446
2447 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2448 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2449
2450 armnn::ResizeBilinearQueueDescriptor descriptor;
2451 descriptor.m_Parameters.m_DataLayout = dataLayout;
2452 armnn::WorkloadInfo info;
2453 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2454 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2455
2456 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2457
2458 inputHandle->Allocate();
2459 outputHandle->Allocate();
2460 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2461
2462 workload->PostAllocationConfigure();
2463 workload->Execute();
2464
2465 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2466 return result;
2467}
2468
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002469template<armnn::DataType ArmnnType, typename T>
2470LayerTestResult<T, 4> SimpleResizeBilinearTest(
2471 armnn::IWorkloadFactory& workloadFactory,
2472 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2473 const armnn::DataLayout dataLayout)
2474{
2475 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2476 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2477 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2478 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2479 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2480 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2481
2482 if (armnn::IsQuantizedType<T>())
2483 {
2484 inputTensorInfo.SetQuantizationScale(0.1567f);
2485 inputTensorInfo.SetQuantizationOffset(1);
2486 outputTensorInfo.SetQuantizationScale(0.1567f);
2487 outputTensorInfo.SetQuantizationOffset(1);
2488 }
2489
2490 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2491 ? std::initializer_list<float>
2492 {
2493 1, 255,
2494 200, 250
2495 }
2496 : std::initializer_list<float>
2497 {
2498 1.0f, 255.0f,
2499 200.0f, 250.0f,
2500
2501 250.0f, 200.0f,
2502 250.0f, 1.0f
2503 };
2504
2505 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2506 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2507 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2508 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2509 // which we would expect if projecting the centre).
2510
2511 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2512 ? std::initializer_list<float>
2513 {
2514 1
2515 }
2516 : std::initializer_list<float>
2517 {
2518 1.0f,
2519
2520 250.0f
2521 };
2522
2523 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2524 if (dataLayout == armnn::DataLayout::NHWC)
2525 {
2526 std::vector<float> tmp(inputData.size());
2527 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2528 inputData = tmp;
2529
2530 std::vector<float> tmp1(outputData.size());
2531 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2532 outputData = tmp1;
2533 }
2534
2535 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2536 inputTensorInfo.GetQuantizationOffset(),
2537 inputData));
2538
2539 LayerTestResult<T, 4> result(outputTensorInfo);
2540 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2541 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2542 outputTensorInfo.GetQuantizationOffset(),
2543 outputData));
2544
2545 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2546 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2547
2548 armnn::ResizeBilinearQueueDescriptor descriptor;
2549 descriptor.m_Parameters.m_DataLayout = dataLayout;
2550 armnn::WorkloadInfo info;
2551 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2552 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2553
2554 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2555
2556 inputHandle->Allocate();
2557 outputHandle->Allocate();
2558 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2559
2560 workload->PostAllocationConfigure();
2561 workload->Execute();
2562
2563 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2564 return result;
2565}
2566
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002567template<armnn::DataType ArmnnType, typename T>
2568LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2569 armnn::IWorkloadFactory& workloadFactory,
2570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2571 const armnn::DataLayout dataLayout)
2572{
2573 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2574 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2575 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2576 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2577 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2578 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2579
2580 if (armnn::IsQuantizedType<T>())
2581 {
2582 inputTensorInfo.SetQuantizationScale(3.141592f);
2583 inputTensorInfo.SetQuantizationOffset(3);
2584 outputTensorInfo.SetQuantizationScale(3.141592f);
2585 outputTensorInfo.SetQuantizationOffset(3);
2586 }
2587
2588 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2589 ? std::initializer_list<float>
2590 {
2591 1, 2, 3, 4,
2592 2, 3, 4, 5,
2593 3, 4, 5, 6,
2594 4, 5, 6, 7
2595 }
2596 : std::initializer_list<float>
2597 {
2598 1.0f, 2.0f, 3.0f, 4.0f,
2599 2.0f, 3.0f, 4.0f, 5.0f,
2600 3.0f, 4.0f, 5.0f, 6.0f,
2601 4.0f, 5.0f, 6.0f, 7.0f,
2602
2603 7.0f, 6.0f, 5.0f, 4.0f,
2604 6.0f, 5.0f, 4.0f, 3.0f,
2605 5.0f, 4.0f, 3.0f, 2.0f,
2606 4.0f, 3.0f, 2.0f, 1.0f
2607 };
2608
2609 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2610 ? std::initializer_list<float>
2611 {
2612 1, 3,
2613 3, 5
2614 }
2615 : std::initializer_list<float>
2616 {
2617 1.0f, 3.0f,
2618 3.0f, 5.0f,
2619
2620 7.0f, 5.0f,
2621 5.0f, 3.0f
2622 };
2623
2624 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2625 if (dataLayout == armnn::DataLayout::NHWC)
2626 {
2627 std::vector<float> tmp(inputData.size());
2628 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2629 inputData = tmp;
2630
2631 std::vector<float> tmp1(outputData.size());
2632 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2633 outputData = tmp1;
2634 }
2635
2636 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2637 inputTensorInfo.GetQuantizationOffset(),
2638 inputData));
2639
2640 LayerTestResult<T, 4> result(outputTensorInfo);
2641 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2642 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2643 outputTensorInfo.GetQuantizationOffset(),
2644 outputData));
2645
2646 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2647 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2648
2649 armnn::ResizeBilinearQueueDescriptor descriptor;
2650 descriptor.m_Parameters.m_DataLayout = dataLayout;
2651 armnn::WorkloadInfo info;
2652 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2653 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2654
2655 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2656
2657 inputHandle->Allocate();
2658 outputHandle->Allocate();
2659 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2660
2661 workload->PostAllocationConfigure();
2662 workload->Execute();
2663
2664 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2665 return result;
2666}
2667
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002668template<armnn::DataType ArmnnType, typename T>
2669LayerTestResult<T, 4> ResizeBilinearMinTest(
2670 armnn::IWorkloadFactory& workloadFactory,
2671 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2672 const armnn::DataLayout dataLayout)
2673{
2674 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2675 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2676 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2677 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2678 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2679 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2680
2681 if (armnn::IsQuantizedType<T>())
2682 {
2683 inputTensorInfo.SetQuantizationScale(1.5f);
2684 inputTensorInfo.SetQuantizationOffset(-1);
2685 outputTensorInfo.SetQuantizationScale(1.5f);
2686 outputTensorInfo.SetQuantizationOffset(-1);
2687 }
2688
2689 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2690 ? std::initializer_list<float>
2691 {
2692 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2693 9.0f, 13.5f, 21.0f // 5, 8, 13
2694 }
2695 : std::initializer_list<float>
2696 {
2697 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2698 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2699 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2700
2701 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2702 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2703 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2704 };
2705
2706 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2707 ? std::initializer_list<float>
2708 {
2709 3.0f, 5.25f // 1, 3
2710 }
2711 : std::initializer_list<float>
2712 {
2713 1.0f, 2.6666f, 6.00f,
2714 78.5f, 179.3333f, 401.00f,
2715
2716 987.0f, 454.6670f, 203.33f,
2717 48.5f, 22.3333f, 10.00f
2718 };
2719
2720 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2721 if (dataLayout == armnn::DataLayout::NHWC)
2722 {
2723 std::vector<float> tmp(inputData.size());
2724 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2725 inputData = tmp;
2726
2727 std::vector<float> tmp1(outputData.size());
2728 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2729 outputData = tmp1;
2730 }
2731
2732 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2733 inputTensorInfo.GetQuantizationOffset(),
2734 inputData));
2735
2736 LayerTestResult<T, 4> result(outputTensorInfo);
2737 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2738 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2739 outputTensorInfo.GetQuantizationOffset(),
2740 outputData));
2741
2742 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2743 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2744
2745 armnn::ResizeBilinearQueueDescriptor descriptor;
2746 descriptor.m_Parameters.m_DataLayout = dataLayout;
2747 armnn::WorkloadInfo info;
2748 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2749 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2750
2751 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2752
2753 inputHandle->Allocate();
2754 outputHandle->Allocate();
2755 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2756
2757 workload->PostAllocationConfigure();
2758 workload->Execute();
2759
2760 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2761 return result;
2762}
2763
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002764template<armnn::DataType ArmnnType, typename T>
2765LayerTestResult<T, 4> ResizeBilinearMagTest(
2766 armnn::IWorkloadFactory& workloadFactory,
2767 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2768 const armnn::DataLayout dataLayout)
2769{
2770 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2771 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2772 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2773 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2774 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2775 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2776
2777 if (armnn::IsQuantizedType<T>())
2778 {
2779 inputTensorInfo.SetQuantizationScale(0.010765f);
2780 inputTensorInfo.SetQuantizationOffset(7);
2781 outputTensorInfo.SetQuantizationScale(0.010132f);
2782 outputTensorInfo.SetQuantizationOffset(-18);
2783 }
2784
2785 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2786 ? std::initializer_list<float>
2787 {
2788 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2789 1.05497f, 1.302565f, // 105, 128,
2790 2.400595f, 0.68896f // 230, 71
2791 }
2792 : std::initializer_list<float>
2793 {
2794 1.0f, 2.0f,
2795 13.0f, 21.0f,
2796 144.0f, 233.0f,
2797
2798 233.0f, 144.0f,
2799 21.0f, 13.0f,
2800 2.0f, 1.0f
2801 };
2802 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2803 ? std::initializer_list<float>
2804 {
2805 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2806 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2807 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2808 // 0, 87, 173, 217, 217, : Expected quantised values
2809 // 86, 96, 106, 111, 111,
2810 // 219, 151, 84, 50, 50
2811 }
2812 : std::initializer_list<float>
2813 {
2814 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2815 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2816 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2817
2818 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2819 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2820 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2821 };
2822
2823 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2824 if (dataLayout == armnn::DataLayout::NHWC)
2825 {
2826 std::vector<float> tmp(inputData.size());
2827 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2828 inputData = tmp;
2829
2830 std::vector<float> tmp1(outputData.size());
2831 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2832 outputData = tmp1;
2833 }
2834
2835 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2836 inputTensorInfo.GetQuantizationOffset(),
2837 inputData));
2838
2839 LayerTestResult<T, 4> result(outputTensorInfo);
2840 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2841 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2842 outputTensorInfo.GetQuantizationOffset(),
2843 outputData));
2844
2845 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2846 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2847
2848 armnn::ResizeBilinearQueueDescriptor descriptor;
2849 descriptor.m_Parameters.m_DataLayout = dataLayout;
2850 armnn::WorkloadInfo info;
2851 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2852 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2853
2854 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2855
2856 inputHandle->Allocate();
2857 outputHandle->Allocate();
2858 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2859
2860 workload->PostAllocationConfigure();
2861 workload->Execute();
2862
2863 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2864 return result;
2865}
2866
James Conroy4d1ff582019-06-10 17:06:39 +01002867template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
2868LayerTestResult<T, OutputDim> MeanTestHelper(
2869 armnn::IWorkloadFactory& workloadFactory,
2870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2871 const unsigned int* inputShape,
2872 const std::vector<float>& inputData,
2873 const std::vector<unsigned int>& axis,
2874 bool keepDims,
2875 const unsigned int* outputShape,
2876 const std::vector<float>& outputData,
2877 float scale = 1.0f,
2878 int32_t offset = 0)
2879{
2880 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
2881 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
2882
2883 inputTensorInfo.SetQuantizationScale(scale);
2884 inputTensorInfo.SetQuantizationOffset(offset);
2885
2886 outputTensorInfo.SetQuantizationScale(scale);
2887 outputTensorInfo.SetQuantizationOffset(offset);
2888
2889 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
2890
2891 LayerTestResult<T, OutputDim> result(outputTensorInfo);
2892 result.outputExpected = MakeTensor<T, OutputDim>(
2893 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
2894
2895 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2896 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2897
2898 armnn::MeanQueueDescriptor data;
2899 data.m_Parameters.m_Axis = axis;
2900 data.m_Parameters.m_KeepDims = keepDims;
2901 armnn::WorkloadInfo info;
2902 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2903 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2904
2905 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
2906
2907 inputHandle->Allocate();
2908 outputHandle->Allocate();
2909
2910 CopyDataToITensorHandle(inputHandle.get(), input.origin());
2911
2912 workload->PostAllocationConfigure();
2913 workload->Execute();
2914
2915 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
2916
2917 return result;
2918}
2919
2920template<armnn::DataType ArmnnType, typename T>
2921LayerTestResult<T, 1> MeanSimpleTest(
2922 armnn::IWorkloadFactory& workloadFactory,
2923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2924{
2925 const unsigned int inputShape[] = { 3, 2 };
2926 const unsigned int outputShape[] = { 1 };
2927
2928 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
2929 std::vector<float> output({ 2.5f });
2930
2931 return MeanTestHelper<ArmnnType, T, 2, 1>(
2932 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
2933}
2934
2935template<armnn::DataType ArmnnType, typename T>
2936LayerTestResult<T, 3> MeanSimpleAxisTest(
2937 armnn::IWorkloadFactory& workloadFactory,
2938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2939{
2940 const unsigned int inputShape[] = { 2, 3, 1, 2 };
2941 const unsigned int outputShape[] = { 3, 1, 2 };
2942
2943 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
2944 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
2945
2946 return MeanTestHelper<ArmnnType, T, 4, 3>(
2947 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
2948}
2949
2950template<armnn::DataType ArmnnType, typename T>
2951LayerTestResult<T, 4> MeanKeepDimsTest(
2952 armnn::IWorkloadFactory& workloadFactory,
2953 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2954{
2955 const unsigned int inputShape[] = { 1, 1, 3, 2 };
2956 const unsigned int outputShape[] = { 1, 1, 1, 2 };
2957
2958 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
2959 std::vector<float> output({ 2.5f, 2.5f });
2960
2961 return MeanTestHelper<ArmnnType, T, 4, 4>(
2962 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
2963}
2964
2965template<armnn::DataType ArmnnType, typename T>
2966LayerTestResult<T, 4> MeanMultipleDimsTest(
2967 armnn::IWorkloadFactory& workloadFactory,
2968 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2969{
2970 const unsigned int inputShape[] = { 2, 3, 1, 2 };
2971 const unsigned int outputShape[] = { 1, 3, 1, 1 };
2972
2973 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5 });
2974 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
2975
2976 return MeanTestHelper<ArmnnType, T, 4, 4>(
2977 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
2978}
2979
2980template<armnn::DataType ArmnnType, typename T>
2981LayerTestResult<T, 1> MeanVts1Test(
2982 armnn::IWorkloadFactory& workloadFactory,
2983 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2984{
2985 const unsigned int inputShape[] = { 4, 3, 2 };
2986 const unsigned int outputShape[] = { 2 };
2987
2988 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
2989 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
2990 std::vector<float> output({ 12.0f, 13.0f });
2991
2992 return MeanTestHelper<ArmnnType, T, 3, 1>(
2993 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
2994}
2995
2996template<armnn::DataType ArmnnType, typename T>
2997LayerTestResult<T, 3> MeanVts2Test(
2998 armnn::IWorkloadFactory& workloadFactory,
2999 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3000{
3001 const unsigned int inputShape[] = { 4, 3, 2 };
3002 const unsigned int outputShape[] = { 1, 3, 1 };
3003
3004 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
3005 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3006 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3007
3008 return MeanTestHelper<ArmnnType, T, 3, 3>(
3009 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3010}
3011
3012template<armnn::DataType ArmnnType, typename T>
3013LayerTestResult<T, 3> MeanVts3Test(
3014 armnn::IWorkloadFactory& workloadFactory,
3015 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3016{
3017 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3018 const unsigned int outputShape[] = { 1, 2, 1 };
3019
3020 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3021 std::vector<float> output({ 1.5f, 3.5f });
3022
3023 return MeanTestHelper<ArmnnType, T, 4, 3>(
3024 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3025}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003026
3027template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3028LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3029 armnn::IWorkloadFactory& workloadFactory,
3030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3031 bool useSubtensor)
3032{
3033 // Defines the tensor descriptors.
3034 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3035 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3036 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3037
3038 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3039
3040 // Quantized input1 tensor.
3041 const float inputScale1 = 0.5f;
3042 const int32_t inputOffset1 = 5;
3043
3044 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3045 {
3046 1, 2, 3,
3047 4, 5, 6,
3048 7, 8, 9,
3049 10, 11, 12,
3050 13, 14, 15,
3051 16, 17, 18,
3052
3053 19, 20, 21,
3054 22, 23, 24,
3055 25, 26, 27,
3056 28, 29, 30,
3057 31, 32, 33,
3058 34, 35, 36
3059 }));
3060
3061 // Quatized input2 tensor.
3062 const float inputScale2 = 0.2f;
3063 const int32_t inputOffset2 = 10;
3064
3065 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3066 {
3067 37, 38, 39,
3068 40, 41, 42,
3069 43, 44, 45,
3070 46, 47, 48,
3071 49, 50, 51,
3072 52, 53, 54
3073 }));
3074
3075 // Quantized output tensor.
3076 const float outputScale = 0.1f;
3077 const int32_t outputOffset = 20;
3078
3079 LayerTestResult<T, 3> ret(outputTensorInfo);
3080
3081 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3082 {
3083 0, 5, 74,
3084 10, 15, 76,
3085 20, 25, 78,
3086 30, 35, 80,
3087 40, 45, 82,
3088 50, 55, 84,
3089
3090 60, 65, 86,
3091 70, 75, 88,
3092 80, 85, 90,
3093 90, 95, 92,
3094 100, 105, 94,
3095 110, 115, 96,
3096
3097 120, 125, 98,
3098 130, 135, 100,
3099 140, 145, 102,
3100 150, 155, 104,
3101 160, 165, 106,
3102 170, 175, 108
3103 }));
3104
3105 outputTensorInfo.SetQuantizationScale(outputScale);
3106 outputTensorInfo.SetQuantizationOffset(outputOffset);
3107 inputTensorInfo1.SetQuantizationScale(inputScale1);
3108 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3109 inputTensorInfo2.SetQuantizationScale(inputScale2);
3110 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3111
3112 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3113 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3114
3115 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3116 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3117
3118 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3119
3120 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3121
3122 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3123 subTensorsSupported ?
3124 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3125 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3126
3127 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3128 subTensorsSupported ?
3129 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3130 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3131
3132 armnn::ConcatQueueDescriptor data;
3133 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3134 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3135 data.m_Parameters = desc;
3136
3137 armnn::WorkloadInfo info;
3138 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3139 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3140 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3141
3142 data.m_ViewOrigins.push_back(window1);
3143 data.m_ViewOrigins.push_back(window2);
3144
3145 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3146
3147 inputHandle1->Allocate();
3148 inputHandle2->Allocate();
3149 outputHandle->Allocate();
3150
3151 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3152 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3153
3154 workload->PostAllocationConfigure();
3155 workload->Execute();
3156
3157 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3158
3159 return ret;
3160}