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