xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/SpaceToBatchNdTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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