blob: b4e8a4c85db86085acf36d0531b479d5fb74d0f8 [file] [log] [blame]
Idriss Chaouch98e383e2023-08-28 14:28:31 +01001//
2// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "BroadcastToTestImpl.hpp"
7#include <vector>
8
9#include <armnn/backends/IBackendInternal.hpp>
10#include <armnn/backends/Workload.hpp>
11#include <armnn/backends/WorkloadData.hpp>
12#include <armnn/backends/WorkloadFactory.hpp>
13
14#include <armnnTestUtils/WorkloadTestUtils.hpp>
15#include <armnnTestUtils/TensorCopyUtils.hpp>
16
17#include <armnn/BackendHelper.hpp>
18
19#include <armnnUtils/QuantizeHelper.hpp>
20#include <doctest/doctest.h>
21
22namespace
23{
24template<typename T, std::size_t NumDims>
25LayerTestResult<T, NumDims> BroadcastToTestImpl(
26 armnn::IWorkloadFactory& workloadFactory,
27 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
28 const armnn::ITensorHandleFactory& tensorHandleFactory,
29 armnn::BroadcastToDescriptor descriptor,
30 armnn::TensorInfo& inputInfo,
31 armnn::TensorInfo& outputInfo,
32 std::vector<T>& inputData,
33 std::vector<T>& expectedOutputData)
34{
35
36 CHECK(descriptor.m_BroadcastToShape == outputInfo.GetShape());
37
38 LayerTestResult<T, NumDims> result(outputInfo);
39 std::vector<T> outputActual(outputInfo.GetNumElements());
40
41 armnn::BroadcastToQueueDescriptor queueDescriptor;
42 queueDescriptor.m_Parameters = std::move(descriptor);
43 armnn::WorkloadInfo workloadInfo;
44
45 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo);
46 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
47
48 AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());
49 AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());
50
51 const armnn::BackendId& backend = workloadFactory.GetBackendId();
52 armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend);
53
54 auto workload = workloadFactory.CreateWorkload(armnn::LayerType::BroadcastTo, queueDescriptor, workloadInfo);
55
56 inputHandle->Allocate();
57 outputHandle->Allocate();
58
59 CopyDataToITensorHandle(inputHandle.get(), inputData.data());
60
61 workload->PostAllocationConfigure();
62 ExecuteWorkload(*workload, memoryManager);
63
64 CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
65 return LayerTestResult<T, NumDims>(outputActual,
66 expectedOutputData,
67 outputHandle->GetShape(),
68 outputInfo.GetShape());
69}
70}
71
72template<armnn::DataType ArmnnType, typename T>
73LayerTestResult<T, 1> BroadcastTo1dTest(
74 armnn::IWorkloadFactory& workloadFactory,
75 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
76 const armnn::ITensorHandleFactory& tensorHandleFactory)
77{
78 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape( {1, 4} ));
79
80 float qScale = 1.0f;
81 int32_t qOffset = 0;
82
83 armnn::TensorShape inputShape = { 1, 1 };
84 armnn::TensorShape outputShape = { 1, 4 };
85
86 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
87 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
88
89 std::vector<T> input = armnnUtils::QuantizedVector<T>(
90 {
91 1.f
92 }, qScale, qOffset);
93
94 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
95 {
96 1.f, 1.f,
97 1.f, 1.f
98 }, qScale, qOffset);
99
100 return BroadcastToTestImpl<T, 1>(workloadFactory,
101 memoryManager,
102 tensorHandleFactory,
103 descriptor,
104 inputInfo,
105 outputInfo,
106 input,
107 expectedOutput);
108}
109
110template<armnn::DataType ArmnnType, typename T>
111LayerTestResult<T, 2> BroadcastTo2dAxis0Test(armnn::IWorkloadFactory& workloadFactory,
112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
113 const armnn::ITensorHandleFactory& tensorHandleFactory)
114{
115 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 4, 3 }));
116
117 float qScale = 1.0f;
118 int32_t qOffset = 0;
119
120 armnn::TensorShape inputShape = { 1, 3 };
121 armnn::TensorShape outputShape = { 4, 3 };
122
123 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
124 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
125
126 std::vector<T> input = armnnUtils::QuantizedVector<T>(
127 {
128 0.f, 1.f, 2.f
129 }, qScale, qOffset);
130
131
132 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
133 {
134 0.f, 1.f, 2.f,
135 0.f, 1.f, 2.f,
136 0.f, 1.f, 2.f,
137 0.f, 1.f, 2.f
138 }, qScale, qOffset);
139
140 return BroadcastToTestImpl<T, 2>(workloadFactory,
141 memoryManager,
142 tensorHandleFactory,
143 descriptor,
144 inputInfo,
145 outputInfo,
146 input,
147 expectedOutput);
148}
149
150template<armnn::DataType ArmnnType, typename T>
151LayerTestResult<T, 2> BroadcastTo2dAxis1Test(armnn::IWorkloadFactory& workloadFactory,
152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
153 const armnn::ITensorHandleFactory& tensorHandleFactory)
154{
155 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 3, 4 }));
156
157 float qScale = 1.0f;
158 int32_t qOffset = 0;
159
160 armnn::TensorShape inputShape = { 3, 1 };
161 armnn::TensorShape outputShape = { 3, 4 };
162
163 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
164 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
165
166 std::vector<T> input = armnnUtils::QuantizedVector<T>(
167 {
168 0.f, 1.f, 2.f
169 }, qScale, qOffset);
170
171
172 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
173 {
174 0.f, 0.f, 0.f, 0.f,
175 1.f, 1.f, 1.f, 1.f,
176 2.f, 2.f, 2.f, 2.f
177 }, qScale, qOffset);
178
179 return BroadcastToTestImpl<T, 2>(workloadFactory,
180 memoryManager,
181 tensorHandleFactory,
182 descriptor,
183 inputInfo,
184 outputInfo,
185 input,
186 expectedOutput);
187}
188
189template<armnn::DataType ArmnnType, typename T>
190LayerTestResult<T, 3> BroadcastTo3dAxis0Test(armnn::IWorkloadFactory& workloadFactory,
191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
192 const armnn::ITensorHandleFactory& tensorHandleFactory)
193{
194 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 2, 1, 3 }));
195
196 float qScale = 1.0f;
197 int32_t qOffset = 0;
198
199 armnn::TensorShape inputShape = { 1, 1, 3 };
200 armnn::TensorShape outputShape = { 2, 1, 3 };
201
202 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
203 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
204 std::vector<T> input = armnnUtils::QuantizedVector<T>(
205 {
206 1.1f, 2.12f, 3.3f
207 }, qScale, qOffset);
208
209
210 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
211 {
212 1.1f, 2.12f, 3.3f,
213 1.1f, 2.12f, 3.3f
214 }, qScale, qOffset);
215
216 return BroadcastToTestImpl<T, 3>(workloadFactory,
217 memoryManager,
218 tensorHandleFactory,
219 descriptor,
220 inputInfo,
221 outputInfo,
222 input,
223 expectedOutput);
224}
225
226template<armnn::DataType ArmnnType, typename T>
227LayerTestResult<T, 3> BroadcastTo3dAxis1Test(armnn::IWorkloadFactory& workloadFactory,
228 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
229 const armnn::ITensorHandleFactory& tensorHandleFactory)
230{
231 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 1, 3, 3 }));
232
233 float qScale = 1.0f;
234 int32_t qOffset = 0;
235
236 armnn::TensorShape inputShape = { 1, 1, 3 };
237 armnn::TensorShape outputShape = { 1, 3, 3 };
238
239 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
240 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
241 std::vector<T> input = armnnUtils::QuantizedVector<T>(
242 {
243 1.1f, 2.12f, 3.3f
244 }, qScale, qOffset);
245
246
247 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
248 {
249 1.1f, 2.12f, 3.3f,
250 1.1f, 2.12f, 3.3f,
251 1.1f, 2.12f, 3.3f
252 }, qScale, qOffset);
253
254 return BroadcastToTestImpl<T, 3>(workloadFactory,
255 memoryManager,
256 tensorHandleFactory,
257 descriptor,
258 inputInfo,
259 outputInfo,
260 input,
261 expectedOutput);
262}
263
264template<armnn::DataType ArmnnType, typename T>
265LayerTestResult<T, 3> BroadcastTo3dAxis2Test(armnn::IWorkloadFactory& workloadFactory,
266 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
267 const armnn::ITensorHandleFactory& tensorHandleFactory)
268{
269 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 1, 3, 3 }));
270
271 float qScale = 1.0f;
272 int32_t qOffset = 0;
273
274 armnn::TensorShape inputShape = { 1, 3, 1 };
275 armnn::TensorShape outputShape = { 1, 3, 3 };
276
277 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
278 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
279 std::vector<T> input = armnnUtils::QuantizedVector<T>(
280 {
281 1.1f, 2.12f, 3.3f
282 }, qScale, qOffset);
283
284
285 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
286 {
287 1.1f, 1.1f, 1.1f,
288 2.12f, 2.12f, 2.12f,
289 3.3f, 3.3f, 3.3f
290 }, qScale, qOffset);
291
292 return BroadcastToTestImpl<T, 3>(workloadFactory,
293 memoryManager,
294 tensorHandleFactory,
295 descriptor,
296 inputInfo,
297 outputInfo,
298 input,
299 expectedOutput);
300}
301
302template<armnn::DataType ArmnnType, typename T>
303LayerTestResult<T, 4> BroadcastTo4dTest(armnn::IWorkloadFactory& workloadFactory,
304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
305 const armnn::ITensorHandleFactory& tensorHandleFactory)
306{
307 auto descriptor = armnn::BroadcastToDescriptor(armnn::TensorShape({ 3, 1, 2, 3 }));
308
309 float qScale = 1.0f;
310 int32_t qOffset = 0;
311
312 armnn::TensorShape inputShape = { 1, 1, 1, 3 };
313 armnn::TensorShape outputShape = { 3, 1, 2, 3 };
314
315 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
316 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
317
318 std::vector<T> input = armnnUtils::QuantizedVector<T>(
319 {
320 0.f, 1.f, 2.f
321 }, qScale, qOffset);
322
323
324 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
325 {
326 0.f, 1.f, 2.f,
327 0.f, 1.f, 2.f,
328 0.f, 1.f, 2.f,
329 0.f, 1.f, 2.f,
330 0.f, 1.f, 2.f,
331 0.f, 1.f, 2.f
332 }, qScale, qOffset);
333
334 return BroadcastToTestImpl<T, 4>(workloadFactory,
335 memoryManager,
336 tensorHandleFactory,
337 descriptor,
338 inputInfo,
339 outputInfo,
340 input,
341 expectedOutput);
342}
343
344template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 1>
345BroadcastTo1dTest<armnn::DataType::Float32>(
346 armnn::IWorkloadFactory& workloadFactory,
347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
348 const armnn::ITensorHandleFactory& tensorHandleFactory);
349
350template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
351BroadcastTo2dAxis0Test<armnn::DataType::Float32>(
352 armnn::IWorkloadFactory& workloadFactory,
353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
354 const armnn::ITensorHandleFactory& tensorHandleFactory);
355
356template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
357BroadcastTo2dAxis1Test<armnn::DataType::Float32>(
358 armnn::IWorkloadFactory& workloadFactory,
359 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
360 const armnn::ITensorHandleFactory& tensorHandleFactory);
361
362template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
363BroadcastTo3dAxis0Test<armnn::DataType::Float32>(
364 armnn::IWorkloadFactory& workloadFactory,
365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
366 const armnn::ITensorHandleFactory& tensorHandleFactory);
367
368template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
369BroadcastTo3dAxis1Test<armnn::DataType::Float32>(
370 armnn::IWorkloadFactory& workloadFactory,
371 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
372 const armnn::ITensorHandleFactory& tensorHandleFactory);
373
374template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
375BroadcastTo3dAxis2Test<armnn::DataType::Float32>(
376 armnn::IWorkloadFactory& workloadFactory,
377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
378 const armnn::ITensorHandleFactory& tensorHandleFactory);
379
380template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
381BroadcastTo4dTest<armnn::DataType::Float32>(
382 armnn::IWorkloadFactory& workloadFactory,
383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
384 const armnn::ITensorHandleFactory& tensorHandleFactory);
385
386template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 1>
387BroadcastTo1dTest<armnn::DataType::Float16>(
388 armnn::IWorkloadFactory& workloadFactory,
389 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
390 const armnn::ITensorHandleFactory& tensorHandleFactory);
391
392template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
393BroadcastTo2dAxis0Test<armnn::DataType::Float16>(
394 armnn::IWorkloadFactory& workloadFactory,
395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
396 const armnn::ITensorHandleFactory& tensorHandleFactory);
397
398template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
399BroadcastTo2dAxis1Test<armnn::DataType::Float16>(
400 armnn::IWorkloadFactory& workloadFactory,
401 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
402 const armnn::ITensorHandleFactory& tensorHandleFactory);
403
404template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
405BroadcastTo3dAxis0Test<armnn::DataType::Float16>(
406 armnn::IWorkloadFactory& workloadFactory,
407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
408 const armnn::ITensorHandleFactory& tensorHandleFactory);
409
410template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
411BroadcastTo3dAxis1Test<armnn::DataType::Float16>(
412 armnn::IWorkloadFactory& workloadFactory,
413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
414 const armnn::ITensorHandleFactory& tensorHandleFactory);
415
416template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
417BroadcastTo3dAxis2Test<armnn::DataType::Float16>(
418 armnn::IWorkloadFactory& workloadFactory,
419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
420 const armnn::ITensorHandleFactory& tensorHandleFactory);
421
422template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
423BroadcastTo4dTest<armnn::DataType::Float16>(
424 armnn::IWorkloadFactory& workloadFactory,
425 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
426 const armnn::ITensorHandleFactory& tensorHandleFactory);
427
428template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 1>
429BroadcastTo1dTest<armnn::DataType::QAsymmS8>(
430 armnn::IWorkloadFactory& workloadFactory,
431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
432 const armnn::ITensorHandleFactory& tensorHandleFactory);
433
434template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
435BroadcastTo2dAxis0Test<armnn::DataType::QAsymmS8>(
436 armnn::IWorkloadFactory& workloadFactory,
437 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
438 const armnn::ITensorHandleFactory& tensorHandleFactory);
439
440template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
441BroadcastTo2dAxis1Test<armnn::DataType::QAsymmS8>(
442 armnn::IWorkloadFactory& workloadFactory,
443 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
444 const armnn::ITensorHandleFactory& tensorHandleFactory);
445
446template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
447BroadcastTo3dAxis0Test<armnn::DataType::QAsymmS8>(
448 armnn::IWorkloadFactory& workloadFactory,
449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
450 const armnn::ITensorHandleFactory& tensorHandleFactory);
451
452template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
453BroadcastTo3dAxis1Test<armnn::DataType::QAsymmS8>(
454 armnn::IWorkloadFactory& workloadFactory,
455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
456 const armnn::ITensorHandleFactory& tensorHandleFactory);
457
458template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
459BroadcastTo3dAxis2Test<armnn::DataType::QAsymmS8>(
460 armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
462 const armnn::ITensorHandleFactory& tensorHandleFactory);
463
464template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
465BroadcastTo4dTest<armnn::DataType::QAsymmS8>(
466 armnn::IWorkloadFactory& workloadFactory,
467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
468 const armnn::ITensorHandleFactory& tensorHandleFactory);
469
470template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 1>
471BroadcastTo1dTest<armnn::DataType::QAsymmU8>(
472 armnn::IWorkloadFactory& workloadFactory,
473 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
474 const armnn::ITensorHandleFactory& tensorHandleFactory);
475
476template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
477BroadcastTo2dAxis0Test<armnn::DataType::QAsymmU8>(
478 armnn::IWorkloadFactory& workloadFactory,
479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
480 const armnn::ITensorHandleFactory& tensorHandleFactory);
481
482template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
483BroadcastTo2dAxis1Test<armnn::DataType::QAsymmU8>(
484 armnn::IWorkloadFactory& workloadFactory,
485 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
486 const armnn::ITensorHandleFactory& tensorHandleFactory);
487
488template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
489BroadcastTo3dAxis0Test<armnn::DataType::QAsymmU8>(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
492 const armnn::ITensorHandleFactory& tensorHandleFactory);
493
494template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
495BroadcastTo3dAxis1Test<armnn::DataType::QAsymmU8>(
496 armnn::IWorkloadFactory& workloadFactory,
497 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
498 const armnn::ITensorHandleFactory& tensorHandleFactory);
499
500template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
501BroadcastTo3dAxis2Test<armnn::DataType::QAsymmU8>(
502 armnn::IWorkloadFactory& workloadFactory,
503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
504 const armnn::ITensorHandleFactory& tensorHandleFactory);
505
506template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
507BroadcastTo4dTest<armnn::DataType::QAsymmU8>(
508 armnn::IWorkloadFactory& workloadFactory,
509 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
510 const armnn::ITensorHandleFactory& tensorHandleFactory);
511
512template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 1>
513BroadcastTo1dTest<armnn::DataType::QSymmS8>(
514 armnn::IWorkloadFactory& workloadFactory,
515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
516 const armnn::ITensorHandleFactory& tensorHandleFactory);
517
518template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 2>
519BroadcastTo2dAxis0Test<armnn::DataType::QSymmS8>(
520 armnn::IWorkloadFactory& workloadFactory,
521 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
522 const armnn::ITensorHandleFactory& tensorHandleFactory);
523
524template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 2>
525BroadcastTo2dAxis1Test<armnn::DataType::QSymmS8>(
526 armnn::IWorkloadFactory& workloadFactory,
527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
528 const armnn::ITensorHandleFactory& tensorHandleFactory);
529
530template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 3>
531BroadcastTo3dAxis0Test<armnn::DataType::QSymmS8>(
532 armnn::IWorkloadFactory& workloadFactory,
533 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
534 const armnn::ITensorHandleFactory& tensorHandleFactory);
535
536template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 3>
537BroadcastTo3dAxis1Test<armnn::DataType::QSymmS8>(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
540 const armnn::ITensorHandleFactory& tensorHandleFactory);
541
542template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 3>
543BroadcastTo3dAxis2Test<armnn::DataType::QSymmS8>(
544 armnn::IWorkloadFactory& workloadFactory,
545 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
546 const armnn::ITensorHandleFactory& tensorHandleFactory);
547
548template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 4>
549BroadcastTo4dTest<armnn::DataType::QSymmS8>(
550 armnn::IWorkloadFactory& workloadFactory,
551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
552 const armnn::ITensorHandleFactory& tensorHandleFactory);
553
554template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 1>
555BroadcastTo1dTest<armnn::DataType::QSymmS16>(
556 armnn::IWorkloadFactory& workloadFactory,
557 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
558 const armnn::ITensorHandleFactory& tensorHandleFactory);
559
560template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
561BroadcastTo2dAxis0Test<armnn::DataType::QSymmS16>(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
564 const armnn::ITensorHandleFactory& tensorHandleFactory);
565
566template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
567BroadcastTo2dAxis1Test<armnn::DataType::QSymmS16>(
568 armnn::IWorkloadFactory& workloadFactory,
569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
570 const armnn::ITensorHandleFactory& tensorHandleFactory);
571
572template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
573BroadcastTo3dAxis0Test<armnn::DataType::QSymmS16>(
574 armnn::IWorkloadFactory& workloadFactory,
575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
576 const armnn::ITensorHandleFactory& tensorHandleFactory);
577
578template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
579BroadcastTo3dAxis1Test<armnn::DataType::QSymmS16>(
580 armnn::IWorkloadFactory& workloadFactory,
581 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
582 const armnn::ITensorHandleFactory& tensorHandleFactory);
583
584template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
585BroadcastTo3dAxis2Test<armnn::DataType::QSymmS16>(
586 armnn::IWorkloadFactory& workloadFactory,
587 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
588 const armnn::ITensorHandleFactory& tensorHandleFactory);
589
590template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
591BroadcastTo4dTest<armnn::DataType::QSymmS16>(
592 armnn::IWorkloadFactory& workloadFactory,
593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
594 const armnn::ITensorHandleFactory& tensorHandleFactory);
595
596template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 1>
597BroadcastTo1dTest<armnn::DataType::Signed32>(
598 armnn::IWorkloadFactory& workloadFactory,
599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
600 const armnn::ITensorHandleFactory& tensorHandleFactory);
601
602template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
603BroadcastTo2dAxis0Test<armnn::DataType::Signed32>(
604 armnn::IWorkloadFactory& workloadFactory,
605 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
606 const armnn::ITensorHandleFactory& tensorHandleFactory);
607
608template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
609BroadcastTo2dAxis1Test<armnn::DataType::Signed32>(
610 armnn::IWorkloadFactory& workloadFactory,
611 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
612 const armnn::ITensorHandleFactory& tensorHandleFactory);
613
614template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
615BroadcastTo3dAxis0Test<armnn::DataType::Signed32>(
616 armnn::IWorkloadFactory& workloadFactory,
617 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
618 const armnn::ITensorHandleFactory& tensorHandleFactory);
619
620template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
621BroadcastTo3dAxis1Test<armnn::DataType::Signed32>(
622 armnn::IWorkloadFactory& workloadFactory,
623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
624 const armnn::ITensorHandleFactory& tensorHandleFactory);
625
626template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
627BroadcastTo3dAxis2Test<armnn::DataType::Signed32>(
628 armnn::IWorkloadFactory& workloadFactory,
629 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
630 const armnn::ITensorHandleFactory& tensorHandleFactory);
631
632template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 4>
633BroadcastTo4dTest<armnn::DataType::Signed32>(
634 armnn::IWorkloadFactory& workloadFactory,
635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
636 const armnn::ITensorHandleFactory& tensorHandleFactory);