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