1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "SpaceToBatchNdTestImpl.hpp"
7
8 #include <armnnUtils/QuantizeHelper.hpp>
9 #include <ResolveType.hpp>
10
11
12 #include <armnnUtils/Permute.hpp>
13
14 #include <armnnTestUtils/TensorCopyUtils.hpp>
15 #include <armnnTestUtils/WorkloadTestUtils.hpp>
16
17 #include <armnnTestUtils/TensorHelpers.hpp>
18
19 namespace
20 {
21
22 template<typename T>
SpaceToBatchNdTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,armnn::TensorInfo & inputTensorInfo,armnn::TensorInfo & outputTensorInfo,std::vector<float> & inputData,std::vector<float> & outputExpectedData,armnn::SpaceToBatchNdQueueDescriptor descriptor,const float qScale=1.0f,const int32_t qOffset=0)23 LayerTestResult<T, 4> SpaceToBatchNdTestImpl(
24 armnn::IWorkloadFactory& workloadFactory,
25 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
26 const armnn::ITensorHandleFactory& tensorHandleFactory,
27 armnn::TensorInfo& inputTensorInfo,
28 armnn::TensorInfo& outputTensorInfo,
29 std::vector<float>& inputData,
30 std::vector<float>& outputExpectedData,
31 armnn::SpaceToBatchNdQueueDescriptor descriptor,
32 const float qScale = 1.0f,
33 const int32_t qOffset = 0)
34 {
35 IgnoreUnused(memoryManager);
36 const armnn::PermutationVector NCHWToNHWC = {0, 3, 1, 2};
37 if (descriptor.m_Parameters.m_DataLayout == armnn::DataLayout::NHWC)
38 {
39 inputTensorInfo = armnnUtils::Permuted(inputTensorInfo, NCHWToNHWC);
40 outputTensorInfo = armnnUtils::Permuted(outputTensorInfo, NCHWToNHWC);
41
42 std::vector<float> inputTmp(inputData.size());
43 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC,
44 inputData.data(), inputTmp.data(), sizeof(float));
45 inputData = inputTmp;
46
47 std::vector<float> outputTmp(outputExpectedData.size());
48 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC,
49 outputExpectedData.data(), outputTmp.data(), sizeof(float));
50 outputExpectedData = outputTmp;
51 }
52
53 if(armnn::IsQuantizedType<T>())
54 {
55 inputTensorInfo.SetQuantizationScale(qScale);
56 inputTensorInfo.SetQuantizationOffset(qOffset);
57 outputTensorInfo.SetQuantizationScale(qScale);
58 outputTensorInfo.SetQuantizationOffset(qOffset);
59 }
60
61 std::vector<T> input = armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset);
62 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset);
63 std::vector<T> actualOutput(outputTensorInfo.GetNumElements());
64
65 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
66 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
67
68 armnn::WorkloadInfo info;
69 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
70 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
71
72 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::SpaceToBatchNd,
73 descriptor,
74 info);
75
76 inputHandle->Allocate();
77 outputHandle->Allocate();
78
79 CopyDataToITensorHandle(inputHandle.get(), input.data());
80
81 workload->Execute();
82
83 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
84
85 return LayerTestResult<T, 4>(actualOutput,
86 expectedOutput,
87 outputHandle->GetShape(),
88 outputTensorInfo.GetShape());
89 }
90
91 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,armnn::DataLayout dataLayout=armnn::DataLayout::NCHW)92 LayerTestResult<T, 4> SpaceToBatchNdSimpleTest(
93 armnn::IWorkloadFactory& workloadFactory,
94 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
95 const armnn::ITensorHandleFactory& tensorHandleFactory,
96 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
97 {
98 armnn::TensorInfo inputTensorInfo;
99 armnn::TensorInfo outputTensorInfo;
100
101 unsigned int inputShape[] = {1, 1, 2, 2};
102 unsigned int outputShape[] = {4, 1, 1, 1};
103
104 armnn::SpaceToBatchNdQueueDescriptor desc;
105 desc.m_Parameters.m_DataLayout = dataLayout;
106 desc.m_Parameters.m_BlockShape = {2, 2};
107 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
108
109 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
110 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
111
112 std::vector<float> input = std::vector<float>(
113 {
114 1.0f, 2.0f, 3.0f, 4.0f
115 });
116
117 std::vector<float> outputExpected = std::vector<float>(
118 {
119 1.0f, 2.0f, 3.0f, 4.0f
120 });
121
122 return SpaceToBatchNdTestImpl<T>(
123 workloadFactory, memoryManager, tensorHandleFactory,
124 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
125 }
126
127 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdMultiChannelsTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,armnn::DataLayout dataLayout=armnn::DataLayout::NCHW)128 LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsTest(
129 armnn::IWorkloadFactory& workloadFactory,
130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
131 const armnn::ITensorHandleFactory& tensorHandleFactory,
132 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
133 {
134 armnn::TensorInfo inputTensorInfo;
135 armnn::TensorInfo outputTensorInfo;
136
137 unsigned int inputShape[] = {1, 3, 2, 2};
138 unsigned int outputShape[] = {4, 3, 1, 1};
139
140 armnn::SpaceToBatchNdQueueDescriptor desc;
141 desc.m_Parameters.m_DataLayout = dataLayout;
142 desc.m_Parameters.m_BlockShape = {2, 2};
143 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
144
145 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
146 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
147
148 std::vector<float> input = std::vector<float>(
149 {
150 1.0f, 4.0f, 7.0f, 10.0f,
151 2.0f, 5.0, 8.0, 11.0f,
152 3.0f, 6.0f, 9.0f, 12.0f
153 });
154
155 std::vector<float> outputExpected = std::vector<float>(
156 {
157 1.0f, 2.0f, 3.0f,
158 4.0f, 5.0f, 6.0f,
159 7.0f, 8.0f, 9.0f,
160 10.0f, 11.0f, 12.0f
161 });
162
163 return SpaceToBatchNdTestImpl<T>(
164 workloadFactory, memoryManager, tensorHandleFactory,
165 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
166 }
167
168 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdMultiBlockTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,armnn::DataLayout dataLayout=armnn::DataLayout::NCHW)169 LayerTestResult<T, 4> SpaceToBatchNdMultiBlockTest(
170 armnn::IWorkloadFactory& workloadFactory,
171 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
172 const armnn::ITensorHandleFactory& tensorHandleFactory,
173 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
174 {
175 armnn::TensorInfo inputTensorInfo;
176 armnn::TensorInfo outputTensorInfo;
177
178 unsigned int inputShape[] = {1, 1, 4, 4};
179 unsigned int outputShape[] = {4, 1, 2, 2};
180
181 armnn::SpaceToBatchNdQueueDescriptor desc;
182 desc.m_Parameters.m_DataLayout = dataLayout;
183 desc.m_Parameters.m_BlockShape = {2, 2};
184 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
185
186 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
187 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
188
189 std::vector<float> input = std::vector<float>(
190 {
191 1.0f, 2.0f, 3.0f, 4.0f,
192 5.0f, 6.0f, 7.0f, 8.0f,
193 9.0f, 10.0f, 11.0f, 12.0f,
194 13.0f, 14.0f, 15.0f, 16.0f
195 });
196
197 std::vector<float> outputExpected = std::vector<float>(
198 {
199 1.0f, 3.0f, 9.0f, 11.0f,
200 2.0f, 4.0f, 10.0f, 12.0f,
201 5.0f, 7.0f, 13.0f, 15.0f,
202 6.0f, 8.0f, 14.0f, 16.0f
203 });
204
205 return SpaceToBatchNdTestImpl<T>(
206 workloadFactory, memoryManager, tensorHandleFactory,
207 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
208 }
209
210 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdPaddingTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,armnn::DataLayout dataLayout=armnn::DataLayout::NCHW)211 LayerTestResult<T, 4> SpaceToBatchNdPaddingTest(
212 armnn::IWorkloadFactory& workloadFactory,
213 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
214 const armnn::ITensorHandleFactory& tensorHandleFactory,
215 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
216 {
217 armnn::TensorInfo inputTensorInfo;
218 armnn::TensorInfo outputTensorInfo;
219
220 unsigned int inputShape[] = {2, 1, 2, 4};
221 unsigned int outputShape[] = {8, 1, 1, 3};
222
223 armnn::SpaceToBatchNdQueueDescriptor desc;
224 desc.m_Parameters.m_DataLayout = dataLayout;
225 desc.m_Parameters.m_BlockShape = {2, 2};
226 desc.m_Parameters.m_PadList = {{0, 0}, {2, 0}};
227
228 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
229 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
230
231 std::vector<float> input = std::vector<float>(
232 {
233 1.0f, 2.0f, 3.0f, 4.0f,
234 5.0f, 6.0f, 7.0f, 8.0f,
235 9.0f, 10.0f, 11.0f, 12.0f,
236 13.0f, 14.0f, 15.0f, 16.0f
237 });
238
239 std::vector<float> outputExpected = std::vector<float>(
240 {
241 0.0f, 1.0f, 3.0f,
242 0.0f, 9.0f, 11.0f,
243 0.0f, 2.0f, 4.0f,
244 0.0f, 10.0f, 12.0f,
245 0.0f, 5.0f, 7.0f,
246 0.0f, 13.0f, 15.0f,
247 0.0f, 6.0f, 8.0f,
248 0.0f, 14.0f, 16.0f
249 });
250
251 return SpaceToBatchNdTestImpl<T>(
252 workloadFactory, memoryManager, tensorHandleFactory,
253 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
254 }
255
256 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdSimpleNhwcTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)257 LayerTestResult<T, 4> SpaceToBatchNdSimpleNhwcTest(
258 armnn::IWorkloadFactory& workloadFactory,
259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
260 const armnn::ITensorHandleFactory& tensorHandleFactory)
261 {
262 return SpaceToBatchNdSimpleTest<ArmnnType>(workloadFactory,
263 memoryManager,
264 tensorHandleFactory,
265 armnn::DataLayout::NHWC);
266 }
267
268 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdMultiChannelsNhwcTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)269 LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsNhwcTest(
270 armnn::IWorkloadFactory& workloadFactory,
271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
272 const armnn::ITensorHandleFactory& tensorHandleFactory)
273 {
274 return SpaceToBatchNdMultiChannelsTest<ArmnnType>(workloadFactory,
275 memoryManager,
276 tensorHandleFactory,
277 armnn::DataLayout::NHWC);
278 }
279
280 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdMultiBlockNhwcTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)281 LayerTestResult<T, 4> SpaceToBatchNdMultiBlockNhwcTest(
282 armnn::IWorkloadFactory& workloadFactory,
283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
284 const armnn::ITensorHandleFactory& tensorHandleFactory)
285 {
286 return SpaceToBatchNdMultiBlockTest<ArmnnType>(workloadFactory,
287 memoryManager,
288 tensorHandleFactory,
289 armnn::DataLayout::NHWC);
290 }
291
292 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
SpaceToBatchNdPaddingNhwcTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)293 LayerTestResult<T, 4> SpaceToBatchNdPaddingNhwcTest(
294 armnn::IWorkloadFactory& workloadFactory,
295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
296 const armnn::ITensorHandleFactory& tensorHandleFactory)
297 {
298 return SpaceToBatchNdPaddingTest<ArmnnType>(workloadFactory,
299 memoryManager,
300 tensorHandleFactory,
301 armnn::DataLayout::NHWC);
302 }
303
304 } // anonymous namespace
305
SpaceToBatchNdSimpleFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)306 LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
307 armnn::IWorkloadFactory& workloadFactory,
308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
309 const armnn::ITensorHandleFactory& tensorHandleFactory)
310 {
311 return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory,
312 memoryManager,
313 tensorHandleFactory);
314 }
315
SpaceToBatchNdMultiChannelsFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)316 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
317 armnn::IWorkloadFactory& workloadFactory,
318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
319 const armnn::ITensorHandleFactory& tensorHandleFactory)
320 {
321 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory,
322 memoryManager,
323 tensorHandleFactory);
324 }
325
SpaceToBatchNdMultiBlockFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)326 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
327 armnn::IWorkloadFactory& workloadFactory,
328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
329 const armnn::ITensorHandleFactory& tensorHandleFactory)
330 {
331 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory,
332 memoryManager,
333 tensorHandleFactory);
334 }
335
SpaceToBatchNdPaddingFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)336 LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
337 armnn::IWorkloadFactory& workloadFactory,
338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
339 const armnn::ITensorHandleFactory& tensorHandleFactory)
340 {
341 return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory,
342 memoryManager,
343 tensorHandleFactory);
344 }
345
SpaceToBatchNdSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)346 LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleFloat16Test(
347 armnn::IWorkloadFactory& workloadFactory,
348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
349 const armnn::ITensorHandleFactory& tensorHandleFactory)
350 {
351 return SpaceToBatchNdSimpleTest<armnn::DataType::Float16>(workloadFactory,
352 memoryManager,
353 tensorHandleFactory);
354 }
355
SpaceToBatchNdMultiChannelsFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)356 LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsFloat16Test(
357 armnn::IWorkloadFactory& workloadFactory,
358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
359 const armnn::ITensorHandleFactory& tensorHandleFactory)
360 {
361 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float16>(workloadFactory,
362 memoryManager,
363 tensorHandleFactory);
364 }
365
SpaceToBatchNdMultiBlockFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)366 LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockFloat16Test(
367 armnn::IWorkloadFactory& workloadFactory,
368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
369 const armnn::ITensorHandleFactory& tensorHandleFactory)
370 {
371 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float16>(workloadFactory,
372 memoryManager,
373 tensorHandleFactory);
374 }
375
SpaceToBatchNdPaddingFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)376 LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingFloat16Test(
377 armnn::IWorkloadFactory& workloadFactory,
378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
379 const armnn::ITensorHandleFactory& tensorHandleFactory)
380 {
381 return SpaceToBatchNdPaddingTest<armnn::DataType::Float16>(workloadFactory,
382 memoryManager,
383 tensorHandleFactory);
384 }
385
SpaceToBatchNdSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)386 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
387 armnn::IWorkloadFactory& workloadFactory,
388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
389 const armnn::ITensorHandleFactory& tensorHandleFactory)
390 {
391 return SpaceToBatchNdSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory,
392 memoryManager,
393 tensorHandleFactory);
394 }
395
SpaceToBatchNdMultiChannelsUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)396 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
397 armnn::IWorkloadFactory& workloadFactory,
398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
399 const armnn::ITensorHandleFactory& tensorHandleFactory)
400 {
401 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QAsymmU8>(workloadFactory,
402 memoryManager,
403 tensorHandleFactory);
404 }
405
SpaceToBatchNdMultiBlockUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)406 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
407 armnn::IWorkloadFactory& workloadFactory,
408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
409 const armnn::ITensorHandleFactory& tensorHandleFactory)
410 {
411 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QAsymmU8>(workloadFactory,
412 memoryManager,
413 tensorHandleFactory);
414 }
415
SpaceToBatchNdPaddingUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)416 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
417 armnn::IWorkloadFactory& workloadFactory,
418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
419 const armnn::ITensorHandleFactory& tensorHandleFactory)
420 {
421 return SpaceToBatchNdPaddingTest<armnn::DataType::QAsymmU8>(workloadFactory,
422 memoryManager,
423 tensorHandleFactory);
424 }
425
SpaceToBatchNdSimpleNhwcFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)426 LayerTestResult<float, 4> SpaceToBatchNdSimpleNhwcFloat32Test(
427 armnn::IWorkloadFactory& workloadFactory,
428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
429 const armnn::ITensorHandleFactory& tensorHandleFactory)
430 {
431 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float32>(workloadFactory,
432 memoryManager,
433 tensorHandleFactory);
434 }
435
SpaceToBatchNdMultiChannelsNhwcFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)436 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNhwcFloat32Test(
437 armnn::IWorkloadFactory& workloadFactory,
438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
439 const armnn::ITensorHandleFactory& tensorHandleFactory)
440 {
441 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float32>(workloadFactory,
442 memoryManager,
443 tensorHandleFactory);
444 }
445
SpaceToBatchNdMultiBlockNhwcFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)446 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNhwcFloat32Test(
447 armnn::IWorkloadFactory& workloadFactory,
448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
449 const armnn::ITensorHandleFactory& tensorHandleFactory)
450 {
451 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float32>(workloadFactory,
452 memoryManager,
453 tensorHandleFactory);
454 }
455
SpaceToBatchNdPaddingNhwcFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)456 LayerTestResult<float, 4> SpaceToBatchNdPaddingNhwcFloat32Test(
457 armnn::IWorkloadFactory& workloadFactory,
458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
459 const armnn::ITensorHandleFactory& tensorHandleFactory)
460 {
461 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float32>(workloadFactory,
462 memoryManager,
463 tensorHandleFactory);
464 }
465
SpaceToBatchNdSimpleNhwcFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)466 LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleNhwcFloat16Test(
467 armnn::IWorkloadFactory& workloadFactory,
468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
469 const armnn::ITensorHandleFactory& tensorHandleFactory)
470 {
471 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float16>(workloadFactory,
472 memoryManager,
473 tensorHandleFactory);
474 }
475
SpaceToBatchNdMultiChannelsNhwcFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)476 LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsNhwcFloat16Test(
477 armnn::IWorkloadFactory& workloadFactory,
478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
479 const armnn::ITensorHandleFactory& tensorHandleFactory)
480 {
481 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float16>(workloadFactory,
482 memoryManager,
483 tensorHandleFactory);
484 }
485
SpaceToBatchNdMultiBlockNhwcFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)486 LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockNhwcFloat16Test(
487 armnn::IWorkloadFactory& workloadFactory,
488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
489 const armnn::ITensorHandleFactory& tensorHandleFactory)
490 {
491 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float16>(workloadFactory,
492 memoryManager,
493 tensorHandleFactory);
494 }
495
SpaceToBatchNdPaddingNhwcFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)496 LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingNhwcFloat16Test(
497 armnn::IWorkloadFactory& workloadFactory,
498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
499 const armnn::ITensorHandleFactory& tensorHandleFactory)
500 {
501 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float16>(workloadFactory,
502 memoryManager,
503 tensorHandleFactory);
504 }
505
SpaceToBatchNdSimpleNhwcUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)506 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNhwcUint8Test(
507 armnn::IWorkloadFactory& workloadFactory,
508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
509 const armnn::ITensorHandleFactory& tensorHandleFactory)
510 {
511 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
512 memoryManager,
513 tensorHandleFactory);
514 }
515
SpaceToBatchNdMultiChannelsNhwcUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)516 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNhwcUint8Test(
517 armnn::IWorkloadFactory& workloadFactory,
518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
519 const armnn::ITensorHandleFactory& tensorHandleFactory)
520 {
521 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
522 memoryManager,
523 tensorHandleFactory);
524 }
525
SpaceToBatchNdMultiBlockNhwcUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)526 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNhwcUint8Test(
527 armnn::IWorkloadFactory& workloadFactory,
528 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
529 const armnn::ITensorHandleFactory& tensorHandleFactory)
530 {
531 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
532 memoryManager,
533 tensorHandleFactory);
534 }
535
SpaceToBatchNdPaddingNhwcUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)536 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNhwcUint8Test(
537 armnn::IWorkloadFactory& workloadFactory,
538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
539 const armnn::ITensorHandleFactory& tensorHandleFactory)
540 {
541 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
542 memoryManager,
543 tensorHandleFactory);
544 }
545
SpaceToBatchNdSimpleUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)546 LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
547 armnn::IWorkloadFactory& workloadFactory,
548 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
549 const armnn::ITensorHandleFactory& tensorHandleFactory)
550 {
551 return SpaceToBatchNdSimpleTest<armnn::DataType::QSymmS16>(workloadFactory,
552 memoryManager,
553 tensorHandleFactory);
554 }
555
SpaceToBatchNdMultiChannelsUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)556 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
557 armnn::IWorkloadFactory& workloadFactory,
558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
559 const armnn::ITensorHandleFactory& tensorHandleFactory)
560 {
561 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QSymmS16>(workloadFactory,
562 memoryManager,
563 tensorHandleFactory);
564 }
565
SpaceToBatchNdMultiBlockUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)566 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
567 armnn::IWorkloadFactory& workloadFactory,
568 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
569 const armnn::ITensorHandleFactory& tensorHandleFactory)
570 {
571 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QSymmS16>(workloadFactory,
572 memoryManager,
573 tensorHandleFactory);
574 }
575
SpaceToBatchNdPaddingUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)576 LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
577 armnn::IWorkloadFactory& workloadFactory,
578 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
579 const armnn::ITensorHandleFactory& tensorHandleFactory)
580 {
581 return SpaceToBatchNdPaddingTest<armnn::DataType::QSymmS16>(workloadFactory,
582 memoryManager,
583 tensorHandleFactory);
584 }
585
SpaceToBatchNdSimpleNhwcUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)586 LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNhwcUint16Test(
587 armnn::IWorkloadFactory& workloadFactory,
588 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
589 const armnn::ITensorHandleFactory& tensorHandleFactory)
590 {
591 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
592 memoryManager,
593 tensorHandleFactory);
594 }
595
SpaceToBatchNdMultiChannelsNhwcUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)596 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNhwcUint16Test(
597 armnn::IWorkloadFactory& workloadFactory,
598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
599 const armnn::ITensorHandleFactory& tensorHandleFactory)
600 {
601 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
602 memoryManager,
603 tensorHandleFactory);
604 }
605
SpaceToBatchNdMultiBlockNhwcUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)606 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNhwcUint16Test(
607 armnn::IWorkloadFactory& workloadFactory,
608 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
609 const armnn::ITensorHandleFactory& tensorHandleFactory)
610 {
611 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
612 memoryManager,
613 tensorHandleFactory);
614 }
615
SpaceToBatchNdPaddingNhwcUint16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)616 LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNhwcUint16Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
619 const armnn::ITensorHandleFactory& tensorHandleFactory)
620 {
621 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
622 memoryManager,
623 tensorHandleFactory);
624 }
625