blob: 92876e18bd27cf88b7c6c821dc6271e656a072eb [file] [log] [blame]
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001//
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "SpaceToBatchNdTestImpl.hpp"
7
Colm Donelanc42a9872022-02-02 16:35:09 +00008#include <armnnUtils/QuantizeHelper.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01009#include <ResolveType.hpp>
10
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010011
Matteo Martincighe011d202019-11-28 11:35:47 +000012#include <armnnUtils/Permute.hpp>
13
Sadik Armagana097d2a2021-11-24 15:47:28 +000014#include <armnnTestUtils/TensorCopyUtils.hpp>
Colm Donelan0c479742021-12-10 12:43:54 +000015#include <armnnTestUtils/WorkloadTestUtils.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010016
Colm Donelanc42a9872022-02-02 16:35:09 +000017#include <armnnTestUtils/TensorHelpers.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010018
19namespace
20{
21
22template<typename T>
23LayerTestResult<T, 4> SpaceToBatchNdTestImpl(
24 armnn::IWorkloadFactory& workloadFactory,
25 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +010026 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010027 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{
Jan Eilers8eb25602020-03-09 12:13:48 +000035 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010036 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
Sadik Armagan483c8112021-06-01 09:24:52 +010061 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());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010064
Sadik Armagan89de3b42020-08-28 10:38:53 +010065 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
66 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010067
68 armnn::WorkloadInfo info;
69 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
70 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
71
Teresa Charlin611c7fb2022-01-07 09:47:29 +000072 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::SpaceToBatchNd,
73 descriptor,
74 info);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010075
76 inputHandle->Allocate();
77 outputHandle->Allocate();
78
Sadik Armagan483c8112021-06-01 09:24:52 +010079 CopyDataToITensorHandle(inputHandle.get(), input.data());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010080
81 workload->Execute();
82
Sadik Armagan483c8112021-06-01 09:24:52 +010083 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010084
Sadik Armagan483c8112021-06-01 09:24:52 +010085 return LayerTestResult<T, 4>(actualOutput,
86 expectedOutput,
87 outputHandle->GetShape(),
88 outputTensorInfo.GetShape());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010089}
90
91template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
92LayerTestResult<T, 4> SpaceToBatchNdSimpleTest(
93 armnn::IWorkloadFactory& workloadFactory,
94 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +010095 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010096 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100123 workloadFactory, memoryManager, tensorHandleFactory,
124 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100125}
126
127template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
128LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsTest(
129 armnn::IWorkloadFactory& workloadFactory,
130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100131 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100132 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100164 workloadFactory, memoryManager, tensorHandleFactory,
165 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100166}
167
168template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
169LayerTestResult<T, 4> SpaceToBatchNdMultiBlockTest(
170 armnn::IWorkloadFactory& workloadFactory,
171 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100172 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100173 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100206 workloadFactory, memoryManager, tensorHandleFactory,
207 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100208}
209
210template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
211LayerTestResult<T, 4> SpaceToBatchNdPaddingTest(
212 armnn::IWorkloadFactory& workloadFactory,
213 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100214 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100215 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100252 workloadFactory, memoryManager, tensorHandleFactory,
253 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100254}
255
256template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
257LayerTestResult<T, 4> SpaceToBatchNdSimpleNhwcTest(
258 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100260 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100261{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100262 return SpaceToBatchNdSimpleTest<ArmnnType>(workloadFactory,
263 memoryManager,
264 tensorHandleFactory,
265 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100266}
267
268template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
269LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsNhwcTest(
270 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100272 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100273{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100274 return SpaceToBatchNdMultiChannelsTest<ArmnnType>(workloadFactory,
275 memoryManager,
276 tensorHandleFactory,
277 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100278}
279
280template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
281LayerTestResult<T, 4> SpaceToBatchNdMultiBlockNhwcTest(
282 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100284 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100285{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100286 return SpaceToBatchNdMultiBlockTest<ArmnnType>(workloadFactory,
287 memoryManager,
288 tensorHandleFactory,
289 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100290}
291
292template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
293LayerTestResult<T, 4> SpaceToBatchNdPaddingNhwcTest(
294 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100296 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100297{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100298 return SpaceToBatchNdPaddingTest<ArmnnType>(workloadFactory,
299 memoryManager,
300 tensorHandleFactory,
301 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100302}
303
304} // anonymous namespace
305
306LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
307 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100309 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100310{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100311 return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory,
312 memoryManager,
313 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100314}
315
316LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
317 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100319 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100320{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100321 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory,
322 memoryManager,
323 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100324}
325
326LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
327 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100329 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100330{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100331 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory,
332 memoryManager,
333 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100334}
335
336LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
337 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100339 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100340{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100341 return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory,
342 memoryManager,
343 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100344}
345
Matthew Jackson9bff1442019-09-12 09:08:23 +0100346LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleFloat16Test(
347 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100349 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100350{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100351 return SpaceToBatchNdSimpleTest<armnn::DataType::Float16>(workloadFactory,
352 memoryManager,
353 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100354}
355
356LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsFloat16Test(
357 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100359 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100360{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100361 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float16>(workloadFactory,
362 memoryManager,
363 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100364}
365
366LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockFloat16Test(
367 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100369 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100370{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100371 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float16>(workloadFactory,
372 memoryManager,
373 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100374}
375
376LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingFloat16Test(
377 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100379 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100380{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100381 return SpaceToBatchNdPaddingTest<armnn::DataType::Float16>(workloadFactory,
382 memoryManager,
383 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100384}
385
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100386LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
387 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100389 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100390{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100391 return SpaceToBatchNdSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory,
392 memoryManager,
393 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100394}
395
396LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
397 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100399 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100400{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100401 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QAsymmU8>(workloadFactory,
402 memoryManager,
403 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100404}
405
406LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
407 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100409 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100410{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100411 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QAsymmU8>(workloadFactory,
412 memoryManager,
413 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100414}
415
416LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
417 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100419 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100420{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100421 return SpaceToBatchNdPaddingTest<armnn::DataType::QAsymmU8>(workloadFactory,
422 memoryManager,
423 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100424}
425
426LayerTestResult<float, 4> SpaceToBatchNdSimpleNhwcFloat32Test(
427 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100429 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100430{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100431 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float32>(workloadFactory,
432 memoryManager,
433 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100434}
435
436LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNhwcFloat32Test(
437 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100439 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100440{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100441 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float32>(workloadFactory,
442 memoryManager,
443 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100444}
445
446LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNhwcFloat32Test(
447 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100449 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100450{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100451 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float32>(workloadFactory,
452 memoryManager,
453 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100454}
455
456LayerTestResult<float, 4> SpaceToBatchNdPaddingNhwcFloat32Test(
457 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100459 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100460{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100461 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float32>(workloadFactory,
462 memoryManager,
463 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100464}
465
Matthew Jackson9bff1442019-09-12 09:08:23 +0100466LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleNhwcFloat16Test(
467 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100469 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100470{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100471 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float16>(workloadFactory,
472 memoryManager,
473 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100474}
475
476LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsNhwcFloat16Test(
477 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100479 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100480{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100481 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float16>(workloadFactory,
482 memoryManager,
483 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100484}
485
486LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockNhwcFloat16Test(
487 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100489 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100490{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100491 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float16>(workloadFactory,
492 memoryManager,
493 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100494}
495
496LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingNhwcFloat16Test(
497 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100499 const armnn::ITensorHandleFactory& tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100500{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100501 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float16>(workloadFactory,
502 memoryManager,
503 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100504}
505
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100506LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNhwcUint8Test(
507 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100509 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100510{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100511 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
512 memoryManager,
513 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100514}
515
516LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNhwcUint8Test(
517 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100519 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100520{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100521 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
522 memoryManager,
523 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100524}
525
526LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNhwcUint8Test(
527 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100528 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100529 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100530{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100531 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
532 memoryManager,
533 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100534}
535
536LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNhwcUint8Test(
537 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100539 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100540{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100541 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
542 memoryManager,
543 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100544}
545
546LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
547 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100548 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100549 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100550{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100551 return SpaceToBatchNdSimpleTest<armnn::DataType::QSymmS16>(workloadFactory,
552 memoryManager,
553 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100554}
555
556LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
557 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100559 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100560{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100561 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QSymmS16>(workloadFactory,
562 memoryManager,
563 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100564}
565
566LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
567 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100568 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100569 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100570{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100571 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QSymmS16>(workloadFactory,
572 memoryManager,
573 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100574}
575
576LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
577 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100578 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100579 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100580{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100581 return SpaceToBatchNdPaddingTest<armnn::DataType::QSymmS16>(workloadFactory,
582 memoryManager,
583 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100584}
585
586LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNhwcUint16Test(
587 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100588 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100589 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100590{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100591 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
592 memoryManager,
593 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100594}
595
596LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNhwcUint16Test(
597 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100599 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100600{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100601 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
602 memoryManager,
603 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100604}
605
606LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNhwcUint16Test(
607 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100608 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100609 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100610{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100611 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
612 memoryManager,
613 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100614}
615
616LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNhwcUint16Test(
617 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100619 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100620{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100621 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
622 memoryManager,
623 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100624}