• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "GatherTestImpl.hpp"
7 
8 #include <ResolveType.hpp>
9 
10 
11 #include <backendsCommon/test/TensorCopyUtils.hpp>
12 #include <backendsCommon/test/WorkloadTestUtils.hpp>
13 
14 #include <test/TensorHelpers.hpp>
15 
16 namespace
17 {
18 
19 template <armnn::DataType ArmnnType,
20           typename T = armnn::ResolveType<ArmnnType>,
21           size_t ParamsDim,
22           size_t IndicesDim,
23           size_t OutputDim>
GatherTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::TensorInfo & paramsInfo,const armnn::TensorInfo & indicesInfo,const armnn::TensorInfo & outputInfo,const std::vector<T> & paramsData,const std::vector<int32_t> & indicesData,const std::vector<T> & outputData)24 LayerTestResult<T, OutputDim> GatherTestImpl(
25     armnn::IWorkloadFactory& workloadFactory,
26     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
27     const armnn::ITensorHandleFactory& tensorHandleFactory,
28     const armnn::TensorInfo& paramsInfo,
29     const armnn::TensorInfo& indicesInfo,
30     const armnn::TensorInfo& outputInfo,
31     const std::vector<T>& paramsData,
32     const std::vector<int32_t>& indicesData,
33     const std::vector<T>& outputData)
34 {
35     IgnoreUnused(memoryManager);
36     auto params  = MakeTensor<T, ParamsDim>(paramsInfo, paramsData);
37     auto indices = MakeTensor<int32_t, IndicesDim>(indicesInfo, indicesData);
38 
39     LayerTestResult<T, OutputDim> result(outputInfo);
40     result.outputExpected = MakeTensor<T, OutputDim>(outputInfo, outputData);
41 
42     std::unique_ptr<armnn::ITensorHandle> paramsHandle = tensorHandleFactory.CreateTensorHandle(paramsInfo);
43     std::unique_ptr<armnn::ITensorHandle> indicesHandle = tensorHandleFactory.CreateTensorHandle(indicesInfo);
44     std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
45 
46     armnn::GatherQueueDescriptor data;
47     armnn::WorkloadInfo info;
48     AddInputToWorkload(data,  info, paramsInfo, paramsHandle.get());
49     AddInputToWorkload(data, info, indicesInfo, indicesHandle.get());
50     AddOutputToWorkload(data, info, outputInfo, outputHandle.get());
51 
52     std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateGather(data, info);
53 
54     paramsHandle->Allocate();
55     indicesHandle->Allocate();
56     outputHandle->Allocate();
57 
58     CopyDataToITensorHandle(paramsHandle.get(), params.origin());
59     CopyDataToITensorHandle(indicesHandle.get(), indices.origin());
60 
61     workload->Execute();
62 
63     CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
64 
65     return result;
66 }
67 
68 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
69 struct GatherTestHelper
70 {
Gather1dParamsTestImpl__anond35e43080111::GatherTestHelper71     static LayerTestResult<T, 1> Gather1dParamsTestImpl(
72         armnn::IWorkloadFactory& workloadFactory,
73         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
74         const armnn::ITensorHandleFactory& tensorHandleFactory)
75     {
76         armnn::TensorInfo paramsInfo({ 8 }, ArmnnType);
77         armnn::TensorInfo indicesInfo({ 4 }, armnn::DataType::Signed32);
78         armnn::TensorInfo outputInfo({ 4 }, ArmnnType);
79 
80         if (armnn::IsQuantizedType<T>())
81         {
82             paramsInfo.SetQuantizationScale(1.0f);
83             paramsInfo.SetQuantizationOffset(1);
84             outputInfo.SetQuantizationScale(1.0f);
85             outputInfo.SetQuantizationOffset(1);
86         }
87         const std::vector<T> params         = std::vector<T>({ 1, 2, 3, 4, 5, 6, 7, 8 });
88         const std::vector<int32_t> indices  = std::vector<int32_t>({ 0, 2, 1, 5 });
89         const std::vector<T> expectedOutput = std::vector<T>({ 1, 3, 2, 6 });
90 
91         return GatherTestImpl<ArmnnType, T, 1, 1, 1>(
92             workloadFactory,
93             memoryManager,
94             tensorHandleFactory,
95             paramsInfo,
96             indicesInfo,
97             outputInfo,
98             params,
99             indices,
100             expectedOutput);
101     }
102 
GatherMultiDimParamsTestImpl__anond35e43080111::GatherTestHelper103     static LayerTestResult<T, 2> GatherMultiDimParamsTestImpl(
104         armnn::IWorkloadFactory& workloadFactory,
105         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
106         const armnn::ITensorHandleFactory& tensorHandleFactory)
107     {
108         armnn::TensorInfo paramsInfo({ 5, 2 }, ArmnnType);
109         armnn::TensorInfo indicesInfo({ 3 }, armnn::DataType::Signed32);
110         armnn::TensorInfo outputInfo({ 3, 2 }, ArmnnType);
111 
112         if (armnn::IsQuantizedType<T>())
113         {
114             paramsInfo.SetQuantizationScale(1.0f);
115             paramsInfo.SetQuantizationOffset(1);
116             outputInfo.SetQuantizationScale(1.0f);
117             outputInfo.SetQuantizationOffset(1);
118         }
119 
120         const std::vector<T> params         = std::vector<T>({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
121         const std::vector<int32_t> indices  = std::vector<int32_t>({ 1, 3, 4 });
122         const std::vector<T> expectedOutput = std::vector<T>({ 3, 4, 7, 8, 9, 10 });
123 
124         return GatherTestImpl<ArmnnType, T, 2, 1, 2>(
125             workloadFactory,
126             memoryManager,
127             tensorHandleFactory,
128             paramsInfo,
129             indicesInfo,
130             outputInfo,
131             params,
132             indices,
133             expectedOutput);
134     }
135 
GatherMultiDimParamsMultiDimIndicesTestImpl__anond35e43080111::GatherTestHelper136     static LayerTestResult<T, 4> GatherMultiDimParamsMultiDimIndicesTestImpl(
137         armnn::IWorkloadFactory& workloadFactory,
138         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
139         const armnn::ITensorHandleFactory& tensorHandleFactory)
140     {
141         armnn::TensorInfo paramsInfo({ 3, 2, 3}, ArmnnType);
142         armnn::TensorInfo indicesInfo({ 2, 3 }, armnn::DataType::Signed32);
143         armnn::TensorInfo outputInfo({ 2, 3, 2, 3 }, ArmnnType);
144 
145         if (armnn::IsQuantizedType<T>())
146         {
147             paramsInfo.SetQuantizationScale(1.0f);
148             paramsInfo.SetQuantizationOffset(1);
149             outputInfo.SetQuantizationScale(1.0f);
150             outputInfo.SetQuantizationOffset(1);
151         }
152 
153         const std::vector<T> params =
154         {
155             1,  2,  3,
156             4,  5,  6,
157 
158             7,  8,  9,
159             10, 11, 12,
160 
161             13, 14, 15,
162             16, 17, 18
163         };
164 
165         const std::vector<int32_t> indices = { 1, 2, 1, 2, 1, 0 };
166 
167         const std::vector<T> expectedOutput =
168         {
169             7,  8,  9,
170             10, 11, 12,
171             13, 14, 15,
172             16, 17, 18,
173             7,  8,  9,
174             10, 11, 12,
175 
176             13, 14, 15,
177             16, 17, 18,
178             7,  8,  9,
179             10, 11, 12,
180             1,  2,  3,
181             4,  5,  6
182         };
183 
184         return GatherTestImpl<ArmnnType, T, 3, 2, 4>(
185             workloadFactory,
186             memoryManager,
187             tensorHandleFactory,
188             paramsInfo,
189             indicesInfo,
190             outputInfo,
191             params,
192             indices,
193             expectedOutput);
194     }
195 };
196 
197 template<typename T>
198 struct GatherTestHelper<armnn::DataType::Float16, T>
199 {
Gather1dParamsTestImpl__anond35e43080111::GatherTestHelper200     static LayerTestResult<T, 1> Gather1dParamsTestImpl(
201         armnn::IWorkloadFactory& workloadFactory,
202         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
203         const armnn::ITensorHandleFactory& tensorHandleFactory)
204     {
205         using namespace half_float::literal;
206 
207         armnn::TensorInfo paramsInfo({ 8 }, armnn::DataType::Float16);
208         armnn::TensorInfo indicesInfo({ 4 }, armnn::DataType::Signed32);
209         armnn::TensorInfo outputInfo({ 4 }, armnn::DataType::Float16);
210 
211         const std::vector<T> params = std::vector<T>({ 1._h, 2._h, 3._h, 4._h, 5._h, 6._h, 7._h, 8._h });
212         const std::vector<int32_t> indices  = std::vector<int32_t>({ 0, 2, 1, 5 });
213         const std::vector<T> expectedOutput = std::vector<T>({ 1._h, 3._h, 2._h, 6._h });
214 
215         return GatherTestImpl<armnn::DataType::Float16, T, 1, 1, 1>(
216             workloadFactory,
217             memoryManager,
218             tensorHandleFactory,
219             paramsInfo,
220             indicesInfo,
221             outputInfo,
222             params,
223             indices,
224             expectedOutput);
225     }
226 
GatherMultiDimParamsTestImpl__anond35e43080111::GatherTestHelper227     static LayerTestResult<T, 2> GatherMultiDimParamsTestImpl(
228         armnn::IWorkloadFactory& workloadFactory,
229         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
230         const armnn::ITensorHandleFactory& tensorHandleFactory)
231     {
232         using namespace half_float::literal;
233 
234         armnn::TensorInfo paramsInfo({ 5, 2 }, armnn::DataType::Float16);
235         armnn::TensorInfo indicesInfo({ 3 }, armnn::DataType::Signed32);
236         armnn::TensorInfo outputInfo({ 3, 2 }, armnn::DataType::Float16);
237 
238         const std::vector<T> params = std::vector<T>({ 1._h, 2._h, 3._h, 4._h, 5._h, 6._h, 7._h, 8._h, 9._h, 10._h });
239 
240         const std::vector<int32_t> indices  = std::vector<int32_t>({ 1, 3, 4 });
241         const std::vector<T> expectedOutput = std::vector<T>({ 3._h, 4._h, 7._h, 8._h, 9._h, 10._h });
242 
243         return GatherTestImpl<armnn::DataType::Float16, T, 2, 1, 2>(
244             workloadFactory,
245             memoryManager,
246             tensorHandleFactory,
247             paramsInfo,
248             indicesInfo,
249             outputInfo,
250             params,
251             indices,
252             expectedOutput);
253     }
254 
GatherMultiDimParamsMultiDimIndicesTestImpl__anond35e43080111::GatherTestHelper255     static LayerTestResult<T, 4> GatherMultiDimParamsMultiDimIndicesTestImpl(
256         armnn::IWorkloadFactory& workloadFactory,
257         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
258         const armnn::ITensorHandleFactory& tensorHandleFactory)
259     {
260         using namespace half_float::literal;
261 
262         armnn::TensorInfo paramsInfo({ 3, 2, 3 }, armnn::DataType::Float16);
263         armnn::TensorInfo indicesInfo({ 2, 3 }, armnn::DataType::Signed32);
264         armnn::TensorInfo outputInfo({ 2, 3, 2, 3 }, armnn::DataType::Float16);
265 
266         const std::vector<T> params =
267         {
268             1._h,  2._h,  3._h,
269             4._h,  5._h,  6._h,
270 
271             7._h,  8._h,  9._h,
272             10._h, 11._h, 12._h,
273 
274             13._h, 14._h, 15._h,
275             16._h, 17._h, 18._h
276         };
277 
278         const std::vector<int32_t> indices = { 1, 2, 1, 2, 1, 0 };
279 
280         const std::vector<T> expectedOutput =
281         {
282             7._h,  8._h,  9._h,
283             10._h, 11._h, 12._h,
284             13._h, 14._h, 15._h,
285             16._h, 17._h, 18._h,
286             7._h,  8._h,  9._h,
287             10._h, 11._h, 12._h,
288 
289             13._h, 14._h, 15._h,
290             16._h, 17._h, 18._h,
291             7._h,  8._h,  9._h,
292             10._h, 11._h, 12._h,
293             1._h,  2._h,  3._h,
294             4._h,  5._h,  6._h
295         };
296 
297         return GatherTestImpl<armnn::DataType::Float16, T, 3, 2, 4>(
298             workloadFactory,
299             memoryManager,
300             tensorHandleFactory,
301             paramsInfo,
302             indicesInfo,
303             outputInfo,
304             params,
305             indices,
306             expectedOutput);
307     }
308 };
309 
310 } // anonymous namespace
311 
Gather1dParamsFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)312 LayerTestResult<float, 1> Gather1dParamsFloat32Test(
313     armnn::IWorkloadFactory& workloadFactory,
314     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
315     const armnn::ITensorHandleFactory& tensorHandleFactory)
316 {
317     return GatherTestHelper<armnn::DataType::Float32>::Gather1dParamsTestImpl(
318             workloadFactory, memoryManager, tensorHandleFactory);
319 }
320 
Gather1dParamsFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)321 LayerTestResult<armnn::Half, 1> Gather1dParamsFloat16Test(
322     armnn::IWorkloadFactory& workloadFactory,
323     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
324     const armnn::ITensorHandleFactory& tensorHandleFactory)
325 {
326     return GatherTestHelper<armnn::DataType::Float16>::Gather1dParamsTestImpl(
327             workloadFactory, memoryManager, tensorHandleFactory);
328 }
329 
Gather1dParamsUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)330 LayerTestResult<uint8_t, 1> Gather1dParamsUint8Test(
331     armnn::IWorkloadFactory& workloadFactory,
332     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
333     const armnn::ITensorHandleFactory& tensorHandleFactory)
334 {
335     return GatherTestHelper<armnn::DataType::QAsymmU8>::Gather1dParamsTestImpl(
336             workloadFactory, memoryManager, tensorHandleFactory);
337 }
338 
Gather1dParamsInt16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)339 LayerTestResult<int16_t, 1> Gather1dParamsInt16Test(
340         armnn::IWorkloadFactory& workloadFactory,
341     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
342     const armnn::ITensorHandleFactory& tensorHandleFactory)
343 {
344     return GatherTestHelper<armnn::DataType::QSymmS16>::Gather1dParamsTestImpl(
345             workloadFactory, memoryManager, tensorHandleFactory);
346 }
347 
Gather1dParamsInt32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)348 LayerTestResult<int32_t, 1> Gather1dParamsInt32Test(
349     armnn::IWorkloadFactory& workloadFactory,
350     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
351     const armnn::ITensorHandleFactory& tensorHandleFactory)
352 {
353     return GatherTestHelper<armnn::DataType::Signed32>::Gather1dParamsTestImpl(
354             workloadFactory, memoryManager, tensorHandleFactory);
355 }
356 
GatherMultiDimParamsFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)357 LayerTestResult<float, 2> GatherMultiDimParamsFloat32Test(
358     armnn::IWorkloadFactory& workloadFactory,
359     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
360     const armnn::ITensorHandleFactory& tensorHandleFactory)
361 {
362     return GatherTestHelper<armnn::DataType::Float32>::GatherMultiDimParamsTestImpl(
363             workloadFactory, memoryManager, tensorHandleFactory);
364 }
365 
GatherMultiDimParamsFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)366 LayerTestResult<armnn::Half, 2> GatherMultiDimParamsFloat16Test(
367     armnn::IWorkloadFactory& workloadFactory,
368     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
369     const armnn::ITensorHandleFactory& tensorHandleFactory)
370 {
371     return GatherTestHelper<armnn::DataType::Float16>::GatherMultiDimParamsTestImpl(
372             workloadFactory, memoryManager, tensorHandleFactory);
373 }
374 
GatherMultiDimParamsUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)375 LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
376     armnn::IWorkloadFactory& workloadFactory,
377     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
378     const armnn::ITensorHandleFactory& tensorHandleFactory)
379 {
380     return GatherTestHelper<armnn::DataType::QAsymmU8>::GatherMultiDimParamsTestImpl(
381         workloadFactory, memoryManager, tensorHandleFactory);
382 }
383 
GatherMultiDimParamsInt16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)384 LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
385     armnn::IWorkloadFactory& workloadFactory,
386     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
387     const armnn::ITensorHandleFactory& tensorHandleFactory)
388 {
389     return GatherTestHelper<armnn::DataType::QSymmS16>::GatherMultiDimParamsTestImpl(
390         workloadFactory, memoryManager, tensorHandleFactory);
391 }
392 
GatherMultiDimParamsInt32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)393 LayerTestResult<int32_t, 2> GatherMultiDimParamsInt32Test(
394     armnn::IWorkloadFactory& workloadFactory,
395     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
396     const armnn::ITensorHandleFactory& tensorHandleFactory)
397 {
398     return GatherTestHelper<armnn::DataType::Signed32>::GatherMultiDimParamsTestImpl(
399             workloadFactory, memoryManager, tensorHandleFactory);
400 }
401 
GatherMultiDimParamsMultiDimIndicesFloat32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)402 LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloat32Test(
403     armnn::IWorkloadFactory& workloadFactory,
404     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
405     const armnn::ITensorHandleFactory& tensorHandleFactory)
406 {
407     return GatherTestHelper<armnn::DataType::Float32>::GatherMultiDimParamsMultiDimIndicesTestImpl(
408         workloadFactory, memoryManager, tensorHandleFactory);
409 }
410 
GatherMultiDimParamsMultiDimIndicesFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)411 LayerTestResult<armnn::Half, 4> GatherMultiDimParamsMultiDimIndicesFloat16Test(
412     armnn::IWorkloadFactory& workloadFactory,
413     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
414     const armnn::ITensorHandleFactory& tensorHandleFactory)
415 {
416     return GatherTestHelper<armnn::DataType::Float16>::GatherMultiDimParamsMultiDimIndicesTestImpl(
417         workloadFactory, memoryManager, tensorHandleFactory);
418 }
419 
GatherMultiDimParamsMultiDimIndicesUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)420 LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
421     armnn::IWorkloadFactory& workloadFactory,
422     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
423     const armnn::ITensorHandleFactory& tensorHandleFactory)
424 {
425     return GatherTestHelper<armnn::DataType::QAsymmU8>::GatherMultiDimParamsMultiDimIndicesTestImpl(
426         workloadFactory, memoryManager, tensorHandleFactory);
427 }
428 
GatherMultiDimParamsMultiDimIndicesInt16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)429 LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
430     armnn::IWorkloadFactory& workloadFactory,
431     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
432     const armnn::ITensorHandleFactory& tensorHandleFactory)
433 {
434     return GatherTestHelper<armnn::DataType::QSymmS16>::GatherMultiDimParamsMultiDimIndicesTestImpl(
435         workloadFactory, memoryManager, tensorHandleFactory);
436 }
437 
GatherMultiDimParamsMultiDimIndicesInt32Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)438 LayerTestResult<int32_t, 4> GatherMultiDimParamsMultiDimIndicesInt32Test(
439     armnn::IWorkloadFactory& workloadFactory,
440     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
441     const armnn::ITensorHandleFactory& tensorHandleFactory)
442 {
443     return GatherTestHelper<armnn::DataType::Signed32>::GatherMultiDimParamsMultiDimIndicesTestImpl(
444             workloadFactory, memoryManager, tensorHandleFactory);
445 }