30 const std::vector<T>& paramsData,
31 const std::vector<int32_t>& indicesData,
32 const std::vector<T>& outputData)
34 boost::ignore_unused(memoryManager);
35 auto params = MakeTensor<T, ParamsDim>(paramsInfo, paramsData);
36 auto indices = MakeTensor<int32_t, IndicesDim>(indicesInfo, indicesData);
39 result.outputExpected = MakeTensor<T, OutputDim>(outputInfo, outputData);
41 std::unique_ptr<armnn::ITensorHandle> paramsHandle = workloadFactory.
CreateTensorHandle(paramsInfo);
42 std::unique_ptr<armnn::ITensorHandle> indicesHandle = workloadFactory.
CreateTensorHandle(indicesInfo);
43 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputInfo);
47 AddInputToWorkload(data, info, paramsInfo, paramsHandle.get());
48 AddInputToWorkload(data, info, indicesInfo, indicesHandle.get());
49 AddOutputToWorkload(data, info, outputInfo, outputHandle.get());
51 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.
CreateGather(data, info);
53 paramsHandle->Allocate();
54 indicesHandle->Allocate();
55 outputHandle->Allocate();
67 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
68 struct GatherTestHelper
78 if (armnn::IsQuantizedType<T>())
81 paramsInfo.SetQuantizationOffset(1);
82 outputInfo.SetQuantizationScale(1.0f);
83 outputInfo.SetQuantizationOffset(1);
85 const std::vector<T> params = std::vector<T>({ 1, 2, 3, 4, 5, 6, 7, 8 });
86 const std::vector<int32_t> indices = std::vector<int32_t>({ 0, 2, 1, 5 });
87 const std::vector<T> expectedOutput = std::vector<T>({ 1, 3, 2, 6 });
89 return GatherTestImpl<ArmnnType, T, 1, 1, 1>(
108 if (armnn::IsQuantizedType<T>())
111 paramsInfo.SetQuantizationOffset(1);
112 outputInfo.SetQuantizationScale(1.0f);
113 outputInfo.SetQuantizationOffset(1);
116 const std::vector<T> params = std::vector<T>({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
117 const std::vector<int32_t> indices = std::vector<int32_t>({ 1, 3, 4 });
118 const std::vector<T> expectedOutput = std::vector<T>({ 3, 4, 7, 8, 9, 10 });
120 return GatherTestImpl<ArmnnType, T, 2, 1, 2>(
139 if (armnn::IsQuantizedType<T>())
142 paramsInfo.SetQuantizationOffset(1);
143 outputInfo.SetQuantizationScale(1.0f);
144 outputInfo.SetQuantizationOffset(1);
147 const std::vector<T> params =
159 const std::vector<int32_t> indices = { 1, 2, 1, 2, 1, 0 };
161 const std::vector<T> expectedOutput =
178 return GatherTestImpl<ArmnnType, T, 3, 2, 4>(
191 struct GatherTestHelper<
armnn::DataType::Float16, T>
197 using namespace half_float::literal;
203 const std::vector<T> params = std::vector<T>({ 1._h, 2._h, 3._h, 4._h, 5._h, 6._h, 7._h, 8._h });
204 const std::vector<int32_t> indices = std::vector<int32_t>({ 0, 2, 1, 5 });
205 const std::vector<T> expectedOutput = std::vector<T>({ 1._h, 3._h, 2._h, 6._h });
207 return GatherTestImpl<armnn::DataType::Float16, T, 1, 1, 1>(
222 using namespace half_float::literal;
228 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 });
230 const std::vector<int32_t> indices = std::vector<int32_t>({ 1, 3, 4 });
231 const std::vector<T> expectedOutput = std::vector<T>({ 3._h, 4._h, 7._h, 8._h, 9._h, 10._h });
233 return GatherTestImpl<armnn::DataType::Float16, T, 2, 1, 2>(
248 using namespace half_float::literal;
254 const std::vector<T> params =
266 const std::vector<int32_t> indices = { 1, 2, 1, 2, 1, 0 };
268 const std::vector<T> expectedOutput =
285 return GatherTestImpl<armnn::DataType::Float16, T, 3, 2, 4>(
303 return GatherTestHelper<armnn::DataType::Float32>::Gather1dParamsTestImpl(workloadFactory, memoryManager);
310 return GatherTestHelper<armnn::DataType::Float16>::Gather1dParamsTestImpl(workloadFactory, memoryManager);
317 return GatherTestHelper<armnn::DataType::QAsymmU8>::Gather1dParamsTestImpl(workloadFactory, memoryManager);
324 return GatherTestHelper<armnn::DataType::QSymmS16>::Gather1dParamsTestImpl(workloadFactory, memoryManager);
331 return GatherTestHelper<armnn::DataType::Float32>::GatherMultiDimParamsTestImpl(workloadFactory, memoryManager);
338 return GatherTestHelper<armnn::DataType::Float16>::GatherMultiDimParamsTestImpl(workloadFactory, memoryManager);
345 return GatherTestHelper<armnn::DataType::QAsymmU8>::GatherMultiDimParamsTestImpl(
346 workloadFactory, memoryManager);
353 return GatherTestHelper<armnn::DataType::QSymmS16>::GatherMultiDimParamsTestImpl(
354 workloadFactory, memoryManager);
361 return GatherTestHelper<armnn::DataType::Float32>::GatherMultiDimParamsMultiDimIndicesTestImpl(
362 workloadFactory, memoryManager);
369 return GatherTestHelper<armnn::DataType::Float16>::GatherMultiDimParamsMultiDimIndicesTestImpl(
370 workloadFactory, memoryManager);
377 return GatherTestHelper<armnn::DataType::QAsymmU8>::GatherMultiDimParamsMultiDimIndicesTestImpl(
378 workloadFactory, memoryManager);
385 return GatherTestHelper<armnn::DataType::QSymmS16>::GatherMultiDimParamsMultiDimIndicesTestImpl(
386 workloadFactory, memoryManager);
LayerTestResult< float, 4 > GatherMultiDimParamsMultiDimIndicesFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::Half, 2 > GatherMultiDimParamsFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 2 > GatherMultiDimParamsUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerTestResult< armnn::Half, 1 > Gather1dParamsFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 2 > GatherMultiDimParamsInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
LayerTestResult< armnn::Half, 4 > GatherMultiDimParamsMultiDimIndicesFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< float, 2 > GatherMultiDimParamsFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
typename ResolveTypeImpl< DT >::Type ResolveType
LayerTestResult< int16_t, 1 > Gather1dParamsInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
virtual std::unique_ptr< IWorkload > CreateGather(const GatherQueueDescriptor &descriptor, const WorkloadInfo &info) const
LayerTestResult< float, 1 > Gather1dParamsFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void SetQuantizationScale(float scale)
LayerTestResult< uint8_t, 4 > GatherMultiDimParamsMultiDimIndicesUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 4 > GatherMultiDimParamsMultiDimIndicesInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 1 > Gather1dParamsUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)