ArmNN
 21.02
RankTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "RankTestImpl.hpp"
7 
11 
12 #include <test/TensorHelpers.hpp>
13 
14 template<typename T, std::size_t n>
16  armnn::TensorInfo inputTensorInfo,
17  boost::multi_array<T, n> input,
18  armnn::IWorkloadFactory& workloadFactory,
20  const armnn::ITensorHandleFactory& tensorHandleFactory)
21 {
22  IgnoreUnused(memoryManager);
23 
25  armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Signed32);
26 
27  LayerTestResult<int32_t , 1> ret(outputTensorInfo);
28  ret.outputExpected = MakeTensor<uint32_t, 1>(outputTensorInfo, { n });
29 
30  std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
31  std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
32 
35  AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
36  AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
37 
38  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRank(data, info);
39 
40  inputHandle->Allocate();
41  outputHandle->Allocate();
42 
43  CopyDataToITensorHandle(inputHandle.get(), input.origin());
44 
45  workload->Execute();
46 
47  CopyDataFromITensorHandle(&ret.output[0], outputHandle.get());
48 
49  return ret;
50 }
51 
52 template<armnn::DataType ArmnnType, typename T>
54  armnn::IWorkloadFactory& workloadFactory,
56  const armnn::ITensorHandleFactory& tensorHandleFactory)
57 {
58  armnn::TensorInfo inputTensorInfo({6}, ArmnnType, 1.0f, 0);
59  auto input = MakeTensor<T, 1>(inputTensorInfo, ConvertToDataType<ArmnnType>(
60  { -37.5f, -15.2f, -8.76f, -2.0f, -1.3f, -0.5f },
61  inputTensorInfo));
62 
63  return RankTest<T, 1>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
64 }
65 
66 template<armnn::DataType ArmnnType, typename T>
68  armnn::IWorkloadFactory& workloadFactory,
70  const armnn::ITensorHandleFactory& tensorHandleFactory)
71 {
72  armnn::TensorInfo inputTensorInfo({1, 3}, ArmnnType, 1.0f, 0);
73  auto input = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(
74  { -37.5f, -15.2f, -8.76f },
75  inputTensorInfo));
76 
77  return RankTest<T, 2>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
78 }
79 
80 template<armnn::DataType ArmnnType, typename T>
82  armnn::IWorkloadFactory& workloadFactory,
84  const armnn::ITensorHandleFactory& tensorHandleFactory)
85 {
86  armnn::TensorInfo inputTensorInfo({1, 3, 2}, ArmnnType, 1.0f, 0);
87  auto input = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(
88  { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f},
89  inputTensorInfo));
90 
91  return RankTest<T, 3>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
92 }
93 
94 template<armnn::DataType ArmnnType, typename T>
96  armnn::IWorkloadFactory& workloadFactory,
98  const armnn::ITensorHandleFactory& tensorHandleFactory)
99 {
100  armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType, 1.0f, 0);
101  auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
102  { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
103  1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
104  inputTensorInfo));
105 
106  return RankTest<T, 4>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
107 }
108 
110 RankDimSize4Test<armnn::DataType::Float16>(
111  armnn::IWorkloadFactory& workloadFactory,
113  const armnn::ITensorHandleFactory& tensorHandleFactory);
114 
116 RankDimSize4Test<armnn::DataType::Float32>(
117  armnn::IWorkloadFactory& workloadFactory,
119  const armnn::ITensorHandleFactory& tensorHandleFactory);
120 
122 RankDimSize4Test<armnn::DataType::QAsymmU8>(
123  armnn::IWorkloadFactory& workloadFactory,
125  const armnn::ITensorHandleFactory& tensorHandleFactory);
126 
128 RankDimSize4Test<armnn::DataType::Signed32>(
129  armnn::IWorkloadFactory& workloadFactory,
131  const armnn::ITensorHandleFactory& tensorHandleFactory);
132 
134 RankDimSize4Test<armnn::DataType::QSymmS16>(
135  armnn::IWorkloadFactory& workloadFactory,
137  const armnn::ITensorHandleFactory& tensorHandleFactory);
138 
140 RankDimSize4Test<armnn::DataType::QSymmS8>(
141  armnn::IWorkloadFactory& workloadFactory,
143  const armnn::ITensorHandleFactory& tensorHandleFactory);
144 
146 RankDimSize4Test<armnn::DataType::QAsymmS8>(
147  armnn::IWorkloadFactory& workloadFactory,
149  const armnn::ITensorHandleFactory& tensorHandleFactory);
150 
152 RankDimSize4Test<armnn::DataType::BFloat16>(
153  armnn::IWorkloadFactory& workloadFactory,
155  const armnn::ITensorHandleFactory& tensorHandleFactory);
156 
158 RankDimSize3Test<armnn::DataType::Float16>(
159  armnn::IWorkloadFactory& workloadFactory,
161  const armnn::ITensorHandleFactory& tensorHandleFactory);
162 
164 RankDimSize3Test<armnn::DataType::Float32>(
165  armnn::IWorkloadFactory& workloadFactory,
167  const armnn::ITensorHandleFactory& tensorHandleFactory);
168 
170 RankDimSize3Test<armnn::DataType::QAsymmU8>(
171  armnn::IWorkloadFactory& workloadFactory,
173  const armnn::ITensorHandleFactory& tensorHandleFactory);
174 
176 RankDimSize3Test<armnn::DataType::Signed32>(
177  armnn::IWorkloadFactory& workloadFactory,
179  const armnn::ITensorHandleFactory& tensorHandleFactory);
180 
182 RankDimSize3Test<armnn::DataType::QSymmS16>(
183  armnn::IWorkloadFactory& workloadFactory,
185  const armnn::ITensorHandleFactory& tensorHandleFactory);
186 
188 RankDimSize3Test<armnn::DataType::QSymmS8>(
189  armnn::IWorkloadFactory& workloadFactory,
191  const armnn::ITensorHandleFactory& tensorHandleFactory);
192 
194 RankDimSize3Test<armnn::DataType::QAsymmS8>(
195  armnn::IWorkloadFactory& workloadFactory,
197  const armnn::ITensorHandleFactory& tensorHandleFactory);
198 
200 RankDimSize3Test<armnn::DataType::BFloat16>(
201  armnn::IWorkloadFactory& workloadFactory,
203  const armnn::ITensorHandleFactory& tensorHandleFactory);
204 
206 RankDimSize2Test<armnn::DataType::Float16>(
207  armnn::IWorkloadFactory& workloadFactory,
209  const armnn::ITensorHandleFactory& tensorHandleFactory);
210 
212 RankDimSize2Test<armnn::DataType::Float32>(
213  armnn::IWorkloadFactory& workloadFactory,
215  const armnn::ITensorHandleFactory& tensorHandleFactory);
216 
218 RankDimSize2Test<armnn::DataType::QAsymmU8>(
219  armnn::IWorkloadFactory& workloadFactory,
221  const armnn::ITensorHandleFactory& tensorHandleFactory);
222 
224 RankDimSize2Test<armnn::DataType::Signed32>(
225  armnn::IWorkloadFactory& workloadFactory,
227  const armnn::ITensorHandleFactory& tensorHandleFactory);
228 
230 RankDimSize2Test<armnn::DataType::QSymmS16>(
231  armnn::IWorkloadFactory& workloadFactory,
233  const armnn::ITensorHandleFactory& tensorHandleFactory);
234 
236 RankDimSize2Test<armnn::DataType::QSymmS8>(
237  armnn::IWorkloadFactory& workloadFactory,
239  const armnn::ITensorHandleFactory& tensorHandleFactory);
240 
242 RankDimSize2Test<armnn::DataType::QAsymmS8>(
243  armnn::IWorkloadFactory& workloadFactory,
245  const armnn::ITensorHandleFactory& tensorHandleFactory);
246 
248 RankDimSize2Test<armnn::DataType::BFloat16>(
249  armnn::IWorkloadFactory& workloadFactory,
251  const armnn::ITensorHandleFactory& tensorHandleFactory);
252 
254 RankDimSize1Test<armnn::DataType::Float16>(
255  armnn::IWorkloadFactory& workloadFactory,
257  const armnn::ITensorHandleFactory& tensorHandleFactory);
258 
260 RankDimSize1Test<armnn::DataType::Float32>(
261  armnn::IWorkloadFactory& workloadFactory,
263  const armnn::ITensorHandleFactory& tensorHandleFactory);
264 
266 RankDimSize1Test<armnn::DataType::QAsymmU8>(
267  armnn::IWorkloadFactory& workloadFactory,
269  const armnn::ITensorHandleFactory& tensorHandleFactory);
270 
272 RankDimSize1Test<armnn::DataType::Signed32>(
273  armnn::IWorkloadFactory& workloadFactory,
275  const armnn::ITensorHandleFactory& tensorHandleFactory);
276 
278 RankDimSize1Test<armnn::DataType::QSymmS16>(
279  armnn::IWorkloadFactory& workloadFactory,
281  const armnn::ITensorHandleFactory& tensorHandleFactory);
282 
284 RankDimSize1Test<armnn::DataType::QSymmS8>(
285  armnn::IWorkloadFactory& workloadFactory,
287  const armnn::ITensorHandleFactory& tensorHandleFactory);
288 
290 RankDimSize1Test<armnn::DataType::QAsymmS8>(
291  armnn::IWorkloadFactory& workloadFactory,
293  const armnn::ITensorHandleFactory& tensorHandleFactory);
294 
296 RankDimSize1Test<armnn::DataType::BFloat16>(
297  armnn::IWorkloadFactory& workloadFactory,
299  const armnn::ITensorHandleFactory& tensorHandleFactory);
boost::multi_array< T, n > outputExpected
void IgnoreUnused(Ts &&...)
virtual std::unique_ptr< IWorkload > CreateRank(const RankQueueDescriptor &descriptor, const WorkloadInfo &info) const
LayerTestResult< int32_t, 1 > RankDimSize4Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
LayerTestResult< int32_t, 1 > RankDimSize2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int32_t, 1 > RankDimSize3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
boost::multi_array< T, n > output
Contains information about inputs and outputs to a layer.
LayerTestResult< int32_t, 1 > RankTest(armnn::TensorInfo inputTensorInfo, boost::multi_array< T, n > input, armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
LayerTestResult< int32_t, 1 > RankDimSize1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)