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 }