blob: 25ccfa09f0e0aebc8944df07d598db88ad30c1c3 [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
1385LayerTestResult<uint8_t, 3> PadUint83dTest(
1386 armnn::IWorkloadFactory& workloadFactory,
1387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1388
1389LayerTestResult<uint8_t, 4> PadUint84dTest(
1390 armnn::IWorkloadFactory& workloadFactory,
1391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1392
1393LayerTestResult<float, 2> PadFloat322dTest(
1394 armnn::IWorkloadFactory& workloadFactory,
1395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1396
1397LayerTestResult<float, 3> PadFloat323dTest(
1398 armnn::IWorkloadFactory& workloadFactory,
1399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1400
1401LayerTestResult<float, 4> PadFloat324dTest(
1402 armnn::IWorkloadFactory& workloadFactory,
1403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1404
1405LayerTestResult<float, 4> PermuteFloat32ValueSet1Test(
1406 armnn::IWorkloadFactory& workloadFactory,
1407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1408
1409LayerTestResult<float, 4> PermuteFloat32ValueSet2Test(
1410 armnn::IWorkloadFactory& workloadFactory,
1411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1412
1413LayerTestResult<float, 4> PermuteFloat32ValueSet3Test(
1414 armnn::IWorkloadFactory& workloadFactory,
1415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1416
1417LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1418 armnn::IWorkloadFactory& workloadFactory,
1419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1420
1421LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1422 armnn::IWorkloadFactory& workloadFactory,
1423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424
1425LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1426 armnn::IWorkloadFactory& workloadFactory,
1427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428
Conor Kennedyb9971c92019-05-07 07:14:23 +01001429LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1430 armnn::IWorkloadFactory& workloadFactory,
1431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432
1433LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1434 armnn::IWorkloadFactory& workloadFactory,
1435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436
1437LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1438 armnn::IWorkloadFactory& workloadFactory,
1439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440
1441LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1442 armnn::IWorkloadFactory& workloadFactory,
1443 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1444
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001445LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1446 armnn::IWorkloadFactory& workloadFactory,
1447 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1448
1449LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1450 armnn::IWorkloadFactory& workloadFactory,
1451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1452
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001453LayerTestResult<float, 4> MaximumSimpleTest(
1454 armnn::IWorkloadFactory& workloadFactory,
1455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1456
1457LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1458 armnn::IWorkloadFactory& workloadFactory,
1459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1460
1461LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1462 armnn::IWorkloadFactory& workloadFactory,
1463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1464
1465LayerTestResult<uint8_t , 4> MaximumUint8Test(
1466 armnn::IWorkloadFactory& workloadFactory,
1467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1468
1469LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1470 armnn::IWorkloadFactory& workloadFactory,
1471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1472
1473LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1474 armnn::IWorkloadFactory& workloadFactory,
1475 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1476
Sadik Armagan2999a022019-04-09 14:20:12 +01001477LayerTestResult<int16_t , 4> MaximumInt16Test(
1478 armnn::IWorkloadFactory& workloadFactory,
1479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1480
1481LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
1485LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
James Conroy4d1ff582019-06-10 17:06:39 +01001489template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1490LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001491 armnn::IWorkloadFactory& workloadFactory,
1492 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1493
James Conroy4d1ff582019-06-10 17:06:39 +01001494template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1495LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001496 armnn::IWorkloadFactory& workloadFactory,
1497 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1498
James Conroy4d1ff582019-06-10 17:06:39 +01001499template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1500LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001501 armnn::IWorkloadFactory& workloadFactory,
1502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1503
James Conroy4d1ff582019-06-10 17:06:39 +01001504template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1505LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001506 armnn::IWorkloadFactory& workloadFactory,
1507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1508
James Conroy4d1ff582019-06-10 17:06:39 +01001509template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1510LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001511 armnn::IWorkloadFactory& workloadFactory,
1512 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1513
James Conroy4d1ff582019-06-10 17:06:39 +01001514template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1515LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001516 armnn::IWorkloadFactory& workloadFactory,
1517 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1518
James Conroy4d1ff582019-06-10 17:06:39 +01001519template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1520LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001521 armnn::IWorkloadFactory& workloadFactory,
1522 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1523
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001524LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1525 armnn::IWorkloadFactory& workloadFactory,
1526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1527
1528LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1529 armnn::IWorkloadFactory& workloadFactory,
1530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1531
1532LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1533 armnn::IWorkloadFactory & workloadFactory,
1534 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1535
Sadik Armagan2999a022019-04-09 14:20:12 +01001536LayerTestResult<int16_t , 4> MinimumInt16Test(
1537 armnn::IWorkloadFactory& workloadFactory,
1538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1539
1540LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1541 armnn::IWorkloadFactory& workloadFactory,
1542 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1543
1544LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1545 armnn::IWorkloadFactory& workloadFactory,
1546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1547
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001548LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1549 armnn::IWorkloadFactory& workloadFactory,
1550 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1551
1552LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1553 armnn::IWorkloadFactory& workloadFactory,
1554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1555
1556LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1557 armnn::IWorkloadFactory& workloadFactory,
1558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1559
1560LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1561 armnn::IWorkloadFactory& workloadFactory,
1562 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1563
1564LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1565 armnn::IWorkloadFactory& workloadFactory,
1566 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1567
1568LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1569 armnn::IWorkloadFactory& workloadFactory,
1570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1571
1572LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1573 armnn::IWorkloadFactory& workloadFactory,
1574 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1575
1576LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1577 armnn::IWorkloadFactory& workloadFactory,
1578 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1579
1580LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1581 armnn::IWorkloadFactory& workloadFactory,
1582 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1583
1584LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1585 armnn::IWorkloadFactory& workloadFactory,
1586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1587
1588LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1589 armnn::IWorkloadFactory& workloadFactory,
1590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1591
1592LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1593 armnn::IWorkloadFactory& workloadFactory,
1594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1595
1596LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1597 armnn::IWorkloadFactory& workloadFactory,
1598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1599
1600LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1601 armnn::IWorkloadFactory& workloadFactory,
1602 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1603
1604LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1605 armnn::IWorkloadFactory& workloadFactory,
1606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1607
1608LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1609 armnn::IWorkloadFactory& workloadFactory,
1610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1611
1612LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1613 armnn::IWorkloadFactory& workloadFactory,
1614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1615
nikraj01120522a2019-05-31 11:33:07 +01001616LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1619
1620LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1621 armnn::IWorkloadFactory& workloadFactory,
1622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1623
1624LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1625 armnn::IWorkloadFactory& workloadFactory,
1626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1627
1628LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1629 armnn::IWorkloadFactory& workloadFactory,
1630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1631
1632LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1633 armnn::IWorkloadFactory& workloadFactory,
1634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1635
1636LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1639
1640LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1641 armnn::IWorkloadFactory& workloadFactory,
1642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1643
1644LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1645 armnn::IWorkloadFactory& workloadFactory,
1646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1647
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001648LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test1(
1649 armnn::IWorkloadFactory& workloadFactory,
1650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1651
1652LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test2(
1653 armnn::IWorkloadFactory& workloadFactory,
1654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1655
1656LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test3(
1657 armnn::IWorkloadFactory& workloadFactory,
1658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1659
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001660LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test4(
1661 armnn::IWorkloadFactory& workloadFactory,
1662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1663
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001664LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test1(
1665 armnn::IWorkloadFactory &workloadFactory,
1666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1667
Mike Kelly831faed2018-11-28 11:52:08 +00001668LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001669 armnn::IWorkloadFactory &workloadFactory,
1670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001671
1672LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001673 armnn::IWorkloadFactory &workloadFactory,
1674 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001675
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001676LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest1(
1677 armnn::IWorkloadFactory &workloadFactory,
1678 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001679
Mike Kelly831faed2018-11-28 11:52:08 +00001680LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest2(
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
1684LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001685 armnn::IWorkloadFactory &workloadFactory,
1686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001687
1688LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest1(
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
1692LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest2(
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
1696LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001697 armnn::IWorkloadFactory &workloadFactory,
1698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1699
1700LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest4(
1701 armnn::IWorkloadFactory &workloadFactory,
1702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001703
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001704LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1705 armnn::IWorkloadFactory& workloadFactory,
1706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001707
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001708LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1709 armnn::IWorkloadFactory& workloadFactory,
1710 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1711
1712LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1713 armnn::IWorkloadFactory& workloadFactory,
1714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1715
1716LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1717 armnn::IWorkloadFactory& workloadFactory,
1718 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1719
1720LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1721 armnn::IWorkloadFactory& workloadFactory,
1722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1723
1724LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1725 armnn::IWorkloadFactory& workloadFactory,
1726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1727
1728LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1729 armnn::IWorkloadFactory& workloadFactory,
1730 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1731
1732LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1733 armnn::IWorkloadFactory& workloadFactory,
1734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1735
1736LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1737 armnn::IWorkloadFactory& workloadFactory,
1738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1739
1740LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1741 armnn::IWorkloadFactory& workloadFactory,
1742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1743
1744LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1745 armnn::IWorkloadFactory& workloadFactory,
1746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1747
1748LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1749 armnn::IWorkloadFactory& workloadFactory,
1750 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1751
1752LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1753 armnn::IWorkloadFactory& workloadFactory,
1754 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1755
1756LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1757 armnn::IWorkloadFactory& workloadFactory,
1758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1759
1760LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1761 armnn::IWorkloadFactory& workloadFactory,
1762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1763
1764LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1765 armnn::IWorkloadFactory& workloadFactory,
1766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1767
1768LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1769 armnn::IWorkloadFactory& workloadFactory,
1770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1771
1772LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1773 armnn::IWorkloadFactory& workloadFactory,
1774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001775
Matteo Martincigh42666a12019-05-29 08:53:41 +01001776LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1777 armnn::IWorkloadFactory& workloadFactory,
1778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1779
1780LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1781 armnn::IWorkloadFactory& workloadFactory,
1782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1783
1784LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1785 armnn::IWorkloadFactory& workloadFactory,
1786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1787
1788LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1789 armnn::IWorkloadFactory& workloadFactory,
1790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1791
1792LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1793 armnn::IWorkloadFactory& workloadFactory,
1794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1795
1796LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1797 armnn::IWorkloadFactory& workloadFactory,
1798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1799
1800LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1801 armnn::IWorkloadFactory& workloadFactory,
1802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1803
1804LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1805 armnn::IWorkloadFactory& workloadFactory,
1806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1807
1808LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1809 armnn::IWorkloadFactory& workloadFactory,
1810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1811
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001812LayerTestResult<float, 4> Debug4DFloat32Test(
1813 armnn::IWorkloadFactory& workloadFactory,
1814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1815
1816LayerTestResult<float, 3> Debug3DFloat32Test(
1817 armnn::IWorkloadFactory& workloadFactory,
1818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1819
1820LayerTestResult<float, 2> Debug2DFloat32Test(
1821 armnn::IWorkloadFactory& workloadFactory,
1822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1823
1824LayerTestResult<float, 1> Debug1DFloat32Test(
1825 armnn::IWorkloadFactory& workloadFactory,
1826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1827
1828LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1829 armnn::IWorkloadFactory& workloadFactory,
1830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1831
1832LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1833 armnn::IWorkloadFactory& workloadFactory,
1834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1835
1836LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1837 armnn::IWorkloadFactory& workloadFactory,
1838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1839
1840LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1841 armnn::IWorkloadFactory& workloadFactory,
1842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001843
1844LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1845 armnn::IWorkloadFactory& workloadFactory,
1846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1847
1848LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1849 armnn::IWorkloadFactory& workloadFactory,
1850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1851
1852LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1853 armnn::IWorkloadFactory & workloadFactory,
1854 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1855
1856LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1857 armnn::IWorkloadFactory & workloadFactory,
1858 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1859
1860LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1861 armnn::IWorkloadFactory& workloadFactory,
1862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1863
1864LayerTestResult<float, 4> Debug4DFloat32Test(
1865 armnn::IWorkloadFactory& workloadFactory,
1866 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1867
1868LayerTestResult<float, 3> Debug3DFloat32Test(
1869 armnn::IWorkloadFactory& workloadFactory,
1870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1871
1872LayerTestResult<float, 2> Debug2DFloat32Test(
1873 armnn::IWorkloadFactory& workloadFactory,
1874 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1875
1876LayerTestResult<float, 1> Debug1DFloat32Test(
1877 armnn::IWorkloadFactory& workloadFactory,
1878 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1879
1880LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1881 armnn::IWorkloadFactory& workloadFactory,
1882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1883
1884LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1885 armnn::IWorkloadFactory& workloadFactory,
1886 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1887
1888LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1889 armnn::IWorkloadFactory& workloadFactory,
1890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1891
1892LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1893 armnn::IWorkloadFactory& workloadFactory,
1894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001895
1896LayerTestResult<float, 1> Gather1DParamsFloatTest(
1897 armnn::IWorkloadFactory& workloadFactory,
1898 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1899
1900LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1901 armnn::IWorkloadFactory& workloadFactory,
1902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1903
1904LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1905 armnn::IWorkloadFactory& workloadFactory,
1906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1907
1908LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1909 armnn::IWorkloadFactory& workloadFactory,
1910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1911
1912LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1913 armnn::IWorkloadFactory& workloadFactory,
1914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1915
1916LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1917 armnn::IWorkloadFactory& workloadFactory,
1918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001919
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001920LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1921 armnn::IWorkloadFactory& workloadFactory,
1922 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1923
1924LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1925 armnn::IWorkloadFactory& workloadFactory,
1926 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1927
1928LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001929 armnn::IWorkloadFactory& workloadFactory,
1930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001931
Keith Davisa57eccb2019-06-14 17:33:22 +01001932LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
1933 armnn::IWorkloadFactory& workloadFactory,
1934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1935
1936LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
1937 armnn::IWorkloadFactory& workloadFactory,
1938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1939
1940LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test(
1941 armnn::IWorkloadFactory& workloadFactory,
1942 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1943
1944LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test(
1945 armnn::IWorkloadFactory& workloadFactory,
1946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1947
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001948LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
1949 armnn::IWorkloadFactory& workloadFactory,
1950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1951
1952LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
1953 armnn::IWorkloadFactory& workloadFactory,
1954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1955
1956LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
1957 armnn::IWorkloadFactory& workloadFactory,
1958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01001959
1960template<typename T, typename B>
1961LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
1962 armnn::IWorkloadFactory& workloadFactory,
1963 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1964 armnn::TensorInfo inputTensorInfo,
1965 armnn::TensorInfo outputTensorInfo,
1966 armnn::TensorInfo weightsDesc,
1967 armnn::TensorInfo biasesDesc,
1968 boost::multi_array<T, 2>& weights,
1969 boost::multi_array<B, 1>& bias,
1970 boost::multi_array<T, 4>& input,
1971 bool biasEnabled,
1972 bool transposeWeights)
1973{
1974 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
1975 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
1976
1977 armnn::FullyConnectedQueueDescriptor data;
1978 armnn::WorkloadInfo info;
1979 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
1980 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
1981
1982 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
1983 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
1984
1985 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
1986 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
1987 data.m_Weight = &weightsTensor;
1988 data.m_Bias = &biasTensor;
1989 data.m_Parameters.m_BiasEnabled = biasEnabled;
1990 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
1991
1992 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
1993 LayerTestResult<T, 2> result(outputTensorInfo);
1994
1995 inputHandle->Allocate();
1996 outputHandle->Allocate();
1997 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
1998
1999 ExecuteWorkload(*workload, memoryManager);
2000
2001 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2002
2003 return result;
2004}
2005
2006template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2007std::vector<T> ConvertToDataType(const std::vector<float>& input,
2008 const armnn::TensorInfo& inputTensorInfo)
2009{
2010 std::vector<T> output(input.size());
2011 auto outputTensorInfo = inputTensorInfo;
2012 outputTensorInfo.SetDataType(ArmnnType);
2013
2014 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2015 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2016
2017 for (auto it = input.begin(); it != input.end(); ++it)
2018 {
2019 rOutputEncoder.Set(*it);
2020 ++rOutputEncoder;
2021 }
2022 return output;
2023}
2024
nikraj010421e7f2019-06-14 09:40:34 +01002025template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002026LayerTestResult<T, 2> Rsqrt2dTestCommon(
2027 armnn::IWorkloadFactory& workloadFactory,
2028 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2029 const armnn::TensorInfo inputTensorInfo,
2030 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002031 const std::vector<float>& inputValues,
2032 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002033{
nikraj010421e7f2019-06-14 09:40:34 +01002034 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002035
2036 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002037
2038 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2039 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002040
2041 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2042 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2043
2044 armnn::RsqrtQueueDescriptor descriptor;
2045
2046 armnn::WorkloadInfo info;
2047
2048 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2049 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2050
2051 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2052
2053 inputHandle->Allocate();
2054 outputHandle->Allocate();
2055
2056 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2057
2058 workload->PostAllocationConfigure();
2059 workload->Execute();
2060
2061 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2062
2063 return result;
2064}
2065
2066template<armnn::DataType ArmnnType, typename T>
2067LayerTestResult<T, 2> Rsqrt2dTest(
2068 armnn::IWorkloadFactory& workloadFactory,
2069 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2070{
2071 const armnn::TensorShape inputShape{ 2, 2 };
2072 const armnn::TensorShape outputShape{ 2, 2 };
2073
nikraj010421e7f2019-06-14 09:40:34 +01002074 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2075 inputTensorInfo.SetQuantizationScale(0.1f);
2076 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002077
nikraj010421e7f2019-06-14 09:40:34 +01002078 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2079 outputTensorInfo.SetQuantizationScale(0.1f);
2080 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002081
nikraj010421e7f2019-06-14 09:40:34 +01002082 std::vector<float> inputValues
2083 {
2084 1.f, 4.f,
2085 16.f, 25.f
2086 };
nikraj0193f84a92019-06-05 10:48:46 +01002087
nikraj010421e7f2019-06-14 09:40:34 +01002088 std::vector<float> expectedOutputValues
2089 {
2090 1.f, 0.5f,
2091 0.25f, 0.2f
2092 };
2093
2094 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002095 inputTensorInfo, outputTensorInfo,
2096 inputValues, expectedOutputValues);
2097}
2098
2099template<armnn::DataType ArmnnType, typename T>
2100LayerTestResult<T, 3> Rsqrt3dTest(
2101 armnn::IWorkloadFactory& workloadFactory,
2102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2103{
2104 const armnn::TensorShape inputShape{ 3, 1, 2 };
2105 const armnn::TensorShape outputShape{ 3, 1, 2 };
2106
nikraj010421e7f2019-06-14 09:40:34 +01002107 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2108 inputTensorInfo.SetQuantizationScale(0.1f);
2109 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002110
nikraj010421e7f2019-06-14 09:40:34 +01002111 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2112 outputTensorInfo.SetQuantizationScale(0.1f);
2113 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002114
nikraj010421e7f2019-06-14 09:40:34 +01002115 std::vector<float> inputValues
2116 {
2117 1.f, 4.f, 16.f,
2118 25.f, 64.f, 100.f
2119 };
nikraj0193f84a92019-06-05 10:48:46 +01002120
nikraj010421e7f2019-06-14 09:40:34 +01002121 std::vector<float> expectedOutputValues
2122 {
2123 1.f, 0.5f, 0.25f,
2124 0.2f, 0.125f, 0.1f
2125 };
2126
2127 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002128
2129 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002130 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2131 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002132
2133 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2134 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2135
2136 armnn::RsqrtQueueDescriptor descriptor;
2137
2138 armnn::WorkloadInfo info;
2139
2140 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2141 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2142
2143 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2144
2145 inputHandle->Allocate();
2146 outputHandle->Allocate();
2147
2148 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2149
2150 workload->PostAllocationConfigure();
2151 workload->Execute();
2152
2153 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2154
2155 return result;
2156}
2157
2158template<armnn::DataType ArmnnType, typename T>
2159LayerTestResult<T, 2> RsqrtZeroTest(
2160 armnn::IWorkloadFactory& workloadFactory,
2161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2162{
2163 const armnn::TensorShape inputShape{ 1, 2 };
2164 const armnn::TensorShape outputShape{ 1, 2 };
2165
nikraj010421e7f2019-06-14 09:40:34 +01002166 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2167 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002168
nikraj010421e7f2019-06-14 09:40:34 +01002169 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2170 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002171
nikraj010421e7f2019-06-14 09:40:34 +01002172 std::vector<float> inputValues
2173 {
2174 0.f, -0.f
2175 };
nikraj0193f84a92019-06-05 10:48:46 +01002176
nikraj010421e7f2019-06-14 09:40:34 +01002177 std::vector<float> expectedOutputValues
2178 {
2179 INFINITY, -INFINITY
2180 };
2181
2182 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002183 inputTensorInfo, outputTensorInfo,
2184 inputValues, expectedOutputValues);
2185}
2186
2187template<armnn::DataType ArmnnType, typename T>
2188LayerTestResult<T, 2> RsqrtNegativeTest(
2189 armnn::IWorkloadFactory& workloadFactory,
2190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2191{
2192 const armnn::TensorShape inputShape{ 1, 2 };
2193 const armnn::TensorShape outputShape{ 1, 2 };
2194
nikraj010421e7f2019-06-14 09:40:34 +01002195 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2196 inputTensorInfo.SetQuantizationScale(0.1f);
2197 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002198
nikraj010421e7f2019-06-14 09:40:34 +01002199 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2200 outputTensorInfo.SetQuantizationScale(0.1f);
2201 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002202
nikraj010421e7f2019-06-14 09:40:34 +01002203 std::vector<float> inputValues
2204 {
2205 -25.f, -16.f
2206 };
nikraj0193f84a92019-06-05 10:48:46 +01002207
nikraj010421e7f2019-06-14 09:40:34 +01002208 std::vector<float> expectedOutputValues
2209 {
2210 -NAN, -NAN
2211 };
2212
2213 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002214 inputTensorInfo, outputTensorInfo,
2215 inputValues, expectedOutputValues);
2216}
2217
2218template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002219LayerTestResult<T, 4> SimpleReshapeTestImpl(
2220 armnn::IWorkloadFactory& workloadFactory,
2221 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2222 armnn::TensorInfo inputTensorInfo,
2223 armnn::TensorInfo outputTensorInfo,
2224 const std::vector<T>& inputData,
2225 const std::vector<T>& outputExpectedData)
2226{
2227 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2228
2229 LayerTestResult<T, 4> ret(outputTensorInfo);
2230 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2231
2232 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2233 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2234
2235 armnn::ReshapeQueueDescriptor data;
2236 armnn::WorkloadInfo info;
2237 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2238 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2239
2240 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2241
2242 inputHandle->Allocate();
2243 outputHandle->Allocate();
2244
2245 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2246
2247 workload->Execute();
2248
2249 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2250
2251 return ret;
2252}
2253
Francis Murtagh46c09d02019-05-28 08:15:28 +01002254template<armnn::DataType ArmnnType, typename T>
2255LayerTestResult<T, 2> FullyConnectedTest(
2256 armnn::IWorkloadFactory& workloadFactory,
2257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2258 bool biasEnabled)
2259{
2260 constexpr static unsigned int inputWidth = 3u;
2261 constexpr static unsigned int inputHeight = 2u;
2262 constexpr static unsigned int inputChannels = 1u;
2263
2264 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2265
2266 constexpr static unsigned int outputChannels = 2u;
2267
2268 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2269 inputTensorInfo.SetQuantizationScale(0.1f);
2270 inputTensorInfo.SetQuantizationOffset(63);
2271
2272 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2273 outputTensorInfo.SetQuantizationScale(5.f);
2274 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2275
2276 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2277 weightsDesc.SetQuantizationScale(0.2f);
2278 weightsDesc.SetQuantizationOffset(93);
2279
2280 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2281 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2282 biasesDesc.SetQuantizationOffset(0);
2283
2284 LayerTestResult<T, 2> result(outputTensorInfo);
2285
2286 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2287 {
2288 -1.2f, 6.1f, -3.5f,
2289 18.8f, -5.5f, 2.9f
2290 },
2291 inputTensorInfo));
2292
2293 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2294 {
2295 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2296 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2297 },
2298 weightsDesc));
2299
2300 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2301
2302 result = SimpleFullyConnectedTestImpl<T>(
2303 workloadFactory,
2304 memoryManager,
2305 inputTensorInfo, outputTensorInfo,
2306 weightsDesc, biasesDesc,
2307 weights, bias, input,
2308 biasEnabled, true
2309 );
2310
2311 if (biasEnabled)
2312 {
2313 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2314 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2315 }
2316 else
2317 {
2318 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2319 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2320 }
2321
2322 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002323}
2324
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002325template<armnn::DataType ArmnnType, typename T>
2326LayerTestResult<T, 4> SimpleReshapeTest(
2327 armnn::IWorkloadFactory& workloadFactory,
2328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2329{
2330 armnn::TensorInfo inputTensorInfo;
2331 armnn::TensorInfo outputTensorInfo;
2332
2333 unsigned int inputShape[] = { 2, 2, 3, 3 };
2334 unsigned int outputShape[] = { 2, 2, 9, 1 };
2335
2336 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2337 inputTensorInfo.SetQuantizationScale(1.0f);
2338 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2339 outputTensorInfo.SetQuantizationScale(1.0f);
2340
2341 auto input = ConvertToDataType<ArmnnType>(
2342 {
2343 0.0f, 1.0f, 2.0f,
2344 3.0f, 4.0f, 5.0f,
2345 6.0f, 7.0f, 8.0f,
2346
2347 9.0f, 10.0f, 11.0f,
2348 12.0f, 13.0f, 14.0f,
2349 15.0f, 16.0f, 17.0f,
2350
2351 18.0f, 19.0f, 20.0f,
2352 21.0f, 22.0f, 23.0f,
2353 24.0f, 25.0f, 26.0f,
2354
2355 27.0f, 28.0f, 29.0f,
2356 30.0f, 31.0f, 32.0f,
2357 33.0f, 34.0f, 35.0f,
2358 },
2359 inputTensorInfo);
2360
2361 auto outputExpected = ConvertToDataType<ArmnnType>(
2362 {
2363 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2364
2365 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2366
2367 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2368
2369 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2370 },
2371 outputTensorInfo);
2372
2373 return SimpleReshapeTestImpl<T>(
2374 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002375}
James Conroy83735b12019-05-30 16:36:59 +01002376
2377template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2378LayerTestResult<T, 4> SimpleFloorTest(
2379 armnn::IWorkloadFactory& workloadFactory,
2380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2381{
James Conroyb40d7102019-06-04 12:32:09 +01002382 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2383 inputTensorInfo.SetQuantizationScale(0.1f);
2384
2385 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2386 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002387
2388 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2389 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2390 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2391 inputTensorInfo));
2392
2393 LayerTestResult<T, 4> ret(outputTensorInfo);
2394 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2395 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2396 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2397 outputTensorInfo));
2398
2399 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2400 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2401
2402 armnn::FloorQueueDescriptor data;
2403 armnn::WorkloadInfo info;
2404 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2405 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2406
2407 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2408
2409 inputHandle->Allocate();
2410 outputHandle->Allocate();
2411
2412 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2413
2414 workload->Execute();
2415
2416 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2417
2418 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002419}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002420
2421
2422template<armnn::DataType ArmnnType, typename T>
2423LayerTestResult<T, 4> ResizeBilinearNopTest(
2424 armnn::IWorkloadFactory& workloadFactory,
2425 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2426 const armnn::DataLayout dataLayout)
2427{
2428 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2429 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2430 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2431 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2432 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2433 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2434 if (armnn::IsQuantizedType<T>())
2435 {
2436 inputTensorInfo.SetQuantizationScale(1.5f);
2437 inputTensorInfo.SetQuantizationOffset(-3);
2438 outputTensorInfo.SetQuantizationScale(1.5f);
2439 outputTensorInfo.SetQuantizationOffset(-3);
2440 }
2441
2442 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2443 ? std::initializer_list<float>
2444 {
2445 1, 2, 3, 4,
2446 2, 3, 4, 5,
2447 3, 4, 5, 6,
2448 4, 5, 6, 7
2449 }
2450 : std::initializer_list<float>
2451 {
2452 1.0f, 2.0f, 3.0f, 4.0f,
2453 2.0f, 3.0f, 4.0f, 5.0f,
2454 3.0f, 4.0f, 5.0f, 6.0f,
2455 4.0f, 5.0f, 6.0f, 7.0f,
2456
2457 1.0f, 2.0f, 3.0f, 4.0f,
2458 2.0f, 3.0f, 4.0f, 5.0f,
2459 3.0f, 4.0f, 5.0f, 6.0f,
2460 4.0f, 5.0f, 6.0f, 7.0f
2461 };
2462
2463 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2464 if (dataLayout == armnn::DataLayout::NHWC)
2465 {
2466 std::vector<float> tmp(inputData.size());
2467 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2468 inputData = tmp;
2469 }
2470
2471 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2472 inputTensorInfo.GetQuantizationOffset(),
2473 inputData));
2474
2475 LayerTestResult<T, 4> result(outputTensorInfo);
2476 result.outputExpected = input;
2477
2478 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2479 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2480
2481 armnn::ResizeBilinearQueueDescriptor descriptor;
2482 descriptor.m_Parameters.m_DataLayout = dataLayout;
2483 armnn::WorkloadInfo info;
2484 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2485 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2486
2487 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2488
2489 inputHandle->Allocate();
2490 outputHandle->Allocate();
2491 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2492
2493 workload->PostAllocationConfigure();
2494 workload->Execute();
2495
2496 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2497 return result;
2498}
2499
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002500template<armnn::DataType ArmnnType, typename T>
2501LayerTestResult<T, 4> SimpleResizeBilinearTest(
2502 armnn::IWorkloadFactory& workloadFactory,
2503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2504 const armnn::DataLayout dataLayout)
2505{
2506 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2507 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2508 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2509 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2510 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2511 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2512
2513 if (armnn::IsQuantizedType<T>())
2514 {
2515 inputTensorInfo.SetQuantizationScale(0.1567f);
2516 inputTensorInfo.SetQuantizationOffset(1);
2517 outputTensorInfo.SetQuantizationScale(0.1567f);
2518 outputTensorInfo.SetQuantizationOffset(1);
2519 }
2520
2521 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2522 ? std::initializer_list<float>
2523 {
2524 1, 255,
2525 200, 250
2526 }
2527 : std::initializer_list<float>
2528 {
2529 1.0f, 255.0f,
2530 200.0f, 250.0f,
2531
2532 250.0f, 200.0f,
2533 250.0f, 1.0f
2534 };
2535
2536 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2537 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2538 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2539 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2540 // which we would expect if projecting the centre).
2541
2542 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2543 ? std::initializer_list<float>
2544 {
2545 1
2546 }
2547 : std::initializer_list<float>
2548 {
2549 1.0f,
2550
2551 250.0f
2552 };
2553
2554 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2555 if (dataLayout == armnn::DataLayout::NHWC)
2556 {
2557 std::vector<float> tmp(inputData.size());
2558 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2559 inputData = tmp;
2560
2561 std::vector<float> tmp1(outputData.size());
2562 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2563 outputData = tmp1;
2564 }
2565
2566 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2567 inputTensorInfo.GetQuantizationOffset(),
2568 inputData));
2569
2570 LayerTestResult<T, 4> result(outputTensorInfo);
2571 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2572 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2573 outputTensorInfo.GetQuantizationOffset(),
2574 outputData));
2575
2576 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2577 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2578
2579 armnn::ResizeBilinearQueueDescriptor descriptor;
2580 descriptor.m_Parameters.m_DataLayout = dataLayout;
2581 armnn::WorkloadInfo info;
2582 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2583 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2584
2585 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2586
2587 inputHandle->Allocate();
2588 outputHandle->Allocate();
2589 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2590
2591 workload->PostAllocationConfigure();
2592 workload->Execute();
2593
2594 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2595 return result;
2596}
2597
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002598template<armnn::DataType ArmnnType, typename T>
2599LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2600 armnn::IWorkloadFactory& workloadFactory,
2601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2602 const armnn::DataLayout dataLayout)
2603{
2604 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2605 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2606 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2607 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2608 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2609 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2610
2611 if (armnn::IsQuantizedType<T>())
2612 {
2613 inputTensorInfo.SetQuantizationScale(3.141592f);
2614 inputTensorInfo.SetQuantizationOffset(3);
2615 outputTensorInfo.SetQuantizationScale(3.141592f);
2616 outputTensorInfo.SetQuantizationOffset(3);
2617 }
2618
2619 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2620 ? std::initializer_list<float>
2621 {
2622 1, 2, 3, 4,
2623 2, 3, 4, 5,
2624 3, 4, 5, 6,
2625 4, 5, 6, 7
2626 }
2627 : std::initializer_list<float>
2628 {
2629 1.0f, 2.0f, 3.0f, 4.0f,
2630 2.0f, 3.0f, 4.0f, 5.0f,
2631 3.0f, 4.0f, 5.0f, 6.0f,
2632 4.0f, 5.0f, 6.0f, 7.0f,
2633
2634 7.0f, 6.0f, 5.0f, 4.0f,
2635 6.0f, 5.0f, 4.0f, 3.0f,
2636 5.0f, 4.0f, 3.0f, 2.0f,
2637 4.0f, 3.0f, 2.0f, 1.0f
2638 };
2639
2640 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2641 ? std::initializer_list<float>
2642 {
2643 1, 3,
2644 3, 5
2645 }
2646 : std::initializer_list<float>
2647 {
2648 1.0f, 3.0f,
2649 3.0f, 5.0f,
2650
2651 7.0f, 5.0f,
2652 5.0f, 3.0f
2653 };
2654
2655 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2656 if (dataLayout == armnn::DataLayout::NHWC)
2657 {
2658 std::vector<float> tmp(inputData.size());
2659 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2660 inputData = tmp;
2661
2662 std::vector<float> tmp1(outputData.size());
2663 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2664 outputData = tmp1;
2665 }
2666
2667 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2668 inputTensorInfo.GetQuantizationOffset(),
2669 inputData));
2670
2671 LayerTestResult<T, 4> result(outputTensorInfo);
2672 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2673 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2674 outputTensorInfo.GetQuantizationOffset(),
2675 outputData));
2676
2677 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2678 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2679
2680 armnn::ResizeBilinearQueueDescriptor descriptor;
2681 descriptor.m_Parameters.m_DataLayout = dataLayout;
2682 armnn::WorkloadInfo info;
2683 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2684 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2685
2686 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2687
2688 inputHandle->Allocate();
2689 outputHandle->Allocate();
2690 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2691
2692 workload->PostAllocationConfigure();
2693 workload->Execute();
2694
2695 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2696 return result;
2697}
2698
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002699template<armnn::DataType ArmnnType, typename T>
2700LayerTestResult<T, 4> ResizeBilinearMinTest(
2701 armnn::IWorkloadFactory& workloadFactory,
2702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2703 const armnn::DataLayout dataLayout)
2704{
2705 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2706 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2707 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2708 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2709 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2710 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2711
2712 if (armnn::IsQuantizedType<T>())
2713 {
2714 inputTensorInfo.SetQuantizationScale(1.5f);
2715 inputTensorInfo.SetQuantizationOffset(-1);
2716 outputTensorInfo.SetQuantizationScale(1.5f);
2717 outputTensorInfo.SetQuantizationOffset(-1);
2718 }
2719
2720 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2721 ? std::initializer_list<float>
2722 {
2723 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2724 9.0f, 13.5f, 21.0f // 5, 8, 13
2725 }
2726 : std::initializer_list<float>
2727 {
2728 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2729 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2730 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2731
2732 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2733 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2734 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2735 };
2736
2737 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2738 ? std::initializer_list<float>
2739 {
2740 3.0f, 5.25f // 1, 3
2741 }
2742 : std::initializer_list<float>
2743 {
2744 1.0f, 2.6666f, 6.00f,
2745 78.5f, 179.3333f, 401.00f,
2746
2747 987.0f, 454.6670f, 203.33f,
2748 48.5f, 22.3333f, 10.00f
2749 };
2750
2751 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2752 if (dataLayout == armnn::DataLayout::NHWC)
2753 {
2754 std::vector<float> tmp(inputData.size());
2755 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2756 inputData = tmp;
2757
2758 std::vector<float> tmp1(outputData.size());
2759 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2760 outputData = tmp1;
2761 }
2762
2763 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2764 inputTensorInfo.GetQuantizationOffset(),
2765 inputData));
2766
2767 LayerTestResult<T, 4> result(outputTensorInfo);
2768 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2769 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2770 outputTensorInfo.GetQuantizationOffset(),
2771 outputData));
2772
2773 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2774 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2775
2776 armnn::ResizeBilinearQueueDescriptor descriptor;
2777 descriptor.m_Parameters.m_DataLayout = dataLayout;
2778 armnn::WorkloadInfo info;
2779 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2780 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2781
2782 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2783
2784 inputHandle->Allocate();
2785 outputHandle->Allocate();
2786 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2787
2788 workload->PostAllocationConfigure();
2789 workload->Execute();
2790
2791 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2792 return result;
2793}
2794
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002795template<armnn::DataType ArmnnType, typename T>
2796LayerTestResult<T, 4> ResizeBilinearMagTest(
2797 armnn::IWorkloadFactory& workloadFactory,
2798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2799 const armnn::DataLayout dataLayout)
2800{
2801 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2802 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2803 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2804 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2805 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2806 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2807
2808 if (armnn::IsQuantizedType<T>())
2809 {
2810 inputTensorInfo.SetQuantizationScale(0.010765f);
2811 inputTensorInfo.SetQuantizationOffset(7);
2812 outputTensorInfo.SetQuantizationScale(0.010132f);
2813 outputTensorInfo.SetQuantizationOffset(-18);
2814 }
2815
2816 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2817 ? std::initializer_list<float>
2818 {
2819 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2820 1.05497f, 1.302565f, // 105, 128,
2821 2.400595f, 0.68896f // 230, 71
2822 }
2823 : std::initializer_list<float>
2824 {
2825 1.0f, 2.0f,
2826 13.0f, 21.0f,
2827 144.0f, 233.0f,
2828
2829 233.0f, 144.0f,
2830 21.0f, 13.0f,
2831 2.0f, 1.0f
2832 };
2833 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2834 ? std::initializer_list<float>
2835 {
2836 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2837 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2838 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2839 // 0, 87, 173, 217, 217, : Expected quantised values
2840 // 86, 96, 106, 111, 111,
2841 // 219, 151, 84, 50, 50
2842 }
2843 : std::initializer_list<float>
2844 {
2845 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2846 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2847 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2848
2849 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2850 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2851 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2852 };
2853
2854 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2855 if (dataLayout == armnn::DataLayout::NHWC)
2856 {
2857 std::vector<float> tmp(inputData.size());
2858 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2859 inputData = tmp;
2860
2861 std::vector<float> tmp1(outputData.size());
2862 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2863 outputData = tmp1;
2864 }
2865
2866 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2867 inputTensorInfo.GetQuantizationOffset(),
2868 inputData));
2869
2870 LayerTestResult<T, 4> result(outputTensorInfo);
2871 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2872 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2873 outputTensorInfo.GetQuantizationOffset(),
2874 outputData));
2875
2876 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2877 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2878
2879 armnn::ResizeBilinearQueueDescriptor descriptor;
2880 descriptor.m_Parameters.m_DataLayout = dataLayout;
2881 armnn::WorkloadInfo info;
2882 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2883 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2884
2885 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResizeBilinear(descriptor, info);
2886
2887 inputHandle->Allocate();
2888 outputHandle->Allocate();
2889 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2890
2891 workload->PostAllocationConfigure();
2892 workload->Execute();
2893
2894 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2895 return result;
2896}
2897
James Conroy4d1ff582019-06-10 17:06:39 +01002898template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
2899LayerTestResult<T, OutputDim> MeanTestHelper(
2900 armnn::IWorkloadFactory& workloadFactory,
2901 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2902 const unsigned int* inputShape,
2903 const std::vector<float>& inputData,
2904 const std::vector<unsigned int>& axis,
2905 bool keepDims,
2906 const unsigned int* outputShape,
2907 const std::vector<float>& outputData,
2908 float scale = 1.0f,
2909 int32_t offset = 0)
2910{
2911 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
2912 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
2913
2914 inputTensorInfo.SetQuantizationScale(scale);
2915 inputTensorInfo.SetQuantizationOffset(offset);
2916
2917 outputTensorInfo.SetQuantizationScale(scale);
2918 outputTensorInfo.SetQuantizationOffset(offset);
2919
2920 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
2921
2922 LayerTestResult<T, OutputDim> result(outputTensorInfo);
2923 result.outputExpected = MakeTensor<T, OutputDim>(
2924 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
2925
2926 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2927 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2928
2929 armnn::MeanQueueDescriptor data;
2930 data.m_Parameters.m_Axis = axis;
2931 data.m_Parameters.m_KeepDims = keepDims;
2932 armnn::WorkloadInfo info;
2933 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2934 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2935
2936 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
2937
2938 inputHandle->Allocate();
2939 outputHandle->Allocate();
2940
2941 CopyDataToITensorHandle(inputHandle.get(), input.origin());
2942
2943 workload->PostAllocationConfigure();
2944 workload->Execute();
2945
2946 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
2947
2948 return result;
2949}
2950
2951template<armnn::DataType ArmnnType, typename T>
2952LayerTestResult<T, 1> MeanSimpleTest(
2953 armnn::IWorkloadFactory& workloadFactory,
2954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2955{
2956 const unsigned int inputShape[] = { 3, 2 };
2957 const unsigned int outputShape[] = { 1 };
2958
2959 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
2960 std::vector<float> output({ 2.5f });
2961
2962 return MeanTestHelper<ArmnnType, T, 2, 1>(
2963 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
2964}
2965
2966template<armnn::DataType ArmnnType, typename T>
2967LayerTestResult<T, 3> MeanSimpleAxisTest(
2968 armnn::IWorkloadFactory& workloadFactory,
2969 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2970{
2971 const unsigned int inputShape[] = { 2, 3, 1, 2 };
2972 const unsigned int outputShape[] = { 3, 1, 2 };
2973
2974 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 });
2975 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
2976
2977 return MeanTestHelper<ArmnnType, T, 4, 3>(
2978 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
2979}
2980
2981template<armnn::DataType ArmnnType, typename T>
2982LayerTestResult<T, 4> MeanKeepDimsTest(
2983 armnn::IWorkloadFactory& workloadFactory,
2984 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2985{
2986 const unsigned int inputShape[] = { 1, 1, 3, 2 };
2987 const unsigned int outputShape[] = { 1, 1, 1, 2 };
2988
2989 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
2990 std::vector<float> output({ 2.5f, 2.5f });
2991
2992 return MeanTestHelper<ArmnnType, T, 4, 4>(
2993 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
2994}
2995
2996template<armnn::DataType ArmnnType, typename T>
2997LayerTestResult<T, 4> MeanMultipleDimsTest(
2998 armnn::IWorkloadFactory& workloadFactory,
2999 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3000{
3001 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3002 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3003
3004 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 });
3005 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3006
3007 return MeanTestHelper<ArmnnType, T, 4, 4>(
3008 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3009}
3010
3011template<armnn::DataType ArmnnType, typename T>
3012LayerTestResult<T, 1> MeanVts1Test(
3013 armnn::IWorkloadFactory& workloadFactory,
3014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3015{
3016 const unsigned int inputShape[] = { 4, 3, 2 };
3017 const unsigned int outputShape[] = { 2 };
3018
3019 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,
3020 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3021 std::vector<float> output({ 12.0f, 13.0f });
3022
3023 return MeanTestHelper<ArmnnType, T, 3, 1>(
3024 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3025}
3026
3027template<armnn::DataType ArmnnType, typename T>
3028LayerTestResult<T, 3> MeanVts2Test(
3029 armnn::IWorkloadFactory& workloadFactory,
3030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3031{
3032 const unsigned int inputShape[] = { 4, 3, 2 };
3033 const unsigned int outputShape[] = { 1, 3, 1 };
3034
3035 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,
3036 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3037 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3038
3039 return MeanTestHelper<ArmnnType, T, 3, 3>(
3040 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3041}
3042
3043template<armnn::DataType ArmnnType, typename T>
3044LayerTestResult<T, 3> MeanVts3Test(
3045 armnn::IWorkloadFactory& workloadFactory,
3046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3047{
3048 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3049 const unsigned int outputShape[] = { 1, 2, 1 };
3050
3051 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3052 std::vector<float> output({ 1.5f, 3.5f });
3053
3054 return MeanTestHelper<ArmnnType, T, 4, 3>(
3055 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3056}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003057
3058template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3059LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3060 armnn::IWorkloadFactory& workloadFactory,
3061 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3062 bool useSubtensor)
3063{
3064 // Defines the tensor descriptors.
3065 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3066 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3067 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3068
3069 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3070
3071 // Quantized input1 tensor.
3072 const float inputScale1 = 0.5f;
3073 const int32_t inputOffset1 = 5;
3074
3075 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3076 {
3077 1, 2, 3,
3078 4, 5, 6,
3079 7, 8, 9,
3080 10, 11, 12,
3081 13, 14, 15,
3082 16, 17, 18,
3083
3084 19, 20, 21,
3085 22, 23, 24,
3086 25, 26, 27,
3087 28, 29, 30,
3088 31, 32, 33,
3089 34, 35, 36
3090 }));
3091
3092 // Quatized input2 tensor.
3093 const float inputScale2 = 0.2f;
3094 const int32_t inputOffset2 = 10;
3095
3096 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3097 {
3098 37, 38, 39,
3099 40, 41, 42,
3100 43, 44, 45,
3101 46, 47, 48,
3102 49, 50, 51,
3103 52, 53, 54
3104 }));
3105
3106 // Quantized output tensor.
3107 const float outputScale = 0.1f;
3108 const int32_t outputOffset = 20;
3109
3110 LayerTestResult<T, 3> ret(outputTensorInfo);
3111
3112 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3113 {
3114 0, 5, 74,
3115 10, 15, 76,
3116 20, 25, 78,
3117 30, 35, 80,
3118 40, 45, 82,
3119 50, 55, 84,
3120
3121 60, 65, 86,
3122 70, 75, 88,
3123 80, 85, 90,
3124 90, 95, 92,
3125 100, 105, 94,
3126 110, 115, 96,
3127
3128 120, 125, 98,
3129 130, 135, 100,
3130 140, 145, 102,
3131 150, 155, 104,
3132 160, 165, 106,
3133 170, 175, 108
3134 }));
3135
3136 outputTensorInfo.SetQuantizationScale(outputScale);
3137 outputTensorInfo.SetQuantizationOffset(outputOffset);
3138 inputTensorInfo1.SetQuantizationScale(inputScale1);
3139 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3140 inputTensorInfo2.SetQuantizationScale(inputScale2);
3141 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3142
3143 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3144 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3145
3146 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3147 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3148
3149 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3150
3151 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3152
3153 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3154 subTensorsSupported ?
3155 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3156 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3157
3158 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3159 subTensorsSupported ?
3160 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3161 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3162
3163 armnn::ConcatQueueDescriptor data;
3164 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3165 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3166 data.m_Parameters = desc;
3167
3168 armnn::WorkloadInfo info;
3169 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3170 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3171 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3172
3173 data.m_ViewOrigins.push_back(window1);
3174 data.m_ViewOrigins.push_back(window2);
3175
3176 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3177
3178 inputHandle1->Allocate();
3179 inputHandle2->Allocate();
3180 outputHandle->Allocate();
3181
3182 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3183 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3184
3185 workload->PostAllocationConfigure();
3186 workload->Execute();
3187
3188 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3189
3190 return ret;
3191}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003192
3193template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3194LayerTestResult<T, 4> PreluTest(
3195 armnn::IWorkloadFactory& workloadFactory,
3196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3197{
3198 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3199 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3200 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3201
3202 if (armnn::IsQuantizedType<T>())
3203 {
3204 inputTensorInfo.SetQuantizationScale(0.25f);
3205 inputTensorInfo.SetQuantizationOffset(128);
3206 alphaTensorInfo.SetQuantizationScale(0.25f);
3207 alphaTensorInfo.SetQuantizationOffset(50);
3208 outputTensorInfo.SetQuantizationScale(0.5f);
3209 outputTensorInfo.SetQuantizationOffset(120);
3210 }
3211
3212 std::vector<float> inputData
3213 {
3214 // Expected quantized values:
3215 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3216 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3217 };
3218 std::vector<float> alphaData
3219 {
3220 // Expected quantized values:
3221 // 50, 54, 58
3222 0.0f, 1.0f, 2.0f
3223 };
3224 std::vector<float> outputExpectedData =
3225 {
3226 // Expected quantized values:
3227 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3228 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3229 };
3230
3231 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3232 inputTensorInfo.GetQuantizationOffset(),
3233 inputData));
3234 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3235 alphaTensorInfo.GetQuantizationOffset(),
3236 alphaData));
3237
3238 LayerTestResult<T, 4> result(outputTensorInfo);
3239 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3240 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3241 outputTensorInfo.GetQuantizationOffset(),
3242 outputExpectedData));
3243
3244 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3245 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3246 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3247
3248 armnn::PreluQueueDescriptor descriptor;
3249 armnn::WorkloadInfo info;
3250 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3251 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3252 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3253
3254 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3255
3256 inputHandle->Allocate();
3257 alphaHandle->Allocate();
3258 outputHandle->Allocate();
3259
3260 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3261 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3262
3263 workload->Execute();
3264
3265 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3266
3267 return result;
3268}
3269
3270template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
3271PreluTest<armnn::DataType::Float32>(
3272 armnn::IWorkloadFactory& workloadFactory,
3273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
3274
3275template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
3276PreluTest<armnn::DataType::QuantisedAsymm8>(
3277 armnn::IWorkloadFactory& workloadFactory,
3278 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
3279
3280template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
3281PreluTest<armnn::DataType::QuantisedSymm16>(
3282 armnn::IWorkloadFactory& workloadFactory,
3283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);