blob: c61da26bb28dc812946e0feed8fb94f97cebee19 [file] [log] [blame]
Teresa Charlin79a06a52023-07-13 17:16:45 +01001//
2// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "TileTestImpl.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
21namespace
22{
23template<typename T, std::size_t NumDims>
24LayerTestResult<T, NumDims> TileTestImpl(
25 armnn::IWorkloadFactory& workloadFactory,
26 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
27 const armnn::ITensorHandleFactory& tensorHandleFactory,
28 armnn::TileDescriptor descriptor,
29 armnn::TensorInfo& inputInfo,
30 armnn::TensorInfo& outputInfo,
31 std::vector<T>& inputData,
32 std::vector<T>& expectedOutputData)
33{
34
35 LayerTestResult<T, NumDims> result(outputInfo);
36 std::vector<T> outputActual(outputInfo.GetNumElements());
37
38 armnn::TileQueueDescriptor queueDescriptor;
39 queueDescriptor.m_Parameters = std::move(descriptor);
40 armnn::WorkloadInfo workloadInfo;
41
42 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo);
43 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
44
45 AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());
46 AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());
47
48 const armnn::BackendId& backend = workloadFactory.GetBackendId();
49 armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend);
50
51 auto workload = workloadFactory.CreateWorkload(armnn::LayerType::Tile, queueDescriptor, workloadInfo);
52
53 inputHandle->Allocate();
54 outputHandle->Allocate();
55
56 CopyDataToITensorHandle(inputHandle.get(), inputData.data());
57
58 workload->PostAllocationConfigure();
59 ExecuteWorkload(*workload, memoryManager);
60
61 CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
62 return LayerTestResult<T, NumDims>(outputActual,
63 expectedOutputData,
64 outputHandle->GetShape(),
65 outputInfo.GetShape());
66}
67}
68
69template<armnn::DataType ArmnnType, typename T>
70LayerTestResult<T, 1> Tile1dTest(
71 armnn::IWorkloadFactory& workloadFactory,
72 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
73 const armnn::ITensorHandleFactory& tensorHandleFactory)
74{
75 auto descriptor = armnn::TileDescriptor( std::vector<uint32_t>{ 3 } );
76
77 float qScale = 1.0f;
78 int32_t qOffset = 0;
79
80 armnn::TensorShape inputShape = { 3 };
81 armnn::TensorShape outputShape = { 9 };
82
83 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
84 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
85
86 std::vector<T> input = armnnUtils::QuantizedVector<T>(
87 {
88 0.f, 1.f, 2.f
89 }, qScale, qOffset);
90
91 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
92 {
93 0.f, 1.f, 2.f,
94 0.f, 1.f, 2.f,
95 0.f, 1.f, 2.f
96 }, qScale, qOffset);
97
98 return TileTestImpl<T, 1>(workloadFactory,
99 memoryManager,
100 tensorHandleFactory,
101 descriptor,
102 inputInfo,
103 outputInfo,
104 input,
105 expectedOutput);
106}
107
108template<armnn::DataType ArmnnType, typename T>
109LayerTestResult<T, 2> Tile2dTest(armnn::IWorkloadFactory& workloadFactory,
110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
111 const armnn::ITensorHandleFactory& tensorHandleFactory)
112{
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100113 auto descriptor = armnn::TileDescriptor(std::vector<uint32_t>{ 2, 5 });
Teresa Charlin79a06a52023-07-13 17:16:45 +0100114
115 float qScale = 1.0f;
116 int32_t qOffset = 0;
117
118 armnn::TensorShape inputShape = { 2, 3 };
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100119 armnn::TensorShape outputShape = { 4, 15 };
Teresa Charlin79a06a52023-07-13 17:16:45 +0100120
121 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
122 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
123
124 std::vector<T> input = armnnUtils::QuantizedVector<T>(
125 {
126 0.f, 1.f, 2.f,
127 3.f, 4.f, 5.f
128 }, qScale, qOffset);
129
130
131 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
132 {
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100133 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f,
134 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f,
Teresa Charlin79a06a52023-07-13 17:16:45 +0100135
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100136 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f, 0.f, 1.f, 2.f,
137 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f, 3.f, 4.f, 5.f
Teresa Charlin79a06a52023-07-13 17:16:45 +0100138 }, qScale, qOffset);
139
140 return TileTestImpl<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, 3> Tile3dTest(armnn::IWorkloadFactory& workloadFactory,
152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
153 const armnn::ITensorHandleFactory& tensorHandleFactory)
154{
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100155 auto descriptor = armnn::TileDescriptor(std::vector<uint32_t>{ 1, 5, 5 });
Teresa Charlin79a06a52023-07-13 17:16:45 +0100156
157 float qScale = 1.0f;
158 int32_t qOffset = 0;
159
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100160 armnn::TensorShape inputShape = { 2, 2, 2 };
161 armnn::TensorShape outputShape = { 2, 10, 10 };
Teresa Charlin79a06a52023-07-13 17:16:45 +0100162
163 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
164 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
165 std::vector<T> input = armnnUtils::QuantizedVector<T>(
166 {
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100167 1.1f, 2.12f,
168 3.3f, 4.12234f,
Teresa Charlin79a06a52023-07-13 17:16:45 +0100169
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100170 1.1f, 2.12f,
171 3.3f, 4.12234f,
Teresa Charlin79a06a52023-07-13 17:16:45 +0100172 }, qScale, qOffset);
173
174
175 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
176 {
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100177 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
178 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
179 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
180 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
181 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
182 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
183 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
184 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
185 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
186 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
Teresa Charlin79a06a52023-07-13 17:16:45 +0100187
Cian McGriskin3b3dcbf2023-07-26 11:52:47 +0100188 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
189 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
190 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
191 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
192 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
193 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
194 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
195 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f,
196 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f, 1.1f, 2.12f,
197 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f, 3.3f, 4.12234f
Teresa Charlin79a06a52023-07-13 17:16:45 +0100198 }, qScale, qOffset);
199
200 return TileTestImpl<T, 3>(workloadFactory,
201 memoryManager,
202 tensorHandleFactory,
203 descriptor,
204 inputInfo,
205 outputInfo,
206 input,
207 expectedOutput);
208}
209
210template<armnn::DataType ArmnnType, typename T>
211LayerTestResult<T, 4> Tile4dTest(armnn::IWorkloadFactory& workloadFactory,
212 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
213 const armnn::ITensorHandleFactory& tensorHandleFactory)
214{
215 auto descriptor = armnn::TileDescriptor(std::vector<uint32_t>{ 2, 1, 1, 1 });
216
217 float qScale = 1.0f;
218 int32_t qOffset = 0;
219
220 armnn::TensorShape inputShape = { 2, 2, 2, 3};
221 armnn::TensorShape outputShape = { 4, 2, 2, 3};
222
223 armnn::TensorInfo inputInfo(inputShape, ArmnnType);
224 armnn::TensorInfo outputInfo(outputShape, ArmnnType);
225
226 std::vector<T> input = armnnUtils::QuantizedVector<T>(
227 {
228 0.f, 1.f, 2.f,
229 3.f, 4.f, 5.f,
230
231 6.f, 7.f, 8.f,
232 9.f, 10.f, 11.f,
233
234 0.f, 1.f, 2.f,
235 3.f, 4.f, 5.f,
236
237 6.f, 7.f, 8.f,
238 9.f, 10.f, 11.f
239 }, qScale, qOffset);
240
241
242 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(
243 {
244 0.f, 1.f, 2.f,
245 3.f, 4.f, 5.f,
246
247 6.f, 7.f, 8.f,
248 9.f, 10.f, 11.f,
249
250 0.f, 1.f, 2.f,
251 3.f, 4.f, 5.f,
252
253 6.f, 7.f, 8.f,
254 9.f, 10.f, 11.f,
255
256 0.f, 1.f, 2.f,
257 3.f, 4.f, 5.f,
258
259 6.f, 7.f, 8.f,
260 9.f, 10.f, 11.f,
261
262 0.f, 1.f, 2.f,
263 3.f, 4.f, 5.f,
264
265 6.f, 7.f, 8.f,
266 9.f, 10.f, 11.f
267 }, qScale, qOffset);
268
269 return TileTestImpl<T, 4>(workloadFactory,
270 memoryManager,
271 tensorHandleFactory,
272 descriptor,
273 inputInfo,
274 outputInfo,
275 input,
276 expectedOutput);
277}
278
279template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 1>
280Tile1dTest<armnn::DataType::Float32>(
281 armnn::IWorkloadFactory& workloadFactory,
282 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
283 const armnn::ITensorHandleFactory& tensorHandleFactory);
284
285template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
286Tile2dTest<armnn::DataType::Float32>(
287 armnn::IWorkloadFactory& workloadFactory,
288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
289 const armnn::ITensorHandleFactory& tensorHandleFactory);
290
291template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
292Tile3dTest<armnn::DataType::Float32>(
293 armnn::IWorkloadFactory& workloadFactory,
294 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
295 const armnn::ITensorHandleFactory& tensorHandleFactory);
296
297template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
298Tile4dTest<armnn::DataType::Float32>(
299 armnn::IWorkloadFactory& workloadFactory,
300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
301 const armnn::ITensorHandleFactory& tensorHandleFactory);
302
303template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 1>
304Tile1dTest<armnn::DataType::Float16>(
305 armnn::IWorkloadFactory& workloadFactory,
306 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
307 const armnn::ITensorHandleFactory& tensorHandleFactory);
308
309template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
310Tile2dTest<armnn::DataType::Float16>(
311 armnn::IWorkloadFactory& workloadFactory,
312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
313 const armnn::ITensorHandleFactory& tensorHandleFactory);
314
315template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
316Tile3dTest<armnn::DataType::Float16>(
317 armnn::IWorkloadFactory& workloadFactory,
318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
319 const armnn::ITensorHandleFactory& tensorHandleFactory);
320
321template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
322Tile4dTest<armnn::DataType::Float16>(
323 armnn::IWorkloadFactory& workloadFactory,
324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
325 const armnn::ITensorHandleFactory& tensorHandleFactory);
326
327template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 1>
328Tile1dTest<armnn::DataType::QAsymmS8>(
329 armnn::IWorkloadFactory& workloadFactory,
330 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
331 const armnn::ITensorHandleFactory& tensorHandleFactory);
332
333template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
334Tile2dTest<armnn::DataType::QAsymmS8>(
335 armnn::IWorkloadFactory& workloadFactory,
336 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
337 const armnn::ITensorHandleFactory& tensorHandleFactory);
338
339template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
340Tile3dTest<armnn::DataType::QAsymmS8>(
341 armnn::IWorkloadFactory& workloadFactory,
342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
343 const armnn::ITensorHandleFactory& tensorHandleFactory);
344
345template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
346Tile4dTest<armnn::DataType::QAsymmS8>(
347 armnn::IWorkloadFactory& workloadFactory,
348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
349 const armnn::ITensorHandleFactory& tensorHandleFactory);
350
351template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 1>
352Tile1dTest<armnn::DataType::QAsymmU8>(
353 armnn::IWorkloadFactory& workloadFactory,
354 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
355 const armnn::ITensorHandleFactory& tensorHandleFactory);
356
357template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
358Tile2dTest<armnn::DataType::QAsymmU8>(
359 armnn::IWorkloadFactory& workloadFactory,
360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
361 const armnn::ITensorHandleFactory& tensorHandleFactory);
362
363template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
364Tile3dTest<armnn::DataType::QAsymmU8>(
365 armnn::IWorkloadFactory& workloadFactory,
366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
367 const armnn::ITensorHandleFactory& tensorHandleFactory);
368
369template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
370Tile4dTest<armnn::DataType::QAsymmU8>(
371 armnn::IWorkloadFactory& workloadFactory,
372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
373 const armnn::ITensorHandleFactory& tensorHandleFactory);
374
375template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 1>
376Tile1dTest<armnn::DataType::QSymmS8>(
377 armnn::IWorkloadFactory& workloadFactory,
378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
379 const armnn::ITensorHandleFactory& tensorHandleFactory);
380
381template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 2>
382Tile2dTest<armnn::DataType::QSymmS8>(
383 armnn::IWorkloadFactory& workloadFactory,
384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
385 const armnn::ITensorHandleFactory& tensorHandleFactory);
386
387template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 3>
388Tile3dTest<armnn::DataType::QSymmS8>(
389 armnn::IWorkloadFactory& workloadFactory,
390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
391 const armnn::ITensorHandleFactory& tensorHandleFactory);
392
393template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS8>, 4>
394Tile4dTest<armnn::DataType::QSymmS8>(
395 armnn::IWorkloadFactory& workloadFactory,
396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
397 const armnn::ITensorHandleFactory& tensorHandleFactory);
398
399template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 1>
400Tile1dTest<armnn::DataType::QSymmS16>(
401 armnn::IWorkloadFactory& workloadFactory,
402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
403 const armnn::ITensorHandleFactory& tensorHandleFactory);
404
405template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
406Tile2dTest<armnn::DataType::QSymmS16>(
407 armnn::IWorkloadFactory& workloadFactory,
408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
409 const armnn::ITensorHandleFactory& tensorHandleFactory);
410
411template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
412Tile3dTest<armnn::DataType::QSymmS16>(
413 armnn::IWorkloadFactory& workloadFactory,
414 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
415 const armnn::ITensorHandleFactory& tensorHandleFactory);
416
417template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
418Tile4dTest<armnn::DataType::QSymmS16>(
419 armnn::IWorkloadFactory& workloadFactory,
420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
421 const armnn::ITensorHandleFactory& tensorHandleFactory);
422
423template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 1>
424Tile1dTest<armnn::DataType::Signed32>(
425 armnn::IWorkloadFactory& workloadFactory,
426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
427 const armnn::ITensorHandleFactory& tensorHandleFactory);
428
429template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
430Tile2dTest<armnn::DataType::Signed32>(
431 armnn::IWorkloadFactory& workloadFactory,
432 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
433 const armnn::ITensorHandleFactory& tensorHandleFactory);
434
435template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
436Tile3dTest<armnn::DataType::Signed32>(
437 armnn::IWorkloadFactory& workloadFactory,
438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
439 const armnn::ITensorHandleFactory& tensorHandleFactory);
440
441template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 4>
442Tile4dTest<armnn::DataType::Signed32>(
443 armnn::IWorkloadFactory& workloadFactory,
444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
445 const armnn::ITensorHandleFactory& tensorHandleFactory);
446