blob: fe6aa70b8794a41469cb68f5232e2860e0cf7d55 [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
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
Sadik Armagana097d2a2021-11-24 15:47:28 +000017#include <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
72 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateSpaceToBatchNd(descriptor, info);
73
74 inputHandle->Allocate();
75 outputHandle->Allocate();
76
Sadik Armagan483c8112021-06-01 09:24:52 +010077 CopyDataToITensorHandle(inputHandle.get(), input.data());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010078
79 workload->Execute();
80
Sadik Armagan483c8112021-06-01 09:24:52 +010081 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010082
Sadik Armagan483c8112021-06-01 09:24:52 +010083 return LayerTestResult<T, 4>(actualOutput,
84 expectedOutput,
85 outputHandle->GetShape(),
86 outputTensorInfo.GetShape());
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010087}
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 Armagan89de3b42020-08-28 10:38:53 +010093 const 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 Armagan89de3b42020-08-28 10:38:53 +0100129 const 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 Armagan89de3b42020-08-28 10:38:53 +0100170 const 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 Armagan89de3b42020-08-28 10:38:53 +0100212 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100258 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100270 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100282 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100294 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100307 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100317 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100327 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100337 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100347 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100357 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100367 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100377 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100387 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100397 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100407 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100417 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100427 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100437 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100447 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100457 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100467 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100477 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100487 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100497 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100507 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100517 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100527 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100537 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100547 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100557 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100567 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100577 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100587 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100597 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100607 const 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,
Sadik Armagan89de3b42020-08-28 10:38:53 +0100617 const 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}