blob: 3682e9d4880d9a9c5ec92164e641d9c85d34da58 [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
Aron Virginas-Tar48623a02019-10-22 10:00:28 +01008#include <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
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010014#include <backendsCommon/test/TensorCopyUtils.hpp>
15#include <backendsCommon/test/WorkloadTestUtils.hpp>
16
17#include <test/TensorHelpers.hpp>
18
19namespace
20{
21
22template<typename T>
23LayerTestResult<T, 4> SpaceToBatchNdTestImpl(
24 armnn::IWorkloadFactory& workloadFactory,
25 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan714fe5b2020-08-27 12:46:36 +010026 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
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010061 boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputTensorInfo,
62 armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset));
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010063
64 LayerTestResult<T, 4> ret(outputTensorInfo);
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010065 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
66 armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset));
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010067
Sadik Armagan714fe5b2020-08-27 12:46:36 +010068 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory->CreateTensorHandle(inputTensorInfo);
69 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory->CreateTensorHandle(outputTensorInfo);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010070
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
89template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
90LayerTestResult<T, 4> SpaceToBatchNdSimpleTest(
91 armnn::IWorkloadFactory& workloadFactory,
92 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan714fe5b2020-08-27 12:46:36 +010093 armnn::ITensorHandleFactory* tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010094 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100121 workloadFactory, memoryManager, tensorHandleFactory,
122 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100123}
124
125template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
126LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsTest(
127 armnn::IWorkloadFactory& workloadFactory,
128 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100129 armnn::ITensorHandleFactory* tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100130 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100162 workloadFactory, memoryManager, tensorHandleFactory,
163 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100164}
165
166template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
167LayerTestResult<T, 4> SpaceToBatchNdMultiBlockTest(
168 armnn::IWorkloadFactory& workloadFactory,
169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100170 armnn::ITensorHandleFactory* tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100171 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100204 workloadFactory, memoryManager, tensorHandleFactory,
205 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100206}
207
208template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
209LayerTestResult<T, 4> SpaceToBatchNdPaddingTest(
210 armnn::IWorkloadFactory& workloadFactory,
211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100212 armnn::ITensorHandleFactory* tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100213 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>(
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100250 workloadFactory, memoryManager, tensorHandleFactory,
251 inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100252}
253
254template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
255LayerTestResult<T, 4> SpaceToBatchNdSimpleNhwcTest(
256 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
258 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100259{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100260 return SpaceToBatchNdSimpleTest<ArmnnType>(workloadFactory,
261 memoryManager,
262 tensorHandleFactory,
263 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100264}
265
266template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
267LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsNhwcTest(
268 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
270 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100271{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100272 return SpaceToBatchNdMultiChannelsTest<ArmnnType>(workloadFactory,
273 memoryManager,
274 tensorHandleFactory,
275 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100276}
277
278template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
279LayerTestResult<T, 4> SpaceToBatchNdMultiBlockNhwcTest(
280 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
282 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100283{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100284 return SpaceToBatchNdMultiBlockTest<ArmnnType>(workloadFactory,
285 memoryManager,
286 tensorHandleFactory,
287 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100288}
289
290template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
291LayerTestResult<T, 4> SpaceToBatchNdPaddingNhwcTest(
292 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100293 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
294 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100295{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100296 return SpaceToBatchNdPaddingTest<ArmnnType>(workloadFactory,
297 memoryManager,
298 tensorHandleFactory,
299 armnn::DataLayout::NHWC);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100300}
301
302} // anonymous namespace
303
304LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
305 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100306 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
307 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100308{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100309 return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory,
310 memoryManager,
311 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100312}
313
314LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
315 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
317 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100318{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100319 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory,
320 memoryManager,
321 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100322}
323
324LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
325 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
327 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100328{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100329 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory,
330 memoryManager,
331 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100332}
333
334LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
335 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100336 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
337 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100338{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100339 return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory,
340 memoryManager,
341 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100342}
343
Matthew Jackson9bff1442019-09-12 09:08:23 +0100344LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleFloat16Test(
345 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
347 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100348{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100349 return SpaceToBatchNdSimpleTest<armnn::DataType::Float16>(workloadFactory,
350 memoryManager,
351 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100352}
353
354LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsFloat16Test(
355 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
357 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100358{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100359 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float16>(workloadFactory,
360 memoryManager,
361 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100362}
363
364LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockFloat16Test(
365 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
367 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100368{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100369 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float16>(workloadFactory,
370 memoryManager,
371 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100372}
373
374LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingFloat16Test(
375 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
377 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100378{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100379 return SpaceToBatchNdPaddingTest<armnn::DataType::Float16>(workloadFactory,
380 memoryManager,
381 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100382}
383
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100384LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
385 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
387 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100388{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100389 return SpaceToBatchNdSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory,
390 memoryManager,
391 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100392}
393
394LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
395 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
397 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100398{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100399 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QAsymmU8>(workloadFactory,
400 memoryManager,
401 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100402}
403
404LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
405 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
407 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100408{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100409 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QAsymmU8>(workloadFactory,
410 memoryManager,
411 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100412}
413
414LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
415 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
417 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100418{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100419 return SpaceToBatchNdPaddingTest<armnn::DataType::QAsymmU8>(workloadFactory,
420 memoryManager,
421 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100422}
423
424LayerTestResult<float, 4> SpaceToBatchNdSimpleNhwcFloat32Test(
425 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
427 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100428{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100429 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float32>(workloadFactory,
430 memoryManager,
431 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100432}
433
434LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNhwcFloat32Test(
435 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
437 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100438{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100439 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float32>(workloadFactory,
440 memoryManager,
441 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100442}
443
444LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNhwcFloat32Test(
445 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
447 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100448{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100449 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float32>(workloadFactory,
450 memoryManager,
451 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100452}
453
454LayerTestResult<float, 4> SpaceToBatchNdPaddingNhwcFloat32Test(
455 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
457 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100458{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100459 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float32>(workloadFactory,
460 memoryManager,
461 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100462}
463
Matthew Jackson9bff1442019-09-12 09:08:23 +0100464LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleNhwcFloat16Test(
465 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
467 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100468{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100469 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float16>(workloadFactory,
470 memoryManager,
471 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100472}
473
474LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsNhwcFloat16Test(
475 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100476 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
477 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100478{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100479 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float16>(workloadFactory,
480 memoryManager,
481 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100482}
483
484LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockNhwcFloat16Test(
485 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
487 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100488{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100489 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float16>(workloadFactory,
490 memoryManager,
491 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100492}
493
494LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingNhwcFloat16Test(
495 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
497 armnn::ITensorHandleFactory* tensorHandleFactory)
Matthew Jackson9bff1442019-09-12 09:08:23 +0100498{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100499 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float16>(workloadFactory,
500 memoryManager,
501 tensorHandleFactory);
Matthew Jackson9bff1442019-09-12 09:08:23 +0100502}
503
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100504LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNhwcUint8Test(
505 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100506 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
507 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100508{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100509 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
510 memoryManager,
511 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100512}
513
514LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNhwcUint8Test(
515 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100516 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
517 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100518{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100519 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
520 memoryManager,
521 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100522}
523
524LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNhwcUint8Test(
525 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
527 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100528{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100529 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
530 memoryManager,
531 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100532}
533
534LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNhwcUint8Test(
535 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100536 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
537 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100538{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100539 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory,
540 memoryManager,
541 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100542}
543
544LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
545 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
547 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100548{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100549 return SpaceToBatchNdSimpleTest<armnn::DataType::QSymmS16>(workloadFactory,
550 memoryManager,
551 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100552}
553
554LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
555 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
557 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100558{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100559 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QSymmS16>(workloadFactory,
560 memoryManager,
561 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100562}
563
564LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
565 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100566 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
567 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100568{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100569 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QSymmS16>(workloadFactory,
570 memoryManager,
571 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100572}
573
574LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
575 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100576 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
577 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100578{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100579 return SpaceToBatchNdPaddingTest<armnn::DataType::QSymmS16>(workloadFactory,
580 memoryManager,
581 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100582}
583
584LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNhwcUint16Test(
585 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
587 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100588{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100589 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
590 memoryManager,
591 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100592}
593
594LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNhwcUint16Test(
595 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100596 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
597 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100598{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100599 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
600 memoryManager,
601 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100602}
603
604LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNhwcUint16Test(
605 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
607 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100608{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100609 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
610 memoryManager,
611 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100612}
613
614LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNhwcUint16Test(
615 armnn::IWorkloadFactory& workloadFactory,
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100616 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
617 armnn::ITensorHandleFactory* tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100618{
Sadik Armagan714fe5b2020-08-27 12:46:36 +0100619 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QSymmS16>(workloadFactory,
620 memoryManager,
621 tensorHandleFactory);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100622}