blob: 10bc00f83beaf90fe722aed7944985f75f77966a [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
Teresa Charlin20b1f882019-06-19 09:34:37 +0100130template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
131LayerTestResult<T, 4> DepthwiseConvolution2d3x3Dilation3x3Test(
132 armnn::IWorkloadFactory& workloadFactory,
133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
134 bool biasEnabled,
135 const armnn::DataLayout layout);
136
137template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
138LayerTestResult<T, 4> DepthwiseConvolution2d2x3x3Dilation3x3Test(
139 armnn::IWorkloadFactory& workloadFactory,
140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
141 bool biasEnabled,
142 const armnn::DataLayout layout);
143
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000144LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
145 armnn::IWorkloadFactory& workloadFactory,
146 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
147 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000148
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000149LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
150 armnn::IWorkloadFactory& workloadFactory,
151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
152 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000153 const armnn::DataLayout layout);
surmeh013537c2c2018-05-18 16:31:43 +0100154
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000155LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
156 armnn::IWorkloadFactory& workloadFactory,
157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
158 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000159 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000160
Teresa Charlin20b1f882019-06-19 09:34:37 +0100161LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
162 armnn::IWorkloadFactory& workloadFactory,
163 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Bruno Goncalves22972f02019-04-26 21:03:24 -0300164
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000165LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
168 armnn::IWorkloadFactory& refWorkloadFactory,
169 const armnn::DataLayout layout);
170
171LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
172 armnn::IWorkloadFactory& workloadFactory,
173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
174 armnn::IWorkloadFactory& refWorkloadFactory,
175 const armnn::DataLayout layout);
176
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000177LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000181
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000182LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
183 armnn::IWorkloadFactory& workloadFactory,
184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
185 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000186
Teresa Charlin0434df62019-06-06 13:40:35 +0100187LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
188 armnn::IWorkloadFactory& workloadFactory,
189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
190 bool forceNoPadding);
191
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000192LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
193 armnn::IWorkloadFactory& workloadFactory,
194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
195 bool forceNoPadding);
196
197LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
198 armnn::IWorkloadFactory& workloadFactory,
199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
200 bool forceNoPadding );
201
Teresa Charlin0434df62019-06-06 13:40:35 +0100202LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000203 armnn::IWorkloadFactory& workloadFactory,
Teresa Charlin0434df62019-06-06 13:40:35 +0100204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205 bool forceNoPadding );
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000206
207LayerTestResult<float, 4> SimpleMaxPooling2dTest(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000210 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000211
212LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
213 armnn::IWorkloadFactory& workloadFactory,
214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000215 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000216
Teresa Charlin0434df62019-06-06 13:40:35 +0100217LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
218 armnn::IWorkloadFactory& workloadFactory,
219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
220 const armnn::DataLayout dataLayout);
221
222LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
223 armnn::IWorkloadFactory& workloadFactory,
224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
225
226LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
227 armnn::IWorkloadFactory& workloadFactory,
228 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
229
230LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
231 armnn::IWorkloadFactory& workloadFactory,
232 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
233
234LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
235 armnn::IWorkloadFactory& workloadFactory,
236 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
237
238LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
239 armnn::IWorkloadFactory& workloadFactory,
240 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
241
242LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
243 armnn::IWorkloadFactory& workloadFactory,
244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
245
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000246LayerTestResult<float, 4> SimpleAveragePooling2dTest(
247 armnn::IWorkloadFactory& workloadFactory,
248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000249 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000250
251LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
252 armnn::IWorkloadFactory& workloadFactory,
253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000254 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000255
Teresa Charlin0434df62019-06-06 13:40:35 +0100256LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
257 armnn::IWorkloadFactory& workloadFactory,
258 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
259 const armnn::DataLayout dataLayout);
260
261LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
262 armnn::IWorkloadFactory& workloadFactory,
263 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
264
265LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
266 armnn::IWorkloadFactory& workloadFactory,
267 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
268
269LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
270 armnn::IWorkloadFactory& workloadFactory,
271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
272
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000273LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
274 armnn::IWorkloadFactory& workloadFactory,
275 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
276 bool forceNoPadding);
277
278LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
279 armnn::IWorkloadFactory& workloadFactory,
280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
281
282LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
283 armnn::IWorkloadFactory& workloadFactory,
284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
285
Teresa Charlin0434df62019-06-06 13:40:35 +0100286LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
287 armnn::IWorkloadFactory& workloadFactory,
288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
289
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000290LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
291 armnn::IWorkloadFactory& workloadFactory,
292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
293
telsoa014fcda012018-03-09 14:13:49 +0000294LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000295 armnn::IWorkloadFactory& workloadFactory,
296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000297
Teresa Charlin0434df62019-06-06 13:40:35 +0100298LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
299 armnn::IWorkloadFactory& workloadFactory,
300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
301
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000302LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
303 armnn::IWorkloadFactory& workloadFactory,
304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000305
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000306LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
307 armnn::IWorkloadFactory& workloadFactory,
308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000309
Teresa Charlin0434df62019-06-06 13:40:35 +0100310LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
311 armnn::IWorkloadFactory& workloadFactory,
312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
313
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000314LayerTestResult<float, 4> SimpleL2Pooling2dTest(
315 armnn::IWorkloadFactory& workloadFactory,
316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000317 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000318
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000319LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
320 armnn::IWorkloadFactory& workloadFactory,
321 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000322 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000323
Teresa Charlin0434df62019-06-06 13:40:35 +0100324LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
325 armnn::IWorkloadFactory& workloadFactory,
326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
327 const armnn::DataLayout dataLayout);
328
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000329LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
330 armnn::IWorkloadFactory& workloadFactory,
331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000332
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000333LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
334 armnn::IWorkloadFactory& workloadFactory,
335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000336
Teresa Charlin0434df62019-06-06 13:40:35 +0100337LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
338 armnn::IWorkloadFactory& workloadFactory,
339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
340
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000341LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
342 armnn::IWorkloadFactory& workloadFactory,
343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000344
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000345LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
346 armnn::IWorkloadFactory& workloadFactory,
347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000348
Teresa Charlin0434df62019-06-06 13:40:35 +0100349LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
350 armnn::IWorkloadFactory& workloadFactory,
351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
352
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000353LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
354 armnn::IWorkloadFactory& workloadFactory,
355 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000356
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000357LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
358 armnn::IWorkloadFactory& workloadFactory,
359 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000360
Teresa Charlin0434df62019-06-06 13:40:35 +0100361LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
362 armnn::IWorkloadFactory& workloadFactory,
363 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
364
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000365LayerTestResult<float, 4> L2Pooling2dSize7Test(
366 armnn::IWorkloadFactory& workloadFactory,
367 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000368
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000369LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
370 armnn::IWorkloadFactory& workloadFactory,
371 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000372
Teresa Charlin0434df62019-06-06 13:40:35 +0100373LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
374 armnn::IWorkloadFactory& workloadFactory,
375 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
376
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000377LayerTestResult<float, 4> L2Pooling2dSize9Test(
378 armnn::IWorkloadFactory& workloadFactory,
379 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000380
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000381LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
382 armnn::IWorkloadFactory& workloadFactory,
383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
384
Teresa Charlin0434df62019-06-06 13:40:35 +0100385LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000386 armnn::IWorkloadFactory& workloadFactory,
387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
388
389LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
390 armnn::IWorkloadFactory& workloadFactory,
391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
392
393LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
394 armnn::IWorkloadFactory& workloadFactory,
395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
396
Teresa Charlin0434df62019-06-06 13:40:35 +0100397LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
398 armnn::IWorkloadFactory& workloadFactory,
399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
400
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000401LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
402 armnn::IWorkloadFactory& workloadFactory,
403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
404
405LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
406 armnn::IWorkloadFactory& workloadFactory,
407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
408
Teresa Charlin0434df62019-06-06 13:40:35 +0100409LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
410 armnn::IWorkloadFactory& workloadFactory,
411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
412
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000413LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
414 armnn::IWorkloadFactory& workloadFactory,
415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
416
417LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
418 armnn::IWorkloadFactory& workloadFactory,
419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
420
Teresa Charlin0434df62019-06-06 13:40:35 +0100421LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
422 armnn::IWorkloadFactory& workloadFactory,
423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
424
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000425LayerTestResult<float, 4> ComparePooling2dTest(
426 armnn::IWorkloadFactory& workloadFactory,
427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
428 armnn::IWorkloadFactory& refWorkloadFactory,
429 armnn::PoolingAlgorithm poolingType);
430
431LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
432 armnn::IWorkloadFactory& workloadFactory,
433 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
434 armnn::IWorkloadFactory& refWorkloadFactory,
435 armnn::PoolingAlgorithm poolingType);
436
Teresa Charlin0434df62019-06-06 13:40:35 +0100437LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
438 armnn::IWorkloadFactory& workloadFactory,
439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
440 armnn::IWorkloadFactory& refWorkloadFactory,
441 armnn::PoolingAlgorithm poolingType);
442
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000443LayerTestResult<float, 4> ConstantLinearActivationTest(
444 armnn::IWorkloadFactory& workloadFactory,
445 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
446
447LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
448 armnn::IWorkloadFactory& workloadFactory,
449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
450
451LayerTestResult<float, 4> SimpleNormalizationWithinTest(
452 armnn::IWorkloadFactory& workloadFactory,
453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
454
455LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
456 armnn::IWorkloadFactory& workloadFactory,
457 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
458
459LayerTestResult<float, 2> SimpleSoftmaxTest(
460 armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
462 float beta);
463
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000464LayerTestResult<float, 3> Simple3dSoftmaxTest(
465 armnn::IWorkloadFactory& workloadFactory,
466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
467 float beta);
468
469LayerTestResult<float, 4> Simple4dSoftmaxTest(
470 armnn::IWorkloadFactory& workloadFactory,
471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
472 float beta);
473
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000474LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
475 armnn::IWorkloadFactory& workloadFactory,
476 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
477 float beta);
478
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000479LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
480 armnn::IWorkloadFactory& workloadFactory,
481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
482 float beta);
483
484LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
485 armnn::IWorkloadFactory& workloadFactory,
486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
487 float beta);
488
nikraj01248683f2019-05-29 16:46:50 +0100489LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
492 float beta);
493
494LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
495 armnn::IWorkloadFactory& workloadFactory,
496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
497 float beta);
498
499LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
500 armnn::IWorkloadFactory& workloadFactory,
501 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
502 float beta);
503
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000504LayerTestResult<float, 4> SimpleSigmoidTest(
505 armnn::IWorkloadFactory& workloadFactory,
506 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
507
Nina Drozd8ed4b8c2019-05-29 10:41:04 +0100508template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
509LayerTestResult<T, 4> SimpleReshapeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000510 armnn::IWorkloadFactory& workloadFactory,
511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
512
513LayerTestResult<float, 4> SimpleFloorTest(
514 armnn::IWorkloadFactory& workloadFactory,
515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
516
517LayerTestResult<float, 1> Concatenation1dTest(
518 armnn::IWorkloadFactory& workloadFactory,
519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
520
521LayerTestResult<float, 2> Concatenation2dDim0Test(
522 armnn::IWorkloadFactory& workloadFactory,
523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
524
525LayerTestResult<float, 2> Concatenation2dDim1Test(
526 armnn::IWorkloadFactory& workloadFactory,
527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
528
529LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
530 armnn::IWorkloadFactory& workloadFactory,
531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
532
533LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
534 armnn::IWorkloadFactory& workloadFactory,
535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
536
537LayerTestResult<float, 3> Concatenation3dDim0Test(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
540
541LayerTestResult<float, 3> Concatenation3dDim1Test(
542 armnn::IWorkloadFactory& workloadFactory,
543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
544
545LayerTestResult<float, 3> Concatenation3dDim2Test(
546 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
548 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000549
550LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
551 armnn::IWorkloadFactory& workloadFactory,
552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
553
554LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
555 armnn::IWorkloadFactory& workloadFactory,
556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
557
558LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
559 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000560 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
561 bool useSubtensor);
562
563LayerTestResult<float, 4> Concatenation4dDim0Test(
564 armnn::IWorkloadFactory& workloadFactory,
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000565 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
566
narpra015cdda352018-11-19 15:30:27 +0000567LayerTestResult<float, 4> Concatenation4dDim1Test(
568 armnn::IWorkloadFactory& workloadFactory,
569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
570
571LayerTestResult<float, 4> Concatenation4dDim2Test(
572 armnn::IWorkloadFactory& workloadFactory,
573 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
574
575LayerTestResult<float, 4> Concatenation4dDim3Test(
576 armnn::IWorkloadFactory& workloadFactory,
577 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
578 bool useSubtensor);
579
580LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
581 armnn::IWorkloadFactory& workloadFactory,
582 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
583
584LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
585 armnn::IWorkloadFactory& workloadFactory,
586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
587
588LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
589 armnn::IWorkloadFactory& workloadFactory,
590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
591
592LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
593 armnn::IWorkloadFactory& workloadFactory,
594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
595 bool useSubtensor);
596
597LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
598 armnn::IWorkloadFactory& workloadFactory,
599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
600
601LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
602 armnn::IWorkloadFactory& workloadFactory,
603 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
604
605LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
606 armnn::IWorkloadFactory& workloadFactory,
607 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
608
609LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
610 armnn::IWorkloadFactory& workloadFactory,
611 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
612 bool useSubtensor);
613
614LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
615 armnn::IWorkloadFactory& workloadFactory,
616 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
617
618LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
619 armnn::IWorkloadFactory& workloadFactory,
620 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
621
622LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
623 armnn::IWorkloadFactory& workloadFactory,
624 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
625
626LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
627 armnn::IWorkloadFactory& workloadFactory,
628 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
629 bool useSubtensor);
630
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000631LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
632 armnn::IWorkloadFactory& workloadFactory,
633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
634
Teresa Charlin18515e22019-04-24 10:17:46 +0100635LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
636 armnn::IWorkloadFactory& workloadFactory,
637 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
638
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000639LayerTestResult<float, 4> CompareConvolution2dTest(
640 armnn::IWorkloadFactory& workloadFactory,
641 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000642 armnn::IWorkloadFactory& refWorkloadFactory);
643
644template<typename T>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000645LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
646 armnn::IWorkloadFactory& workloadFactory,
647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
648 armnn::IWorkloadFactory& refWorkloadFactory,
Matthew Bentham8800c002018-11-19 13:19:28 +0000649 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000650
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000651LayerTestResult<float, 4> CompareNormalizationTest(
652 armnn::IWorkloadFactory& workloadFactory,
653 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
654 armnn::IWorkloadFactory& refWorkloadFactory,
655 armnn::NormalizationAlgorithmChannel normChannel,
656 armnn::NormalizationAlgorithmMethod normMethod);
telsoa014fcda012018-03-09 14:13:49 +0000657
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000658LayerTestResult<float, 2> CompareSoftmaxTest(
659 armnn::IWorkloadFactory& workloadFactory,
660 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000661 armnn::IWorkloadFactory& refWorkloadFactory,
662 float beta);
663
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000664LayerTestResult<float, 2> FullyConnectedFloat32Test(
665 armnn::IWorkloadFactory& workloadFactory,
666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
667 bool biasEnabled,
668 bool transposeWeights);
telsoa014fcda012018-03-09 14:13:49 +0000669
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000670std::vector<LayerTestResult<float, 3>> SplitterTest(
671 armnn::IWorkloadFactory& workloadFactory,
672 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
David Beck5cd01f32018-09-12 16:00:08 +0100673
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000674LayerTestResult<float, 3> CopyViaSplitterTest(
675 armnn::IWorkloadFactory& workloadFactory,
676 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000677
Jim Flynn4ed6c832019-05-20 11:02:46 +0100678LayerTestResult<float, 3> ConcatTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000679 armnn::IWorkloadFactory& workloadFactory,
680 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000681
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000682LayerTestResult<float, 4> AdditionTest(
683 armnn::IWorkloadFactory& workloadFactory,
684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000685
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000686LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
687 armnn::IWorkloadFactory& workloadFactory,
688 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000689
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000690LayerTestResult<float, 4> AdditionBroadcastTest(
691 armnn::IWorkloadFactory& workloadFactory,
692 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000693
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000694LayerTestResult<float, 4> CompareAdditionTest(
695 armnn::IWorkloadFactory& workloadFactory,
696 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
697 armnn::IWorkloadFactory& refWorkloadFactory);
telsoa014fcda012018-03-09 14:13:49 +0000698
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000699LayerTestResult<float, 4> SubtractionTest(
700 armnn::IWorkloadFactory& workloadFactory,
701 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000702
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000703LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
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> SubtractionBroadcastTest(
708 armnn::IWorkloadFactory& workloadFactory,
709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000710
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000711LayerTestResult<float, 4> CompareActivationTest(
712 armnn::IWorkloadFactory& workloadFactory,
713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
714 armnn::IWorkloadFactory& refWorkloadFactory,
715 armnn::ActivationFunction f,
716 unsigned int batchSize);
telsoa014fcda012018-03-09 14:13:49 +0000717
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000718LayerTestResult<float, 4> DivisionTest(
719 armnn::IWorkloadFactory& workloadFactory,
720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000721
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000722LayerTestResult<float, 4> DivisionByZeroTest(
723 armnn::IWorkloadFactory& workloadFactory,
724 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100725
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000726LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
727 armnn::IWorkloadFactory& workloadFactory,
728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100729
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000730LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
731 armnn::IWorkloadFactory& workloadFactory,
732 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100733
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000734LayerTestResult<float, 4> MultiplicationTest(
735 armnn::IWorkloadFactory& workloadFactory,
736 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100737
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000738LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100741
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000742LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
743 armnn::IWorkloadFactory& workloadFactory,
744 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100745
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000746LayerTestResult<float, 4> CompareMultiplicationTest(
747 armnn::IWorkloadFactory& workloadFactory,
748 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
749 armnn::IWorkloadFactory& refWorkloadFactory);
Matteo Martincigh28dcab62018-10-19 16:40:03 +0100750
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000751LayerTestResult<float, 4> BatchNormTest(
752 armnn::IWorkloadFactory& workloadFactory,
753 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000754
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000755LayerTestResult<float, 4> BatchNormNhwcTest(
756 armnn::IWorkloadFactory& workloadFactory,
757 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000758
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000759LayerTestResult<float, 4> CompareBatchNormTest(
760 armnn::IWorkloadFactory& workloadFactory,
761 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
762 armnn::IWorkloadFactory& refWorkloadFactory);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000763
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000764LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
765 armnn::IWorkloadFactory& workloadFactory,
766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000767
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000768LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
769 armnn::IWorkloadFactory& workloadFactor,
770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000771
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000772LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
773 armnn::IWorkloadFactory& workloadFactory,
774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000775
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000776LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
777 armnn::IWorkloadFactory& workloadFactory,
778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin262553e2018-11-14 11:26:23 +0000779
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000780LayerTestResult<float, 4> CompareBoundedReLuTest(
781 armnn::IWorkloadFactory& workloadFactory,
782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
783 armnn::IWorkloadFactory& refWorkloadFactory,
784 float upperBound,
785 float lowerBound);
786
konsof017f6db402019-06-07 15:15:58 +0100787LayerTestResult<float, 4> ReLuTest(
788 armnn::IWorkloadFactory& workloadFactory,
789 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
790
791LayerTestResult<uint8_t, 4> ReLuUint8Test(
792 armnn::IWorkloadFactory& workloadFactory,
793 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Teresa Charlin18515e22019-04-24 10:17:46 +0100794
795LayerTestResult<int16_t, 4> ReLuInt16Test(
796 armnn::IWorkloadFactory& workloadFactory,
797 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
798
799LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
800 armnn::IWorkloadFactory& workloadFactory,
801 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
802
konsof017f6db402019-06-07 15:15:58 +0100803LayerTestResult<float, 4> SoftReLuTest(
804 armnn::IWorkloadFactory& workloadFactory,
805 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
806
807LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
808 armnn::IWorkloadFactory& workloadFactory,
809 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
810
Teresa Charlin18515e22019-04-24 10:17:46 +0100811LayerTestResult<int16_t, 4> SoftReLuInt16Test(
812 armnn::IWorkloadFactory& workloadFactory,
813 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
814
konsof017f6db402019-06-07 15:15:58 +0100815LayerTestResult<float, 4> LeakyReLuTest(
816 armnn::IWorkloadFactory& workloadFactory,
817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
818
819LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
820 armnn::IWorkloadFactory& workloadFactory,
821 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
822
Teresa Charlin18515e22019-04-24 10:17:46 +0100823LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
824 armnn::IWorkloadFactory& workloadFactory,
825 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
826
konsof017f6db402019-06-07 15:15:58 +0100827LayerTestResult<float, 4> AbsTest(
828 armnn::IWorkloadFactory& workloadFactory,
829 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
830
831LayerTestResult<uint8_t, 4> AbsUint8Test(
832 armnn::IWorkloadFactory& workloadFactory,
833 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
834
Teresa Charlin18515e22019-04-24 10:17:46 +0100835LayerTestResult<int16_t, 4> AbsInt16Test(
836 armnn::IWorkloadFactory& workloadFactory,
837 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
838
konsof017f6db402019-06-07 15:15:58 +0100839LayerTestResult<float, 4> SqrtTest(
840 armnn::IWorkloadFactory& workloadFactory,
841 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
842
843LayerTestResult<uint8_t, 4> SqrtUint8Test(
844 armnn::IWorkloadFactory& workloadFactory,
845 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
846
Teresa Charlin18515e22019-04-24 10:17:46 +0100847LayerTestResult<int16_t, 4> SqrtInt16Test(
848 armnn::IWorkloadFactory& workloadFactory,
849 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
850
konsof017f6db402019-06-07 15:15:58 +0100851LayerTestResult<float, 4> SquareTest(
852 armnn::IWorkloadFactory& workloadFactory,
853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
854
855LayerTestResult<uint8_t, 4> SquareUint8Test(
856 armnn::IWorkloadFactory& workloadFactory,
857 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
858
Teresa Charlin18515e22019-04-24 10:17:46 +0100859LayerTestResult<int16_t, 4> SquareInt16Test(
860 armnn::IWorkloadFactory& workloadFactory,
861 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
862
konsof017f6db402019-06-07 15:15:58 +0100863LayerTestResult<float, 4> TanhTest(
864 armnn::IWorkloadFactory& workloadFactory,
865 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
866
867LayerTestResult<uint8_t, 4> TanhUint8Test(
868 armnn::IWorkloadFactory& workloadFactory,
869 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
870
Teresa Charlin18515e22019-04-24 10:17:46 +0100871LayerTestResult<int16_t, 4> TanhInt16Test(
872 armnn::IWorkloadFactory& workloadFactory,
873 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
874
875
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100876/// Tests that the output should be identical to the input when the output dimensions match the input ones.
877template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
878LayerTestResult<T, 4> ResizeBilinearNopTest(
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 behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100884template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
885LayerTestResult<T, 4> SimpleResizeBilinearTest(
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 minification of a square input matrix (also: input dimensions are a
891// multiple of output dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100892template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
893LayerTestResult<T, 4> ResizeBilinearSqMinTest(
894 armnn::IWorkloadFactory& workloadFactory,
895 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
896 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000897
898// Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100899template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
900LayerTestResult<T, 4> ResizeBilinearMinTest(
901 armnn::IWorkloadFactory& workloadFactory,
902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
903 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000904
905// Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100906template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
907LayerTestResult<T, 4> ResizeBilinearMagTest(
908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
910 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000911
nikraj0193f84a92019-06-05 10:48:46 +0100912template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
913LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000914 armnn::IWorkloadFactory& workloadFactory,
915 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
916 const armnn::TensorInfo inputTensorInfo,
917 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +0100918 const std::vector<float>& inputValues,
919 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000920
nikraj0193f84a92019-06-05 10:48:46 +0100921template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
922LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000923 armnn::IWorkloadFactory& workloadFactory,
924 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
925
nikraj0193f84a92019-06-05 10:48:46 +0100926template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
927LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000928 armnn::IWorkloadFactory& workloadFactory,
929 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
930
nikraj0193f84a92019-06-05 10:48:46 +0100931template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
932LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000933 armnn::IWorkloadFactory& workloadFactory,
934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
935
nikraj0193f84a92019-06-05 10:48:46 +0100936template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
937LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000938 armnn::IWorkloadFactory& workloadFactory,
939 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
940
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000941LayerTestResult<float, 4> BatchNormTest(
942 armnn::IWorkloadFactory& workloadFactory,
943 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
944
945LayerTestResult<float, 4> BatchNormNhwcTest(
946 armnn::IWorkloadFactory& workloadFactory,
947 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
948
949LayerTestResult<float, 2> FakeQuantizationTest(
950 armnn::IWorkloadFactory& workloadFactory,
951 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
952
Ferran Balaguere52211e2019-06-17 12:23:52 +0100953LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
954 armnn::IWorkloadFactory& workloadFactory,
955 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
956 const armnn::DataLayout layout);
957
958LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
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> L2Normalization1dTest(
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> L2Normalization1dInt16Test(
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> L2Normalization1dUint8Test(
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> L2Normalization2dTest(
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> L2Normalization2dInt16Test(
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> L2Normalization2dUint8Test(
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> L2Normalization3dTest(
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> L2Normalization3dInt16Test(
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> L2Normalization3dUint8Test(
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> L2Normalization4dTest(
1009 armnn::IWorkloadFactory& workloadFactory,
1010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001011 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001012
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001013LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1014 armnn::IWorkloadFactory& workloadFactory,
1015 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1016 const armnn::DataLayout layout);
1017
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001018LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1019 armnn::IWorkloadFactory& workloadFactory,
1020 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1021 const armnn::DataLayout layout);
1022
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001023LayerTestResult<float, 4> ConstantTest(
1024 armnn::IWorkloadFactory& workloadFactory,
1025 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1026
Nina Drozd58ef2c62019-05-16 12:09:18 +01001027LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1028 armnn::IWorkloadFactory& workloadFactory,
1029 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1030
1031LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001032 armnn::IWorkloadFactory& workloadFactory,
1033 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1034
1035LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1036 armnn::IWorkloadFactory& workloadFactory,
1037 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1038 float upperBound);
1039
1040LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1041 armnn::IWorkloadFactory& workloadFactory,
1042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1043 float upperBound,
1044 float lowerBound);
1045
Francis Murtagh46c09d02019-05-28 08:15:28 +01001046template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1047LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001048 armnn::IWorkloadFactory& workloadFactory,
1049 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1050 bool biasEnabled);
1051
1052std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1053 armnn::IWorkloadFactory& workloadFactory,
1054 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1055
Ruomei Yan25339c32019-05-28 16:48:20 +01001056std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1057 armnn::IWorkloadFactory& workloadFactory,
1058 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1059
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001060LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1061 armnn::IWorkloadFactory& workloadFactory,
1062 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1063
Ruomei Yan25339c32019-05-28 16:48:20 +01001064LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1065 armnn::IWorkloadFactory& workloadFactory,
1066 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1067
Jim Flynn4ed6c832019-05-20 11:02:46 +01001068LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001069 armnn::IWorkloadFactory& workloadFactory,
1070 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1071
Jim Flynn4ed6c832019-05-20 11:02:46 +01001072LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001073 armnn::IWorkloadFactory& workloadFactory,
1074 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1075
Jim Flynn4ed6c832019-05-20 11:02:46 +01001076LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001077 armnn::IWorkloadFactory& workloadFactory,
1078 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001079
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001080LayerTestResult<uint8_t, 4> AdditionUint8Test(
1081 armnn::IWorkloadFactory& workloadFactory,
1082 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1083
1084LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1085 armnn::IWorkloadFactory& workloadFactory,
1086 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1087
1088LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1089 armnn::IWorkloadFactory& workloadFactory,
1090 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1091
Sadik Armagan2999a022019-04-09 14:20:12 +01001092LayerTestResult<int16_t, 4> AdditionInt16Test(
1093 armnn::IWorkloadFactory& workloadFactory,
1094 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1095
1096LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1097 armnn::IWorkloadFactory& workloadFactory,
1098 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1099
1100LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1101 armnn::IWorkloadFactory& workloadFactory,
1102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1103
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001104LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1105 armnn::IWorkloadFactory& workloadFactory,
1106 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1107
1108LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1109 armnn::IWorkloadFactory& workloadFactory,
1110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1111
1112LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1113 armnn::IWorkloadFactory& workloadFactory,
1114 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1115
Sadik Armagan2999a022019-04-09 14:20:12 +01001116LayerTestResult<int16_t, 4> SubtractionInt16Test(
1117 armnn::IWorkloadFactory& workloadFactory,
1118 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1119
1120LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1121 armnn::IWorkloadFactory& workloadFactory,
1122 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1123
1124LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1125 armnn::IWorkloadFactory& workloadFactory,
1126 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1127
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001128LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1129 armnn::IWorkloadFactory& workloadFactory,
1130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1131 armnn::IWorkloadFactory& refWorkloadFactory,
1132 armnn::ActivationFunction f);
1133
Teresa Charlin18515e22019-04-24 10:17:46 +01001134LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1135 armnn::IWorkloadFactory& workloadFactory,
1136 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1137 armnn::IWorkloadFactory& refWorkloadFactory,
1138 armnn::ActivationFunction f);
1139
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001140LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1141 armnn::IWorkloadFactory& workloadFactory,
1142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1143 armnn::IWorkloadFactory& refWorkloadFactory,
1144 float beta);
1145
1146LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1147 armnn::IWorkloadFactory& workloadFactory,
1148 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1149
1150LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1151 armnn::IWorkloadFactory& workloadFactory,
1152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1153
1154LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1155 armnn::IWorkloadFactory& workloadFactory,
1156 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1157
Sadik Armagan2999a022019-04-09 14:20:12 +01001158LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1159 armnn::IWorkloadFactory& workloadFactory,
1160 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1161
1162LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1163 armnn::IWorkloadFactory& workloadFactory,
1164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1165
1166LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1167 armnn::IWorkloadFactory& workloadFactory,
1168 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1169
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001170LayerTestResult<uint8_t, 4> DivisionUint8Test(
1171 armnn::IWorkloadFactory& workloadFactory,
1172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1173
1174LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1175 armnn::IWorkloadFactory& workloadFactory,
1176 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1177
1178LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1179 armnn::IWorkloadFactory& workloadFactory,
1180 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1181
Sadik Armagan2999a022019-04-09 14:20:12 +01001182LayerTestResult<int16_t, 4> DivisionInt16Test(
1183 armnn::IWorkloadFactory& workloadFactory,
1184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1185
1186LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1187 armnn::IWorkloadFactory& workloadFactory,
1188 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1189
1190LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1191 armnn::IWorkloadFactory& workloadFactory,
1192 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1193
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001194LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1195 armnn::IWorkloadFactory& workloadFactory,
1196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1197 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001198 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001199
1200LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1201 armnn::IWorkloadFactory& workloadFactory,
1202 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1203 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001204 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001205
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001206LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1207 armnn::IWorkloadFactory& workloadFactory,
1208 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1209 bool biasEnabled,
1210 const armnn::DataLayout layout);
1211
1212LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1213 armnn::IWorkloadFactory& workloadFactory,
1214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1215 bool biasEnabled,
1216 const armnn::DataLayout layout);
1217
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001218LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1219 armnn::IWorkloadFactory& workloadFactory,
1220 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1221 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001222 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001223
1224LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1225 armnn::IWorkloadFactory& workloadFactory,
1226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1227 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001228 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001229
Ruomei Yan88d44b82019-05-23 14:29:06 +01001230LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1231 armnn::IWorkloadFactory& workloadFactory,
1232 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1233 bool biasEnabled,
1234 const armnn::DataLayout layout);
1235
1236LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1237 armnn::IWorkloadFactory& workloadFactory,
1238 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1239 bool biasEnabled,
1240 const armnn::DataLayout layout);
1241
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001242LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1243 armnn::IWorkloadFactory& workloadFactory,
1244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1245
Teresa Charlin18515e22019-04-24 10:17:46 +01001246LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1247 armnn::IWorkloadFactory& workloadFactory,
1248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1249
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001250LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1251 armnn::IWorkloadFactory& workloadFactory,
1252 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1253
1254LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1255 armnn::IWorkloadFactory& workloadFactory,
1256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1257
Matteo Martincighf5507132019-06-04 10:59:47 +01001258LayerTestResult<int16_t, 4> BatchNormInt16Test(
1259 armnn::IWorkloadFactory& workloadFactory,
1260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1261
1262LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1263 armnn::IWorkloadFactory& workloadFactory,
1264 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1265
Nina Drozd58ef2c62019-05-16 12:09:18 +01001266LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1267 armnn::IWorkloadFactory& workloadFactory,
1268 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1269
1270LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001271 armnn::IWorkloadFactory& workloadFactory,
1272 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1273
1274LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1275 armnn::IWorkloadFactory& workloadFactory,
1276 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1277
1278LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1279 armnn::IWorkloadFactory& workloadFactory,
1280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1281
1282LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1283 armnn::IWorkloadFactory& workloadFactory,
1284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1285
1286LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1287 armnn::IWorkloadFactory& workloadFactory,
1288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1289
1290LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1291 armnn::IWorkloadFactory& workloadFactory,
1292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1293
1294LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1295 armnn::IWorkloadFactory& workloadFactory,
1296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1297
1298LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1299 armnn::IWorkloadFactory& workloadFactory,
1300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1301
1302LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1303 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1305 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001306
1307LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1308 armnn::IWorkloadFactory& workloadFactory,
1309 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1310
1311LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1312 armnn::IWorkloadFactory& workloadFactory,
1313 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1314
1315LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1316 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001317 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1318 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001319
kevmay012b4d88e2019-01-24 14:05:09 +00001320LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001321 armnn::IWorkloadFactory& workloadFactory,
1322 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1323
kevmay012b4d88e2019-01-24 14:05:09 +00001324LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001325 armnn::IWorkloadFactory& workloadFactory,
1326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1327
kevmay012b4d88e2019-01-24 14:05:09 +00001328LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001329 armnn::IWorkloadFactory& workloadFactory,
1330 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1331
1332LayerTestResult<uint8_t, 4> EqualUint8Test(
1333 armnn::IWorkloadFactory& workloadFactory,
1334 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1335
1336LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1337 armnn::IWorkloadFactory& workloadFactory,
1338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1339
1340LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1341 armnn::IWorkloadFactory& workloadFactory,
1342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1343
kevmay012b4d88e2019-01-24 14:05:09 +00001344LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001345 armnn::IWorkloadFactory& workloadFactory,
1346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1347
kevmay012b4d88e2019-01-24 14:05:09 +00001348LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001349 armnn::IWorkloadFactory& workloadFactory,
1350 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1351
kevmay012b4d88e2019-01-24 14:05:09 +00001352LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001353 armnn::IWorkloadFactory& workloadFactory,
1354 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1355
1356LayerTestResult<uint8_t, 4> GreaterUint8Test(
1357 armnn::IWorkloadFactory& workloadFactory,
1358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1359
1360LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1361 armnn::IWorkloadFactory& workloadFactory,
1362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1363
1364LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1365 armnn::IWorkloadFactory& workloadFactory,
1366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1367
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001368LayerTestResult<float, 2> FullyConnectedLargeTest(
1369 armnn::IWorkloadFactory& workloadFactory,
1370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1371 bool transposeWeights);
1372
1373LayerTestResult<float, 4> SimplePermuteFloat32Test(
1374 armnn::IWorkloadFactory& workloadFactory,
1375 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1376
1377LayerTestResult<uint8_t, 4> SimplePermuteUint8Test(
1378 armnn::IWorkloadFactory& workloadFactory,
1379 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1380
1381LayerTestResult<uint8_t, 2> PadUint82dTest(
1382 armnn::IWorkloadFactory& workloadFactory,
1383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1384
David Monahan34757812019-06-19 11:47:21 +01001385LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1386 armnn::IWorkloadFactory& workloadFactory,
1387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1388
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001389LayerTestResult<uint8_t, 3> PadUint83dTest(
1390 armnn::IWorkloadFactory& workloadFactory,
1391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1392
1393LayerTestResult<uint8_t, 4> PadUint84dTest(
1394 armnn::IWorkloadFactory& workloadFactory,
1395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1396
1397LayerTestResult<float, 2> PadFloat322dTest(
1398 armnn::IWorkloadFactory& workloadFactory,
1399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1400
David Monahan34757812019-06-19 11:47:21 +01001401LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1402 armnn::IWorkloadFactory& workloadFactory,
1403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1404
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001405LayerTestResult<float, 3> PadFloat323dTest(
1406 armnn::IWorkloadFactory& workloadFactory,
1407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1408
1409LayerTestResult<float, 4> PadFloat324dTest(
1410 armnn::IWorkloadFactory& workloadFactory,
1411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1412
1413LayerTestResult<float, 4> PermuteFloat32ValueSet1Test(
1414 armnn::IWorkloadFactory& workloadFactory,
1415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1416
1417LayerTestResult<float, 4> PermuteFloat32ValueSet2Test(
1418 armnn::IWorkloadFactory& workloadFactory,
1419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1420
1421LayerTestResult<float, 4> PermuteFloat32ValueSet3Test(
1422 armnn::IWorkloadFactory& workloadFactory,
1423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424
1425LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1426 armnn::IWorkloadFactory& workloadFactory,
1427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428
1429LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1430 armnn::IWorkloadFactory& workloadFactory,
1431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432
1433LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1434 armnn::IWorkloadFactory& workloadFactory,
1435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436
Conor Kennedyb9971c92019-05-07 07:14:23 +01001437LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1438 armnn::IWorkloadFactory& workloadFactory,
1439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440
1441LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1442 armnn::IWorkloadFactory& workloadFactory,
1443 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1444
1445LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1446 armnn::IWorkloadFactory& workloadFactory,
1447 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1448
1449LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1450 armnn::IWorkloadFactory& workloadFactory,
1451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1452
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001453LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1454 armnn::IWorkloadFactory& workloadFactory,
1455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1456
1457LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1458 armnn::IWorkloadFactory& workloadFactory,
1459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1460
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001461LayerTestResult<float, 4> MaximumSimpleTest(
1462 armnn::IWorkloadFactory& workloadFactory,
1463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1464
1465LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1466 armnn::IWorkloadFactory& workloadFactory,
1467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1468
1469LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1470 armnn::IWorkloadFactory& workloadFactory,
1471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1472
1473LayerTestResult<uint8_t , 4> MaximumUint8Test(
1474 armnn::IWorkloadFactory& workloadFactory,
1475 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1476
1477LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1478 armnn::IWorkloadFactory& workloadFactory,
1479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1480
1481LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
Sadik Armagan2999a022019-04-09 14:20:12 +01001485LayerTestResult<int16_t , 4> MaximumInt16Test(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
1489LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1490 armnn::IWorkloadFactory& workloadFactory,
1491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1492
1493LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1494 armnn::IWorkloadFactory& workloadFactory,
1495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1496
James Conroy4d1ff582019-06-10 17:06:39 +01001497template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1498LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001499 armnn::IWorkloadFactory& workloadFactory,
1500 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1501
James Conroy4d1ff582019-06-10 17:06:39 +01001502template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1503LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001504 armnn::IWorkloadFactory& workloadFactory,
1505 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1506
James Conroy4d1ff582019-06-10 17:06:39 +01001507template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1508LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001509 armnn::IWorkloadFactory& workloadFactory,
1510 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1511
James Conroy4d1ff582019-06-10 17:06:39 +01001512template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1513LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001514 armnn::IWorkloadFactory& workloadFactory,
1515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1516
James Conroy4d1ff582019-06-10 17:06:39 +01001517template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1518LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001519 armnn::IWorkloadFactory& workloadFactory,
1520 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1521
James Conroy4d1ff582019-06-10 17:06:39 +01001522template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1523LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001524 armnn::IWorkloadFactory& workloadFactory,
1525 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1526
James Conroy4d1ff582019-06-10 17:06:39 +01001527template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1528LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001529 armnn::IWorkloadFactory& workloadFactory,
1530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1531
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001532LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1533 armnn::IWorkloadFactory& workloadFactory,
1534 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1535
1536LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1537 armnn::IWorkloadFactory& workloadFactory,
1538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1539
1540LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1541 armnn::IWorkloadFactory & workloadFactory,
1542 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1543
Sadik Armagan2999a022019-04-09 14:20:12 +01001544LayerTestResult<int16_t , 4> MinimumInt16Test(
1545 armnn::IWorkloadFactory& workloadFactory,
1546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1547
1548LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1549 armnn::IWorkloadFactory& workloadFactory,
1550 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1551
1552LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1553 armnn::IWorkloadFactory& workloadFactory,
1554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1555
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001556LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1557 armnn::IWorkloadFactory& workloadFactory,
1558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1559
1560LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1561 armnn::IWorkloadFactory& workloadFactory,
1562 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1563
1564LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1565 armnn::IWorkloadFactory& workloadFactory,
1566 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1567
1568LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1569 armnn::IWorkloadFactory& workloadFactory,
1570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1571
1572LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1573 armnn::IWorkloadFactory& workloadFactory,
1574 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1575
1576LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1577 armnn::IWorkloadFactory& workloadFactory,
1578 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1579
1580LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1581 armnn::IWorkloadFactory& workloadFactory,
1582 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1583
1584LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1585 armnn::IWorkloadFactory& workloadFactory,
1586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1587
1588LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1589 armnn::IWorkloadFactory& workloadFactory,
1590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1591
1592LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1593 armnn::IWorkloadFactory& workloadFactory,
1594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1595
1596LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1597 armnn::IWorkloadFactory& workloadFactory,
1598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1599
1600LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1601 armnn::IWorkloadFactory& workloadFactory,
1602 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1603
1604LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1605 armnn::IWorkloadFactory& workloadFactory,
1606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1607
1608LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1609 armnn::IWorkloadFactory& workloadFactory,
1610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1611
1612LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1613 armnn::IWorkloadFactory& workloadFactory,
1614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1615
1616LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1619
1620LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1621 armnn::IWorkloadFactory& workloadFactory,
1622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1623
nikraj01120522a2019-05-31 11:33:07 +01001624LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1625 armnn::IWorkloadFactory& workloadFactory,
1626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1627
1628LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1629 armnn::IWorkloadFactory& workloadFactory,
1630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1631
1632LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1633 armnn::IWorkloadFactory& workloadFactory,
1634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1635
1636LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1639
1640LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1641 armnn::IWorkloadFactory& workloadFactory,
1642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1643
1644LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1645 armnn::IWorkloadFactory& workloadFactory,
1646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1647
1648LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1649 armnn::IWorkloadFactory& workloadFactory,
1650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1651
1652LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1653 armnn::IWorkloadFactory& workloadFactory,
1654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1655
Francis Murtagh57f13d52019-06-24 14:24:36 +01001656LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001657 armnn::IWorkloadFactory& workloadFactory,
1658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1659
Francis Murtagh57f13d52019-06-24 14:24:36 +01001660LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001661 armnn::IWorkloadFactory& workloadFactory,
1662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1663
Francis Murtagh57f13d52019-06-24 14:24:36 +01001664LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001665 armnn::IWorkloadFactory& workloadFactory,
1666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1667
Francis Murtagh57f13d52019-06-24 14:24:36 +01001668LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001669 armnn::IWorkloadFactory& workloadFactory,
1670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1671
Francis Murtagh57f13d52019-06-24 14:24:36 +01001672LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001673 armnn::IWorkloadFactory &workloadFactory,
1674 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1675
Francis Murtagh57f13d52019-06-24 14:24:36 +01001676LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001677 armnn::IWorkloadFactory &workloadFactory,
1678 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001679
Francis Murtagh57f13d52019-06-24 14:24:36 +01001680LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001681 armnn::IWorkloadFactory &workloadFactory,
1682 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001683
Francis Murtagh57f13d52019-06-24 14:24:36 +01001684LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001685 armnn::IWorkloadFactory &workloadFactory,
1686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001687
Francis Murtagh57f13d52019-06-24 14:24:36 +01001688LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001689 armnn::IWorkloadFactory &workloadFactory,
1690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001691
Francis Murtagh57f13d52019-06-24 14:24:36 +01001692LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001693 armnn::IWorkloadFactory &workloadFactory,
1694 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001695
Francis Murtagh57f13d52019-06-24 14:24:36 +01001696LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001697 armnn::IWorkloadFactory &workloadFactory,
1698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001699
Francis Murtagh57f13d52019-06-24 14:24:36 +01001700LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001701 armnn::IWorkloadFactory &workloadFactory,
1702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001703
Francis Murtagh57f13d52019-06-24 14:24:36 +01001704LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001705 armnn::IWorkloadFactory &workloadFactory,
1706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1707
Francis Murtagh57f13d52019-06-24 14:24:36 +01001708LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001709 armnn::IWorkloadFactory &workloadFactory,
1710 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001711
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001712LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1713 armnn::IWorkloadFactory& workloadFactory,
1714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001715
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001716LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1717 armnn::IWorkloadFactory& workloadFactory,
1718 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1719
1720LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1721 armnn::IWorkloadFactory& workloadFactory,
1722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1723
1724LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1725 armnn::IWorkloadFactory& workloadFactory,
1726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1727
1728LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1729 armnn::IWorkloadFactory& workloadFactory,
1730 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1731
1732LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1733 armnn::IWorkloadFactory& workloadFactory,
1734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1735
1736LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1737 armnn::IWorkloadFactory& workloadFactory,
1738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1739
1740LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1741 armnn::IWorkloadFactory& workloadFactory,
1742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1743
1744LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1745 armnn::IWorkloadFactory& workloadFactory,
1746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1747
1748LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1749 armnn::IWorkloadFactory& workloadFactory,
1750 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1751
1752LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1753 armnn::IWorkloadFactory& workloadFactory,
1754 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1755
1756LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1757 armnn::IWorkloadFactory& workloadFactory,
1758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1759
1760LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1761 armnn::IWorkloadFactory& workloadFactory,
1762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1763
1764LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1765 armnn::IWorkloadFactory& workloadFactory,
1766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1767
1768LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1769 armnn::IWorkloadFactory& workloadFactory,
1770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1771
1772LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1773 armnn::IWorkloadFactory& workloadFactory,
1774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1775
1776LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1777 armnn::IWorkloadFactory& workloadFactory,
1778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1779
1780LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1781 armnn::IWorkloadFactory& workloadFactory,
1782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001783
Matteo Martincigh42666a12019-05-29 08:53:41 +01001784LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1785 armnn::IWorkloadFactory& workloadFactory,
1786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1787
1788LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1789 armnn::IWorkloadFactory& workloadFactory,
1790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1791
1792LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1793 armnn::IWorkloadFactory& workloadFactory,
1794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1795
1796LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1797 armnn::IWorkloadFactory& workloadFactory,
1798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1799
1800LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1801 armnn::IWorkloadFactory& workloadFactory,
1802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1803
1804LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1805 armnn::IWorkloadFactory& workloadFactory,
1806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1807
1808LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1809 armnn::IWorkloadFactory& workloadFactory,
1810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1811
1812LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1813 armnn::IWorkloadFactory& workloadFactory,
1814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1815
1816LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1817 armnn::IWorkloadFactory& workloadFactory,
1818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1819
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001820LayerTestResult<float, 4> Debug4DFloat32Test(
1821 armnn::IWorkloadFactory& workloadFactory,
1822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1823
1824LayerTestResult<float, 3> Debug3DFloat32Test(
1825 armnn::IWorkloadFactory& workloadFactory,
1826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1827
1828LayerTestResult<float, 2> Debug2DFloat32Test(
1829 armnn::IWorkloadFactory& workloadFactory,
1830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1831
1832LayerTestResult<float, 1> Debug1DFloat32Test(
1833 armnn::IWorkloadFactory& workloadFactory,
1834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1835
1836LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1837 armnn::IWorkloadFactory& workloadFactory,
1838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1839
1840LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1841 armnn::IWorkloadFactory& workloadFactory,
1842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1843
1844LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1845 armnn::IWorkloadFactory& workloadFactory,
1846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1847
1848LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1849 armnn::IWorkloadFactory& workloadFactory,
1850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001851
1852LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1853 armnn::IWorkloadFactory& workloadFactory,
1854 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1855
1856LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1857 armnn::IWorkloadFactory& workloadFactory,
1858 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1859
1860LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1861 armnn::IWorkloadFactory & workloadFactory,
1862 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1863
1864LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1865 armnn::IWorkloadFactory & workloadFactory,
1866 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1867
1868LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1869 armnn::IWorkloadFactory& workloadFactory,
1870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1871
1872LayerTestResult<float, 4> Debug4DFloat32Test(
1873 armnn::IWorkloadFactory& workloadFactory,
1874 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1875
1876LayerTestResult<float, 3> Debug3DFloat32Test(
1877 armnn::IWorkloadFactory& workloadFactory,
1878 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1879
1880LayerTestResult<float, 2> Debug2DFloat32Test(
1881 armnn::IWorkloadFactory& workloadFactory,
1882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1883
1884LayerTestResult<float, 1> Debug1DFloat32Test(
1885 armnn::IWorkloadFactory& workloadFactory,
1886 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1887
1888LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1889 armnn::IWorkloadFactory& workloadFactory,
1890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1891
1892LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1893 armnn::IWorkloadFactory& workloadFactory,
1894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1895
1896LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1897 armnn::IWorkloadFactory& workloadFactory,
1898 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1899
1900LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1901 armnn::IWorkloadFactory& workloadFactory,
1902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001903
1904LayerTestResult<float, 1> Gather1DParamsFloatTest(
1905 armnn::IWorkloadFactory& workloadFactory,
1906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1907
1908LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1909 armnn::IWorkloadFactory& workloadFactory,
1910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1911
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001912LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1913 armnn::IWorkloadFactory& workloadFactory,
1914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1915
narpra014951d842019-01-18 16:53:53 +00001916LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1917 armnn::IWorkloadFactory& workloadFactory,
1918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1919
1920LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1921 armnn::IWorkloadFactory& workloadFactory,
1922 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1923
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001924LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1925 armnn::IWorkloadFactory& workloadFactory,
1926 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1927
narpra014951d842019-01-18 16:53:53 +00001928LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1929 armnn::IWorkloadFactory& workloadFactory,
1930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1931
1932LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1933 armnn::IWorkloadFactory& workloadFactory,
1934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001935
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001936LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1937 armnn::IWorkloadFactory& workloadFactory,
1938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1939
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001940LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1941 armnn::IWorkloadFactory& workloadFactory,
1942 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1943
1944LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1945 armnn::IWorkloadFactory& workloadFactory,
1946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1947
1948LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001949 armnn::IWorkloadFactory& workloadFactory,
1950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001951
Keith Davisa57eccb2019-06-14 17:33:22 +01001952LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
1953 armnn::IWorkloadFactory& workloadFactory,
1954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1955
1956LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
1957 armnn::IWorkloadFactory& workloadFactory,
1958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1959
1960LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test(
1961 armnn::IWorkloadFactory& workloadFactory,
1962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1963
1964LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test(
1965 armnn::IWorkloadFactory& workloadFactory,
1966 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1967
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001968LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
1969 armnn::IWorkloadFactory& workloadFactory,
1970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1971
1972LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
1973 armnn::IWorkloadFactory& workloadFactory,
1974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1975
1976LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
1977 armnn::IWorkloadFactory& workloadFactory,
1978 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01001979
1980template<typename T, typename B>
1981LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
1982 armnn::IWorkloadFactory& workloadFactory,
1983 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1984 armnn::TensorInfo inputTensorInfo,
1985 armnn::TensorInfo outputTensorInfo,
1986 armnn::TensorInfo weightsDesc,
1987 armnn::TensorInfo biasesDesc,
1988 boost::multi_array<T, 2>& weights,
1989 boost::multi_array<B, 1>& bias,
1990 boost::multi_array<T, 4>& input,
1991 bool biasEnabled,
1992 bool transposeWeights)
1993{
1994 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
1995 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
1996
1997 armnn::FullyConnectedQueueDescriptor data;
1998 armnn::WorkloadInfo info;
1999 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2000 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2001
2002 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2003 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2004
2005 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2006 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2007 data.m_Weight = &weightsTensor;
2008 data.m_Bias = &biasTensor;
2009 data.m_Parameters.m_BiasEnabled = biasEnabled;
2010 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2011
2012 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2013 LayerTestResult<T, 2> result(outputTensorInfo);
2014
2015 inputHandle->Allocate();
2016 outputHandle->Allocate();
2017 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2018
2019 ExecuteWorkload(*workload, memoryManager);
2020
2021 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2022
2023 return result;
2024}
2025
2026template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2027std::vector<T> ConvertToDataType(const std::vector<float>& input,
2028 const armnn::TensorInfo& inputTensorInfo)
2029{
2030 std::vector<T> output(input.size());
2031 auto outputTensorInfo = inputTensorInfo;
2032 outputTensorInfo.SetDataType(ArmnnType);
2033
2034 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2035 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2036
2037 for (auto it = input.begin(); it != input.end(); ++it)
2038 {
2039 rOutputEncoder.Set(*it);
2040 ++rOutputEncoder;
2041 }
2042 return output;
2043}
2044
David Monahan34757812019-06-19 11:47:21 +01002045// Utility method to convert a single value to the correct type
2046template <typename T>
2047T ConvertToDataType(const float& value,
2048 const armnn::TensorInfo& tensorInfo)
2049{
2050 std::vector<T> output(1);
2051 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2052 armnn::Encoder<float>& rEncoder = *pEncoder;
2053 rEncoder.Set(value);
2054 return output[0];
2055}
2056
nikraj010421e7f2019-06-14 09:40:34 +01002057template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002058LayerTestResult<T, 2> Rsqrt2dTestCommon(
2059 armnn::IWorkloadFactory& workloadFactory,
2060 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2061 const armnn::TensorInfo inputTensorInfo,
2062 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002063 const std::vector<float>& inputValues,
2064 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002065{
nikraj010421e7f2019-06-14 09:40:34 +01002066 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002067
2068 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002069
2070 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2071 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002072
2073 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2074 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2075
2076 armnn::RsqrtQueueDescriptor descriptor;
2077
2078 armnn::WorkloadInfo info;
2079
2080 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2081 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2082
2083 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2084
2085 inputHandle->Allocate();
2086 outputHandle->Allocate();
2087
2088 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2089
2090 workload->PostAllocationConfigure();
2091 workload->Execute();
2092
2093 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2094
2095 return result;
2096}
2097
2098template<armnn::DataType ArmnnType, typename T>
2099LayerTestResult<T, 2> Rsqrt2dTest(
2100 armnn::IWorkloadFactory& workloadFactory,
2101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2102{
2103 const armnn::TensorShape inputShape{ 2, 2 };
2104 const armnn::TensorShape outputShape{ 2, 2 };
2105
nikraj010421e7f2019-06-14 09:40:34 +01002106 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2107 inputTensorInfo.SetQuantizationScale(0.1f);
2108 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002109
nikraj010421e7f2019-06-14 09:40:34 +01002110 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2111 outputTensorInfo.SetQuantizationScale(0.1f);
2112 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002113
nikraj010421e7f2019-06-14 09:40:34 +01002114 std::vector<float> inputValues
2115 {
2116 1.f, 4.f,
2117 16.f, 25.f
2118 };
nikraj0193f84a92019-06-05 10:48:46 +01002119
nikraj010421e7f2019-06-14 09:40:34 +01002120 std::vector<float> expectedOutputValues
2121 {
2122 1.f, 0.5f,
2123 0.25f, 0.2f
2124 };
2125
2126 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002127 inputTensorInfo, outputTensorInfo,
2128 inputValues, expectedOutputValues);
2129}
2130
2131template<armnn::DataType ArmnnType, typename T>
2132LayerTestResult<T, 3> Rsqrt3dTest(
2133 armnn::IWorkloadFactory& workloadFactory,
2134 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2135{
2136 const armnn::TensorShape inputShape{ 3, 1, 2 };
2137 const armnn::TensorShape outputShape{ 3, 1, 2 };
2138
nikraj010421e7f2019-06-14 09:40:34 +01002139 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2140 inputTensorInfo.SetQuantizationScale(0.1f);
2141 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002142
nikraj010421e7f2019-06-14 09:40:34 +01002143 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2144 outputTensorInfo.SetQuantizationScale(0.1f);
2145 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002146
nikraj010421e7f2019-06-14 09:40:34 +01002147 std::vector<float> inputValues
2148 {
2149 1.f, 4.f, 16.f,
2150 25.f, 64.f, 100.f
2151 };
nikraj0193f84a92019-06-05 10:48:46 +01002152
nikraj010421e7f2019-06-14 09:40:34 +01002153 std::vector<float> expectedOutputValues
2154 {
2155 1.f, 0.5f, 0.25f,
2156 0.2f, 0.125f, 0.1f
2157 };
2158
2159 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002160
2161 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002162 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2163 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002164
2165 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2166 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2167
2168 armnn::RsqrtQueueDescriptor descriptor;
2169
2170 armnn::WorkloadInfo info;
2171
2172 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2173 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2174
2175 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2176
2177 inputHandle->Allocate();
2178 outputHandle->Allocate();
2179
2180 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2181
2182 workload->PostAllocationConfigure();
2183 workload->Execute();
2184
2185 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2186
2187 return result;
2188}
2189
2190template<armnn::DataType ArmnnType, typename T>
2191LayerTestResult<T, 2> RsqrtZeroTest(
2192 armnn::IWorkloadFactory& workloadFactory,
2193 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2194{
2195 const armnn::TensorShape inputShape{ 1, 2 };
2196 const armnn::TensorShape outputShape{ 1, 2 };
2197
nikraj010421e7f2019-06-14 09:40:34 +01002198 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2199 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002200
nikraj010421e7f2019-06-14 09:40:34 +01002201 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2202 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002203
nikraj010421e7f2019-06-14 09:40:34 +01002204 std::vector<float> inputValues
2205 {
2206 0.f, -0.f
2207 };
nikraj0193f84a92019-06-05 10:48:46 +01002208
nikraj010421e7f2019-06-14 09:40:34 +01002209 std::vector<float> expectedOutputValues
2210 {
2211 INFINITY, -INFINITY
2212 };
2213
2214 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002215 inputTensorInfo, outputTensorInfo,
2216 inputValues, expectedOutputValues);
2217}
2218
2219template<armnn::DataType ArmnnType, typename T>
2220LayerTestResult<T, 2> RsqrtNegativeTest(
2221 armnn::IWorkloadFactory& workloadFactory,
2222 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2223{
2224 const armnn::TensorShape inputShape{ 1, 2 };
2225 const armnn::TensorShape outputShape{ 1, 2 };
2226
nikraj010421e7f2019-06-14 09:40:34 +01002227 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2228 inputTensorInfo.SetQuantizationScale(0.1f);
2229 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002230
nikraj010421e7f2019-06-14 09:40:34 +01002231 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2232 outputTensorInfo.SetQuantizationScale(0.1f);
2233 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002234
nikraj010421e7f2019-06-14 09:40:34 +01002235 std::vector<float> inputValues
2236 {
2237 -25.f, -16.f
2238 };
nikraj0193f84a92019-06-05 10:48:46 +01002239
nikraj010421e7f2019-06-14 09:40:34 +01002240 std::vector<float> expectedOutputValues
2241 {
2242 -NAN, -NAN
2243 };
2244
2245 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002246 inputTensorInfo, outputTensorInfo,
2247 inputValues, expectedOutputValues);
2248}
2249
2250template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002251LayerTestResult<T, 4> SimpleReshapeTestImpl(
2252 armnn::IWorkloadFactory& workloadFactory,
2253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2254 armnn::TensorInfo inputTensorInfo,
2255 armnn::TensorInfo outputTensorInfo,
2256 const std::vector<T>& inputData,
2257 const std::vector<T>& outputExpectedData)
2258{
2259 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2260
2261 LayerTestResult<T, 4> ret(outputTensorInfo);
2262 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2263
2264 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2265 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2266
2267 armnn::ReshapeQueueDescriptor data;
2268 armnn::WorkloadInfo info;
2269 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2270 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2271
2272 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2273
2274 inputHandle->Allocate();
2275 outputHandle->Allocate();
2276
2277 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2278
2279 workload->Execute();
2280
2281 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2282
2283 return ret;
2284}
2285
Francis Murtagh46c09d02019-05-28 08:15:28 +01002286template<armnn::DataType ArmnnType, typename T>
2287LayerTestResult<T, 2> FullyConnectedTest(
2288 armnn::IWorkloadFactory& workloadFactory,
2289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2290 bool biasEnabled)
2291{
2292 constexpr static unsigned int inputWidth = 3u;
2293 constexpr static unsigned int inputHeight = 2u;
2294 constexpr static unsigned int inputChannels = 1u;
2295
2296 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2297
2298 constexpr static unsigned int outputChannels = 2u;
2299
2300 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2301 inputTensorInfo.SetQuantizationScale(0.1f);
2302 inputTensorInfo.SetQuantizationOffset(63);
2303
2304 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2305 outputTensorInfo.SetQuantizationScale(5.f);
2306 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2307
2308 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2309 weightsDesc.SetQuantizationScale(0.2f);
2310 weightsDesc.SetQuantizationOffset(93);
2311
2312 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2313 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2314 biasesDesc.SetQuantizationOffset(0);
2315
2316 LayerTestResult<T, 2> result(outputTensorInfo);
2317
2318 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2319 {
2320 -1.2f, 6.1f, -3.5f,
2321 18.8f, -5.5f, 2.9f
2322 },
2323 inputTensorInfo));
2324
2325 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2326 {
2327 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2328 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2329 },
2330 weightsDesc));
2331
2332 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2333
2334 result = SimpleFullyConnectedTestImpl<T>(
2335 workloadFactory,
2336 memoryManager,
2337 inputTensorInfo, outputTensorInfo,
2338 weightsDesc, biasesDesc,
2339 weights, bias, input,
2340 biasEnabled, true
2341 );
2342
2343 if (biasEnabled)
2344 {
2345 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2346 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2347 }
2348 else
2349 {
2350 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2351 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2352 }
2353
2354 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002355}
2356
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002357template<armnn::DataType ArmnnType, typename T>
2358LayerTestResult<T, 4> SimpleReshapeTest(
2359 armnn::IWorkloadFactory& workloadFactory,
2360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2361{
2362 armnn::TensorInfo inputTensorInfo;
2363 armnn::TensorInfo outputTensorInfo;
2364
2365 unsigned int inputShape[] = { 2, 2, 3, 3 };
2366 unsigned int outputShape[] = { 2, 2, 9, 1 };
2367
2368 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2369 inputTensorInfo.SetQuantizationScale(1.0f);
2370 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2371 outputTensorInfo.SetQuantizationScale(1.0f);
2372
2373 auto input = ConvertToDataType<ArmnnType>(
2374 {
2375 0.0f, 1.0f, 2.0f,
2376 3.0f, 4.0f, 5.0f,
2377 6.0f, 7.0f, 8.0f,
2378
2379 9.0f, 10.0f, 11.0f,
2380 12.0f, 13.0f, 14.0f,
2381 15.0f, 16.0f, 17.0f,
2382
2383 18.0f, 19.0f, 20.0f,
2384 21.0f, 22.0f, 23.0f,
2385 24.0f, 25.0f, 26.0f,
2386
2387 27.0f, 28.0f, 29.0f,
2388 30.0f, 31.0f, 32.0f,
2389 33.0f, 34.0f, 35.0f,
2390 },
2391 inputTensorInfo);
2392
2393 auto outputExpected = ConvertToDataType<ArmnnType>(
2394 {
2395 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2396
2397 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2398
2399 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2400
2401 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2402 },
2403 outputTensorInfo);
2404
2405 return SimpleReshapeTestImpl<T>(
2406 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002407}
James Conroy83735b12019-05-30 16:36:59 +01002408
2409template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2410LayerTestResult<T, 4> SimpleFloorTest(
2411 armnn::IWorkloadFactory& workloadFactory,
2412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2413{
James Conroyb40d7102019-06-04 12:32:09 +01002414 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2415 inputTensorInfo.SetQuantizationScale(0.1f);
2416
2417 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2418 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002419
2420 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2421 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2422 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2423 inputTensorInfo));
2424
2425 LayerTestResult<T, 4> ret(outputTensorInfo);
2426 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2427 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2428 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2429 outputTensorInfo));
2430
2431 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2432 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2433
2434 armnn::FloorQueueDescriptor data;
2435 armnn::WorkloadInfo info;
2436 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2437 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2438
2439 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2440
2441 inputHandle->Allocate();
2442 outputHandle->Allocate();
2443
2444 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2445
2446 workload->Execute();
2447
2448 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2449
2450 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002451}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002452
2453
2454template<armnn::DataType ArmnnType, typename T>
2455LayerTestResult<T, 4> ResizeBilinearNopTest(
2456 armnn::IWorkloadFactory& workloadFactory,
2457 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2458 const armnn::DataLayout dataLayout)
2459{
2460 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2461 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2462 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2463 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2464 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2465 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2466 if (armnn::IsQuantizedType<T>())
2467 {
2468 inputTensorInfo.SetQuantizationScale(1.5f);
2469 inputTensorInfo.SetQuantizationOffset(-3);
2470 outputTensorInfo.SetQuantizationScale(1.5f);
2471 outputTensorInfo.SetQuantizationOffset(-3);
2472 }
2473
2474 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2475 ? std::initializer_list<float>
2476 {
2477 1, 2, 3, 4,
2478 2, 3, 4, 5,
2479 3, 4, 5, 6,
2480 4, 5, 6, 7
2481 }
2482 : std::initializer_list<float>
2483 {
2484 1.0f, 2.0f, 3.0f, 4.0f,
2485 2.0f, 3.0f, 4.0f, 5.0f,
2486 3.0f, 4.0f, 5.0f, 6.0f,
2487 4.0f, 5.0f, 6.0f, 7.0f,
2488
2489 1.0f, 2.0f, 3.0f, 4.0f,
2490 2.0f, 3.0f, 4.0f, 5.0f,
2491 3.0f, 4.0f, 5.0f, 6.0f,
2492 4.0f, 5.0f, 6.0f, 7.0f
2493 };
2494
2495 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2496 if (dataLayout == armnn::DataLayout::NHWC)
2497 {
2498 std::vector<float> tmp(inputData.size());
2499 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2500 inputData = tmp;
2501 }
2502
2503 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2504 inputTensorInfo.GetQuantizationOffset(),
2505 inputData));
2506
2507 LayerTestResult<T, 4> result(outputTensorInfo);
2508 result.outputExpected = input;
2509
2510 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2511 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2512
2513 armnn::ResizeBilinearQueueDescriptor descriptor;
2514 descriptor.m_Parameters.m_DataLayout = dataLayout;
2515 armnn::WorkloadInfo info;
2516 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2517 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2518
2519 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2520
2521 inputHandle->Allocate();
2522 outputHandle->Allocate();
2523 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2524
2525 workload->PostAllocationConfigure();
2526 workload->Execute();
2527
2528 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2529 return result;
2530}
2531
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002532template<armnn::DataType ArmnnType, typename T>
2533LayerTestResult<T, 4> SimpleResizeBilinearTest(
2534 armnn::IWorkloadFactory& workloadFactory,
2535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2536 const armnn::DataLayout dataLayout)
2537{
2538 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2539 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2540 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2541 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2542 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2543 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2544
2545 if (armnn::IsQuantizedType<T>())
2546 {
2547 inputTensorInfo.SetQuantizationScale(0.1567f);
2548 inputTensorInfo.SetQuantizationOffset(1);
2549 outputTensorInfo.SetQuantizationScale(0.1567f);
2550 outputTensorInfo.SetQuantizationOffset(1);
2551 }
2552
2553 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2554 ? std::initializer_list<float>
2555 {
2556 1, 255,
2557 200, 250
2558 }
2559 : std::initializer_list<float>
2560 {
2561 1.0f, 255.0f,
2562 200.0f, 250.0f,
2563
2564 250.0f, 200.0f,
2565 250.0f, 1.0f
2566 };
2567
2568 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2569 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2570 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2571 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2572 // which we would expect if projecting the centre).
2573
2574 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2575 ? std::initializer_list<float>
2576 {
2577 1
2578 }
2579 : std::initializer_list<float>
2580 {
2581 1.0f,
2582
2583 250.0f
2584 };
2585
2586 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2587 if (dataLayout == armnn::DataLayout::NHWC)
2588 {
2589 std::vector<float> tmp(inputData.size());
2590 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2591 inputData = tmp;
2592
2593 std::vector<float> tmp1(outputData.size());
2594 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2595 outputData = tmp1;
2596 }
2597
2598 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2599 inputTensorInfo.GetQuantizationOffset(),
2600 inputData));
2601
2602 LayerTestResult<T, 4> result(outputTensorInfo);
2603 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2604 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2605 outputTensorInfo.GetQuantizationOffset(),
2606 outputData));
2607
2608 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2609 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2610
2611 armnn::ResizeBilinearQueueDescriptor descriptor;
2612 descriptor.m_Parameters.m_DataLayout = dataLayout;
2613 armnn::WorkloadInfo info;
2614 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2615 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2616
2617 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2618
2619 inputHandle->Allocate();
2620 outputHandle->Allocate();
2621 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2622
2623 workload->PostAllocationConfigure();
2624 workload->Execute();
2625
2626 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2627 return result;
2628}
2629
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002630template<armnn::DataType ArmnnType, typename T>
2631LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2632 armnn::IWorkloadFactory& workloadFactory,
2633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2634 const armnn::DataLayout dataLayout)
2635{
2636 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2637 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2638 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2639 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2640 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2641 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2642
2643 if (armnn::IsQuantizedType<T>())
2644 {
2645 inputTensorInfo.SetQuantizationScale(3.141592f);
2646 inputTensorInfo.SetQuantizationOffset(3);
2647 outputTensorInfo.SetQuantizationScale(3.141592f);
2648 outputTensorInfo.SetQuantizationOffset(3);
2649 }
2650
2651 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2652 ? std::initializer_list<float>
2653 {
2654 1, 2, 3, 4,
2655 2, 3, 4, 5,
2656 3, 4, 5, 6,
2657 4, 5, 6, 7
2658 }
2659 : std::initializer_list<float>
2660 {
2661 1.0f, 2.0f, 3.0f, 4.0f,
2662 2.0f, 3.0f, 4.0f, 5.0f,
2663 3.0f, 4.0f, 5.0f, 6.0f,
2664 4.0f, 5.0f, 6.0f, 7.0f,
2665
2666 7.0f, 6.0f, 5.0f, 4.0f,
2667 6.0f, 5.0f, 4.0f, 3.0f,
2668 5.0f, 4.0f, 3.0f, 2.0f,
2669 4.0f, 3.0f, 2.0f, 1.0f
2670 };
2671
2672 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2673 ? std::initializer_list<float>
2674 {
2675 1, 3,
2676 3, 5
2677 }
2678 : std::initializer_list<float>
2679 {
2680 1.0f, 3.0f,
2681 3.0f, 5.0f,
2682
2683 7.0f, 5.0f,
2684 5.0f, 3.0f
2685 };
2686
2687 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2688 if (dataLayout == armnn::DataLayout::NHWC)
2689 {
2690 std::vector<float> tmp(inputData.size());
2691 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2692 inputData = tmp;
2693
2694 std::vector<float> tmp1(outputData.size());
2695 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2696 outputData = tmp1;
2697 }
2698
2699 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2700 inputTensorInfo.GetQuantizationOffset(),
2701 inputData));
2702
2703 LayerTestResult<T, 4> result(outputTensorInfo);
2704 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2705 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2706 outputTensorInfo.GetQuantizationOffset(),
2707 outputData));
2708
2709 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2710 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2711
2712 armnn::ResizeBilinearQueueDescriptor descriptor;
2713 descriptor.m_Parameters.m_DataLayout = dataLayout;
2714 armnn::WorkloadInfo info;
2715 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2716 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2717
2718 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2719
2720 inputHandle->Allocate();
2721 outputHandle->Allocate();
2722 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2723
2724 workload->PostAllocationConfigure();
2725 workload->Execute();
2726
2727 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2728 return result;
2729}
2730
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002731template<armnn::DataType ArmnnType, typename T>
2732LayerTestResult<T, 4> ResizeBilinearMinTest(
2733 armnn::IWorkloadFactory& workloadFactory,
2734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2735 const armnn::DataLayout dataLayout)
2736{
2737 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2738 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2739 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2740 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2741 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2742 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2743
2744 if (armnn::IsQuantizedType<T>())
2745 {
2746 inputTensorInfo.SetQuantizationScale(1.5f);
2747 inputTensorInfo.SetQuantizationOffset(-1);
2748 outputTensorInfo.SetQuantizationScale(1.5f);
2749 outputTensorInfo.SetQuantizationOffset(-1);
2750 }
2751
2752 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2753 ? std::initializer_list<float>
2754 {
2755 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2756 9.0f, 13.5f, 21.0f // 5, 8, 13
2757 }
2758 : std::initializer_list<float>
2759 {
2760 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2761 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2762 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2763
2764 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2765 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2766 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2767 };
2768
2769 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2770 ? std::initializer_list<float>
2771 {
2772 3.0f, 5.25f // 1, 3
2773 }
2774 : std::initializer_list<float>
2775 {
2776 1.0f, 2.6666f, 6.00f,
2777 78.5f, 179.3333f, 401.00f,
2778
2779 987.0f, 454.6670f, 203.33f,
2780 48.5f, 22.3333f, 10.00f
2781 };
2782
2783 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2784 if (dataLayout == armnn::DataLayout::NHWC)
2785 {
2786 std::vector<float> tmp(inputData.size());
2787 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2788 inputData = tmp;
2789
2790 std::vector<float> tmp1(outputData.size());
2791 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2792 outputData = tmp1;
2793 }
2794
2795 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2796 inputTensorInfo.GetQuantizationOffset(),
2797 inputData));
2798
2799 LayerTestResult<T, 4> result(outputTensorInfo);
2800 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2801 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2802 outputTensorInfo.GetQuantizationOffset(),
2803 outputData));
2804
2805 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2806 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2807
2808 armnn::ResizeBilinearQueueDescriptor descriptor;
2809 descriptor.m_Parameters.m_DataLayout = dataLayout;
2810 armnn::WorkloadInfo info;
2811 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2812 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2813
2814 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2815
2816 inputHandle->Allocate();
2817 outputHandle->Allocate();
2818 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2819
2820 workload->PostAllocationConfigure();
2821 workload->Execute();
2822
2823 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2824 return result;
2825}
2826
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002827template<armnn::DataType ArmnnType, typename T>
2828LayerTestResult<T, 4> ResizeBilinearMagTest(
2829 armnn::IWorkloadFactory& workloadFactory,
2830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2831 const armnn::DataLayout dataLayout)
2832{
2833 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2834 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2835 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2836 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2837 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2838 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2839
2840 if (armnn::IsQuantizedType<T>())
2841 {
2842 inputTensorInfo.SetQuantizationScale(0.010765f);
2843 inputTensorInfo.SetQuantizationOffset(7);
2844 outputTensorInfo.SetQuantizationScale(0.010132f);
2845 outputTensorInfo.SetQuantizationOffset(-18);
2846 }
2847
2848 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2849 ? std::initializer_list<float>
2850 {
2851 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2852 1.05497f, 1.302565f, // 105, 128,
2853 2.400595f, 0.68896f // 230, 71
2854 }
2855 : std::initializer_list<float>
2856 {
2857 1.0f, 2.0f,
2858 13.0f, 21.0f,
2859 144.0f, 233.0f,
2860
2861 233.0f, 144.0f,
2862 21.0f, 13.0f,
2863 2.0f, 1.0f
2864 };
2865 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2866 ? std::initializer_list<float>
2867 {
2868 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2869 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2870 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2871 // 0, 87, 173, 217, 217, : Expected quantised values
2872 // 86, 96, 106, 111, 111,
2873 // 219, 151, 84, 50, 50
2874 }
2875 : std::initializer_list<float>
2876 {
2877 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2878 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2879 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2880
2881 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2882 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2883 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2884 };
2885
2886 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2887 if (dataLayout == armnn::DataLayout::NHWC)
2888 {
2889 std::vector<float> tmp(inputData.size());
2890 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2891 inputData = tmp;
2892
2893 std::vector<float> tmp1(outputData.size());
2894 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2895 outputData = tmp1;
2896 }
2897
2898 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2899 inputTensorInfo.GetQuantizationOffset(),
2900 inputData));
2901
2902 LayerTestResult<T, 4> result(outputTensorInfo);
2903 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2904 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2905 outputTensorInfo.GetQuantizationOffset(),
2906 outputData));
2907
2908 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2909 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2910
2911 armnn::ResizeBilinearQueueDescriptor descriptor;
2912 descriptor.m_Parameters.m_DataLayout = dataLayout;
2913 armnn::WorkloadInfo info;
2914 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2915 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2916
2917 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2918
2919 inputHandle->Allocate();
2920 outputHandle->Allocate();
2921 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2922
2923 workload->PostAllocationConfigure();
2924 workload->Execute();
2925
2926 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2927 return result;
2928}
2929
James Conroy4d1ff582019-06-10 17:06:39 +01002930template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
2931LayerTestResult<T, OutputDim> MeanTestHelper(
2932 armnn::IWorkloadFactory& workloadFactory,
2933 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2934 const unsigned int* inputShape,
2935 const std::vector<float>& inputData,
2936 const std::vector<unsigned int>& axis,
2937 bool keepDims,
2938 const unsigned int* outputShape,
2939 const std::vector<float>& outputData,
2940 float scale = 1.0f,
2941 int32_t offset = 0)
2942{
2943 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
2944 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
2945
2946 inputTensorInfo.SetQuantizationScale(scale);
2947 inputTensorInfo.SetQuantizationOffset(offset);
2948
2949 outputTensorInfo.SetQuantizationScale(scale);
2950 outputTensorInfo.SetQuantizationOffset(offset);
2951
2952 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
2953
2954 LayerTestResult<T, OutputDim> result(outputTensorInfo);
2955 result.outputExpected = MakeTensor<T, OutputDim>(
2956 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
2957
2958 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2959 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2960
2961 armnn::MeanQueueDescriptor data;
2962 data.m_Parameters.m_Axis = axis;
2963 data.m_Parameters.m_KeepDims = keepDims;
2964 armnn::WorkloadInfo info;
2965 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2966 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2967
2968 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
2969
2970 inputHandle->Allocate();
2971 outputHandle->Allocate();
2972
2973 CopyDataToITensorHandle(inputHandle.get(), input.origin());
2974
2975 workload->PostAllocationConfigure();
2976 workload->Execute();
2977
2978 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
2979
2980 return result;
2981}
2982
2983template<armnn::DataType ArmnnType, typename T>
2984LayerTestResult<T, 1> MeanSimpleTest(
2985 armnn::IWorkloadFactory& workloadFactory,
2986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2987{
2988 const unsigned int inputShape[] = { 3, 2 };
2989 const unsigned int outputShape[] = { 1 };
2990
2991 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
2992 std::vector<float> output({ 2.5f });
2993
2994 return MeanTestHelper<ArmnnType, T, 2, 1>(
2995 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
2996}
2997
2998template<armnn::DataType ArmnnType, typename T>
2999LayerTestResult<T, 3> MeanSimpleAxisTest(
3000 armnn::IWorkloadFactory& workloadFactory,
3001 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3002{
3003 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3004 const unsigned int outputShape[] = { 3, 1, 2 };
3005
3006 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 });
3007 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3008
3009 return MeanTestHelper<ArmnnType, T, 4, 3>(
3010 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3011}
3012
3013template<armnn::DataType ArmnnType, typename T>
3014LayerTestResult<T, 4> MeanKeepDimsTest(
3015 armnn::IWorkloadFactory& workloadFactory,
3016 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3017{
3018 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3019 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3020
3021 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3022 std::vector<float> output({ 2.5f, 2.5f });
3023
3024 return MeanTestHelper<ArmnnType, T, 4, 4>(
3025 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3026}
3027
3028template<armnn::DataType ArmnnType, typename T>
3029LayerTestResult<T, 4> MeanMultipleDimsTest(
3030 armnn::IWorkloadFactory& workloadFactory,
3031 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3032{
3033 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3034 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3035
3036 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 });
3037 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3038
3039 return MeanTestHelper<ArmnnType, T, 4, 4>(
3040 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3041}
3042
3043template<armnn::DataType ArmnnType, typename T>
3044LayerTestResult<T, 1> MeanVts1Test(
3045 armnn::IWorkloadFactory& workloadFactory,
3046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3047{
3048 const unsigned int inputShape[] = { 4, 3, 2 };
3049 const unsigned int outputShape[] = { 2 };
3050
3051 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,
3052 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3053 std::vector<float> output({ 12.0f, 13.0f });
3054
3055 return MeanTestHelper<ArmnnType, T, 3, 1>(
3056 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3057}
3058
3059template<armnn::DataType ArmnnType, typename T>
3060LayerTestResult<T, 3> MeanVts2Test(
3061 armnn::IWorkloadFactory& workloadFactory,
3062 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3063{
3064 const unsigned int inputShape[] = { 4, 3, 2 };
3065 const unsigned int outputShape[] = { 1, 3, 1 };
3066
3067 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,
3068 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3069 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3070
3071 return MeanTestHelper<ArmnnType, T, 3, 3>(
3072 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3073}
3074
3075template<armnn::DataType ArmnnType, typename T>
3076LayerTestResult<T, 3> MeanVts3Test(
3077 armnn::IWorkloadFactory& workloadFactory,
3078 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3079{
3080 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3081 const unsigned int outputShape[] = { 1, 2, 1 };
3082
3083 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3084 std::vector<float> output({ 1.5f, 3.5f });
3085
3086 return MeanTestHelper<ArmnnType, T, 4, 3>(
3087 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3088}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003089
3090template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3091LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3092 armnn::IWorkloadFactory& workloadFactory,
3093 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3094 bool useSubtensor)
3095{
3096 // Defines the tensor descriptors.
3097 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3098 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3099 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3100
3101 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3102
3103 // Quantized input1 tensor.
3104 const float inputScale1 = 0.5f;
3105 const int32_t inputOffset1 = 5;
3106
3107 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3108 {
3109 1, 2, 3,
3110 4, 5, 6,
3111 7, 8, 9,
3112 10, 11, 12,
3113 13, 14, 15,
3114 16, 17, 18,
3115
3116 19, 20, 21,
3117 22, 23, 24,
3118 25, 26, 27,
3119 28, 29, 30,
3120 31, 32, 33,
3121 34, 35, 36
3122 }));
3123
3124 // Quatized input2 tensor.
3125 const float inputScale2 = 0.2f;
3126 const int32_t inputOffset2 = 10;
3127
3128 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3129 {
3130 37, 38, 39,
3131 40, 41, 42,
3132 43, 44, 45,
3133 46, 47, 48,
3134 49, 50, 51,
3135 52, 53, 54
3136 }));
3137
3138 // Quantized output tensor.
3139 const float outputScale = 0.1f;
3140 const int32_t outputOffset = 20;
3141
3142 LayerTestResult<T, 3> ret(outputTensorInfo);
3143
3144 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3145 {
3146 0, 5, 74,
3147 10, 15, 76,
3148 20, 25, 78,
3149 30, 35, 80,
3150 40, 45, 82,
3151 50, 55, 84,
3152
3153 60, 65, 86,
3154 70, 75, 88,
3155 80, 85, 90,
3156 90, 95, 92,
3157 100, 105, 94,
3158 110, 115, 96,
3159
3160 120, 125, 98,
3161 130, 135, 100,
3162 140, 145, 102,
3163 150, 155, 104,
3164 160, 165, 106,
3165 170, 175, 108
3166 }));
3167
3168 outputTensorInfo.SetQuantizationScale(outputScale);
3169 outputTensorInfo.SetQuantizationOffset(outputOffset);
3170 inputTensorInfo1.SetQuantizationScale(inputScale1);
3171 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3172 inputTensorInfo2.SetQuantizationScale(inputScale2);
3173 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3174
3175 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3176 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3177
3178 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3179 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3180
3181 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3182
3183 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3184
3185 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3186 subTensorsSupported ?
3187 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3188 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3189
3190 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3191 subTensorsSupported ?
3192 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3193 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3194
3195 armnn::ConcatQueueDescriptor data;
3196 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3197 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3198 data.m_Parameters = desc;
3199
3200 armnn::WorkloadInfo info;
3201 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3202 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3203 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3204
3205 data.m_ViewOrigins.push_back(window1);
3206 data.m_ViewOrigins.push_back(window2);
3207
3208 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3209
3210 inputHandle1->Allocate();
3211 inputHandle2->Allocate();
3212 outputHandle->Allocate();
3213
3214 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3215 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3216
3217 workload->PostAllocationConfigure();
3218 workload->Execute();
3219
3220 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3221
3222 return ret;
3223}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003224
3225template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3226LayerTestResult<T, 4> PreluTest(
3227 armnn::IWorkloadFactory& workloadFactory,
3228 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3229{
3230 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3231 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3232 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3233
3234 if (armnn::IsQuantizedType<T>())
3235 {
3236 inputTensorInfo.SetQuantizationScale(0.25f);
3237 inputTensorInfo.SetQuantizationOffset(128);
3238 alphaTensorInfo.SetQuantizationScale(0.25f);
3239 alphaTensorInfo.SetQuantizationOffset(50);
3240 outputTensorInfo.SetQuantizationScale(0.5f);
3241 outputTensorInfo.SetQuantizationOffset(120);
3242 }
3243
3244 std::vector<float> inputData
3245 {
3246 // Expected quantized values:
3247 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3248 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3249 };
3250 std::vector<float> alphaData
3251 {
3252 // Expected quantized values:
3253 // 50, 54, 58
3254 0.0f, 1.0f, 2.0f
3255 };
3256 std::vector<float> outputExpectedData =
3257 {
3258 // Expected quantized values:
3259 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3260 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3261 };
3262
3263 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3264 inputTensorInfo.GetQuantizationOffset(),
3265 inputData));
3266 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3267 alphaTensorInfo.GetQuantizationOffset(),
3268 alphaData));
3269
3270 LayerTestResult<T, 4> result(outputTensorInfo);
3271 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3272 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3273 outputTensorInfo.GetQuantizationOffset(),
3274 outputExpectedData));
3275
3276 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3277 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3278 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3279
3280 armnn::PreluQueueDescriptor descriptor;
3281 armnn::WorkloadInfo info;
3282 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3283 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3284 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3285
3286 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3287
3288 inputHandle->Allocate();
3289 alphaHandle->Allocate();
3290 outputHandle->Allocate();
3291
3292 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3293 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3294
3295 workload->Execute();
3296
3297 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3298
3299 return result;
3300}
3301
Francis Murtagh57f13d52019-06-24 14:24:36 +01003302template<armnn::DataType ArmnnType,
3303 std::size_t InputDim,
3304 std::size_t OutputDim,
3305 typename T = armnn::ResolveType<ArmnnType>>
3306LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3307 armnn::IWorkloadFactory &workloadFactory,
3308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3309 const armnn::DataLayout& dataLayout,
3310 const unsigned int *inputShape,
3311 const std::vector<float> &inputData,
3312 const std::vector<unsigned int> &blockShape,
3313 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3314 const unsigned int *outputShape,
3315 const std::vector<float> &outputData,
3316 float scale = 1.0f,
3317 int32_t offset = 0)
3318{
3319 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3320 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3321
3322 inputTensorInfo.SetQuantizationScale(scale);
3323 inputTensorInfo.SetQuantizationOffset(offset);
3324
3325 outputTensorInfo.SetQuantizationScale(scale);
3326 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01003327
Francis Murtagh57f13d52019-06-24 14:24:36 +01003328 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3329
3330 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3331 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3332 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3333
3334 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3335 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3336
3337 armnn::BatchToSpaceNdQueueDescriptor data;
3338 data.m_Parameters.m_DataLayout = dataLayout;
3339 data.m_Parameters.m_BlockShape = blockShape;
3340 data.m_Parameters.m_Crops = crops;
3341 armnn::WorkloadInfo info;
3342 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3343 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3344
3345 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3346
3347 inputHandle->Allocate();
3348 outputHandle->Allocate();
3349
3350 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3351
3352 workload->PostAllocationConfigure();
3353 workload->Execute();
3354
3355 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3356
3357 return result;
3358}
3359
3360template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3361LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3362 armnn::IWorkloadFactory& workloadFactory,
3363 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3364{
3365 const unsigned int inputShape[] = {4, 2, 2, 1};
3366 const unsigned int outputShape[] = {1, 4, 4, 1};
3367
3368 std::vector<float> input({
3369 // Batch 0, Height 0, Width (2) x Channel (1)
3370 1.0f, 3.0f,
3371 // Batch 0, Height 1, Width (2) x Channel (1)
3372 9.0f, 11.0f,
3373
3374
3375 // Batch 1, Height 0, Width (2) x Channel (1)
3376 2.0f, 4.0f,
3377 // Batch 1, Height 1, Width (2) x Channel (1)
3378 10.0f, 12.0f,
3379
3380
3381 // Batch 2, Height 0, Width (2) x Channel (1)
3382 5.0f, 7.0f,
3383 // Batch 2, Height 1, Width (2) x Channel (1)
3384 13.0f, 15.0f,
3385
3386 // Batch 3, Height 0, Width (2) x Channel (3)
3387 6.0f, 8.0f,
3388 // Batch 3, Height 1, Width (2) x Channel (1)
3389 14.0f, 16.0f
3390 });
3391
3392 std::vector<float> expectedOutput({
3393 1.0f, 2.0f, 3.0f, 4.0f,
3394 5.0f, 6.0f, 7.0f, 8.0f,
3395 9.0f, 10.0f, 11.0f, 12.0f,
3396 13.0f, 14.0f, 15.0f, 16.0f
3397 });
3398
3399 std::vector<unsigned int> blockShape {2, 2};
3400 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3401
3402 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3403 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3404 crops, outputShape, expectedOutput);
3405}
3406
3407template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3408LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3409 armnn::IWorkloadFactory& workloadFactory,
3410 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3411{
3412 const unsigned int inputShape[] = {4, 1, 1, 1};
3413 const unsigned int outputShape[] = {1, 2, 2, 1};
3414
3415 std::vector<float> input({
3416 // Batch 0, Height 0, Width (2) x Channel (1)
3417 1.0f, 2.0f, 3.0f, 4.0f
3418 });
3419
3420 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3421
3422 std::vector<unsigned int> blockShape({2, 2});
3423 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3424
3425 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3426 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3427 crops, outputShape, expectedOutput);
3428}
3429
3430template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3431LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
3432 armnn::IWorkloadFactory& workloadFactory,
3433 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3434{
3435 const unsigned int inputShape[] = {4, 1, 1, 3};
3436 const unsigned int outputShape[] = {1, 2, 2, 3};
3437
3438 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});
3439
3440 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
3441
3442 std::vector<unsigned int> blockShape({2, 2});
3443 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3444
3445 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3446 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3447 crops, outputShape, expectedOutput);
3448}
3449
3450template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3451LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
3452 armnn::IWorkloadFactory& workloadFactory,
3453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3454{
3455 const unsigned int inputShape[] = {8, 1, 3, 1};
3456 const unsigned int outputShape[] = {2, 2, 4, 1};
3457
3458 std::vector<float> input({
3459 0.0f, 1.0f, 3.0f,
3460 0.0f, 9.0f, 11.0f,
3461 0.0f, 2.0f, 4.0f,
3462 0.0f, 10.0f, 12.0f,
3463 0.0f, 5.0f, 7.0f,
3464 0.0f, 13.0f, 15.0f,
3465 0.0f, 6.0f, 8.0f,
3466 0.0f, 14.0f, 16.0f
3467 });
3468
3469 std::vector<float> expectedOutput({
3470 1.0f, 2.0f, 3.0f, 4.0f,
3471 5.0f, 6.0f, 7.0f, 8.0f,
3472 9.0f, 10.0f, 11.0f, 12.0f,
3473 13.0f, 14.0f, 15.0f, 16.0f
3474 });
3475
3476 std::vector<unsigned int> blockShape({2, 2});
3477 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
3478
3479 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3480 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3481 crops, outputShape, expectedOutput);
3482}
3483
3484template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3485LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
3486 armnn::IWorkloadFactory& workloadFactory,
3487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3488{
3489 const unsigned int inputShape[] = {4, 2, 2, 1};
3490 const unsigned int outputShape[] = {1, 4, 4, 1};
3491
3492 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
3493 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
3494
3495 std::vector<unsigned int> blockShape({2, 2});
3496 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3497
3498 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
3499 input, blockShape, crops, outputShape, expectedOutput);
3500}
3501
3502template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3503LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
3504 armnn::IWorkloadFactory& workloadFactory,
3505 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3506{
3507 const unsigned int inputShape[] = {4, 1, 1, 1};
3508 const unsigned int outputShape[] = {1, 2, 2, 1};
3509
3510 std::vector<float> input({
3511 // Batch 0, Height 0, Width (2) x Channel (1)
3512 1, 2, 3, 4
3513 });
3514
3515 std::vector<float> expectedOutput({1, 2, 3, 4});
3516
3517 std::vector<unsigned int> blockShape({2, 2});
3518 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3519
3520 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3521 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3522 crops, outputShape, expectedOutput);
3523}
3524
3525template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3526LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
3527 armnn::IWorkloadFactory& workloadFactory,
3528 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3529{
3530 const unsigned int inputShape[] = {4, 1, 1, 3};
3531 const unsigned int outputShape[] = {1, 2, 2, 3};
3532
3533 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
3534
3535 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
3536
3537 std::vector<unsigned int> blockShape({2, 2});
3538 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3539
3540 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3541 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3542 crops, outputShape, expectedOutput);
3543}
3544
3545template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3546LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
3547 armnn::IWorkloadFactory &workloadFactory,
3548 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3549{
3550 const unsigned int inputShape[] = {4, 3, 1, 1};
3551 const unsigned int outputShape[] = {1, 3, 2, 2};
3552
3553 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});
3554
3555 std::vector<float> expectedOutput({
3556 // Batch 0, Channel 0, Height (2) x Width (2)
3557 1.0f, 4.0f,
3558 7.0f, 10.0f,
3559
3560 // Batch 0, Channel 1, Height (2) x Width (2)
3561 2.0f, 5.0f,
3562 8.0f, 11.0f,
3563
3564 // Batch 0, Channel 2, Height (2) x Width (2)
3565 3.0f, 6.0f,
3566 9.0f, 12.0f,
3567 });
3568
3569 std::vector<unsigned int> blockShape({2, 2});
3570 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3571
3572 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3573 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3574 crops, outputShape, expectedOutput);
3575}
3576
3577template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3578LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
3579 armnn::IWorkloadFactory& workloadFactory,
3580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3581{
3582 const unsigned int inputShape[] = {4, 1, 1, 1};
3583 const unsigned int outputShape[] = {1, 1, 2, 2};
3584
3585 std::vector<float> input({
3586 // Batch 0, Height 0, Width (2) x Channel (1)
3587 1.0f, 2.0f, 3.0f, 4.0f
3588 });
3589
3590 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3591
3592 std::vector<unsigned int> blockShape({2, 2});
3593 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3594
3595 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3596 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3597 crops, outputShape, expectedOutput);
3598}
3599
3600template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3601LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
3602 armnn::IWorkloadFactory& workloadFactory,
3603 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3604{
3605 const unsigned int inputShape[] = {4, 3, 1, 1};
3606 const unsigned int outputShape[] = {1, 3, 2, 2};
3607
3608 std::vector<float> input({1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f});
3609
3610 std::vector<float> expectedOutput({
3611 // Batch 0, Channel 0, Height (2) x Width (2)
3612 1.0f, 7.0f,
3613 2.0f, 8.0f,
3614
3615 // Batch 0, Channel 1, Height (2) x Width (2)
3616 3.0f, 9.0f,
3617 4.0f, 10.0f,
3618
3619 // Batch 0, Channel 2, Height (2) x Width (2)
3620 5.0f, 11.0f,
3621 6.0f, 12.0f,
3622 });
3623
3624 std::vector<unsigned int> blockShape({2, 2});
3625 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3626
3627 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3628 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3629 crops, outputShape, expectedOutput);
3630}
3631
3632template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3633LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
3634 armnn::IWorkloadFactory &workloadFactory,
3635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3636{
3637 const unsigned int inputShape[] = {4, 3, 1, 1};
3638 const unsigned int outputShape[] = {1, 3, 2, 2};
3639
3640 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
3641
3642 std::vector<float> expectedOutput({
3643 // Batch 0, Channel 0, Height (2) x Width (2)
3644 1, 4,
3645 7, 10,
3646
3647 // Batch 0, Channel 1, Height (2) x Width (2)
3648 2, 5,
3649 8, 11,
3650
3651 // Batch 0, Channel 2, Height (2) x Width (2)
3652 3, 6,
3653 9, 12,
3654 });
3655
3656 std::vector<unsigned int> blockShape({2, 2});
3657 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3658
3659 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3660 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3661 crops, outputShape, expectedOutput);
3662}
3663
3664template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3665LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
3666 armnn::IWorkloadFactory& workloadFactory,
3667 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3668{
3669 const unsigned int inputShape[] = {4, 1, 1, 1};
3670 const unsigned int outputShape[] = {1, 1, 2, 2};
3671
3672 std::vector<float> input({
3673 // Batch 0, Height 0, Width (2) x Channel (1)
3674 1, 2, 3, 4
3675 });
3676
3677 std::vector<float> expectedOutput({1, 2, 3, 4});
3678
3679 std::vector<unsigned int> blockShape({2, 2});
3680 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3681
3682 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3683 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3684 crops, outputShape, expectedOutput);
3685}
3686
3687template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3688LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
3689 armnn::IWorkloadFactory& workloadFactory,
3690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3691{
3692 const unsigned int inputShape[] = {4, 3, 1, 1};
3693 const unsigned int outputShape[] = {1, 3, 2, 2};
3694
3695 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
3696
3697 std::vector<float> expectedOutput({
3698 // Batch 0, Channel 0, Height (2) x Width (2)
3699 1, 7,
3700 2, 8,
3701
3702 // Batch 0, Channel 1, Height (2) x Width (2)
3703 3, 9,
3704 4, 10,
3705
3706 // Batch 0, Channel 2, Height (2) x Width (2)
3707 5, 11,
3708 6, 12,
3709 });
3710
3711 std::vector<unsigned int> blockShape({2, 2});
3712 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3713
3714 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3715 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3716 crops, outputShape, expectedOutput);
3717}
3718
3719template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3720LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
3721 armnn::IWorkloadFactory& workloadFactory,
3722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3723{
3724 const unsigned int inputShape[] = {8, 1, 1, 3};
3725 const unsigned int outputShape[] = {2, 1, 2, 4};
3726
3727 std::vector<float> input({
3728 0, 1, 3, 0, 9, 11,
3729 0, 2, 4, 0, 10, 12,
3730 0, 5, 7, 0, 13, 15,
3731 0, 6, 8, 0, 14, 16
3732 });
3733
3734 std::vector<float> expectedOutput({
3735 1, 2, 3, 4,
3736 5, 6, 7, 8,
3737 9, 10, 11, 12,
3738 13, 14, 15, 16
3739 });
3740
3741 std::vector<unsigned int> blockShape({2, 2});
3742 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
3743
3744 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3745 armnn::DataLayout::NCHW, inputShape, input, blockShape,
3746 crops, outputShape, expectedOutput);
3747}
3748
Matteo Martincighab9e5252019-06-13 17:27:46 +01003749template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
3750PreluTest<armnn::DataType::Float32>(
3751 armnn::IWorkloadFactory& workloadFactory,
3752 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
3753
3754template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
3755PreluTest<armnn::DataType::QuantisedAsymm8>(
3756 armnn::IWorkloadFactory& workloadFactory,
3757 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
3758
3759template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
3760PreluTest<armnn::DataType::QuantisedSymm16>(
3761 armnn::IWorkloadFactory& workloadFactory,
3762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);