ArmNN
 21.08
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  std::vector<T> 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  std::vector<int32_t> actualOutput(outputTensorInfo.GetNumElements());
28  std::vector<int32_t> expectedOutput = { 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.data());
44 
45  workload->Execute();
46 
47  CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
48 
49  return LayerTestResult<int32_t, 1>(actualOutput,
50  expectedOutput,
51  outputHandle->GetShape(),
52  outputTensorInfo.GetShape());
53 }
54 
55 template<armnn::DataType ArmnnType, typename T>
57  armnn::IWorkloadFactory& workloadFactory,
59  const armnn::ITensorHandleFactory& tensorHandleFactory)
60 {
61  armnn::TensorInfo inputTensorInfo({6}, ArmnnType, 1.0f, 0);
62  auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f, -2.0f, -1.3f, -0.5f }, inputTensorInfo);
63 
64  return RankTest<T, 1>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
65 }
66 
67 template<armnn::DataType ArmnnType, typename T>
69  armnn::IWorkloadFactory& workloadFactory,
71  const armnn::ITensorHandleFactory& tensorHandleFactory)
72 {
73  armnn::TensorInfo inputTensorInfo({1, 3}, ArmnnType, 1.0f, 0);
74  auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f }, inputTensorInfo);
75 
76  return RankTest<T, 2>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
77 }
78 
79 template<armnn::DataType ArmnnType, typename T>
81  armnn::IWorkloadFactory& workloadFactory,
83  const armnn::ITensorHandleFactory& tensorHandleFactory)
84 {
85  armnn::TensorInfo inputTensorInfo({1, 3, 2}, ArmnnType, 1.0f, 0);
86  auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f}, inputTensorInfo);
87 
88  return RankTest<T, 3>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
89 }
90 
91 template<armnn::DataType ArmnnType, typename T>
93  armnn::IWorkloadFactory& workloadFactory,
95  const armnn::ITensorHandleFactory& tensorHandleFactory)
96 {
97  armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType, 1.0f, 0);
98  auto input = ConvertToDataType<ArmnnType>(
99  { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
100  1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
101  inputTensorInfo);
102 
103  return RankTest<T, 4>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
104 }
105 
107 RankDimSize4Test<armnn::DataType::Float16>(
108  armnn::IWorkloadFactory& workloadFactory,
110  const armnn::ITensorHandleFactory& tensorHandleFactory);
111 
113 RankDimSize4Test<armnn::DataType::Float32>(
114  armnn::IWorkloadFactory& workloadFactory,
116  const armnn::ITensorHandleFactory& tensorHandleFactory);
117 
119 RankDimSize4Test<armnn::DataType::QAsymmU8>(
120  armnn::IWorkloadFactory& workloadFactory,
122  const armnn::ITensorHandleFactory& tensorHandleFactory);
123 
125 RankDimSize4Test<armnn::DataType::Signed32>(
126  armnn::IWorkloadFactory& workloadFactory,
128  const armnn::ITensorHandleFactory& tensorHandleFactory);
129 
131 RankDimSize4Test<armnn::DataType::QSymmS16>(
132  armnn::IWorkloadFactory& workloadFactory,
134  const armnn::ITensorHandleFactory& tensorHandleFactory);
135 
137 RankDimSize4Test<armnn::DataType::QSymmS8>(
138  armnn::IWorkloadFactory& workloadFactory,
140  const armnn::ITensorHandleFactory& tensorHandleFactory);
141 
143 RankDimSize4Test<armnn::DataType::QAsymmS8>(
144  armnn::IWorkloadFactory& workloadFactory,
146  const armnn::ITensorHandleFactory& tensorHandleFactory);
147 
149 RankDimSize4Test<armnn::DataType::BFloat16>(
150  armnn::IWorkloadFactory& workloadFactory,
152  const armnn::ITensorHandleFactory& tensorHandleFactory);
153 
155 RankDimSize3Test<armnn::DataType::Float16>(
156  armnn::IWorkloadFactory& workloadFactory,
158  const armnn::ITensorHandleFactory& tensorHandleFactory);
159 
161 RankDimSize3Test<armnn::DataType::Float32>(
162  armnn::IWorkloadFactory& workloadFactory,
164  const armnn::ITensorHandleFactory& tensorHandleFactory);
165 
167 RankDimSize3Test<armnn::DataType::QAsymmU8>(
168  armnn::IWorkloadFactory& workloadFactory,
170  const armnn::ITensorHandleFactory& tensorHandleFactory);
171 
173 RankDimSize3Test<armnn::DataType::Signed32>(
174  armnn::IWorkloadFactory& workloadFactory,
176  const armnn::ITensorHandleFactory& tensorHandleFactory);
177 
179 RankDimSize3Test<armnn::DataType::QSymmS16>(
180  armnn::IWorkloadFactory& workloadFactory,
182  const armnn::ITensorHandleFactory& tensorHandleFactory);
183 
185 RankDimSize3Test<armnn::DataType::QSymmS8>(
186  armnn::IWorkloadFactory& workloadFactory,
188  const armnn::ITensorHandleFactory& tensorHandleFactory);
189 
191 RankDimSize3Test<armnn::DataType::QAsymmS8>(
192  armnn::IWorkloadFactory& workloadFactory,
194  const armnn::ITensorHandleFactory& tensorHandleFactory);
195 
197 RankDimSize3Test<armnn::DataType::BFloat16>(
198  armnn::IWorkloadFactory& workloadFactory,
200  const armnn::ITensorHandleFactory& tensorHandleFactory);
201 
203 RankDimSize2Test<armnn::DataType::Float16>(
204  armnn::IWorkloadFactory& workloadFactory,
206  const armnn::ITensorHandleFactory& tensorHandleFactory);
207 
209 RankDimSize2Test<armnn::DataType::Float32>(
210  armnn::IWorkloadFactory& workloadFactory,
212  const armnn::ITensorHandleFactory& tensorHandleFactory);
213 
215 RankDimSize2Test<armnn::DataType::QAsymmU8>(
216  armnn::IWorkloadFactory& workloadFactory,
218  const armnn::ITensorHandleFactory& tensorHandleFactory);
219 
221 RankDimSize2Test<armnn::DataType::Signed32>(
222  armnn::IWorkloadFactory& workloadFactory,
224  const armnn::ITensorHandleFactory& tensorHandleFactory);
225 
227 RankDimSize2Test<armnn::DataType::QSymmS16>(
228  armnn::IWorkloadFactory& workloadFactory,
230  const armnn::ITensorHandleFactory& tensorHandleFactory);
231 
233 RankDimSize2Test<armnn::DataType::QSymmS8>(
234  armnn::IWorkloadFactory& workloadFactory,
236  const armnn::ITensorHandleFactory& tensorHandleFactory);
237 
239 RankDimSize2Test<armnn::DataType::QAsymmS8>(
240  armnn::IWorkloadFactory& workloadFactory,
242  const armnn::ITensorHandleFactory& tensorHandleFactory);
243 
245 RankDimSize2Test<armnn::DataType::BFloat16>(
246  armnn::IWorkloadFactory& workloadFactory,
248  const armnn::ITensorHandleFactory& tensorHandleFactory);
249 
251 RankDimSize1Test<armnn::DataType::Float16>(
252  armnn::IWorkloadFactory& workloadFactory,
254  const armnn::ITensorHandleFactory& tensorHandleFactory);
255 
257 RankDimSize1Test<armnn::DataType::Float32>(
258  armnn::IWorkloadFactory& workloadFactory,
260  const armnn::ITensorHandleFactory& tensorHandleFactory);
261 
263 RankDimSize1Test<armnn::DataType::QAsymmU8>(
264  armnn::IWorkloadFactory& workloadFactory,
266  const armnn::ITensorHandleFactory& tensorHandleFactory);
267 
269 RankDimSize1Test<armnn::DataType::Signed32>(
270  armnn::IWorkloadFactory& workloadFactory,
272  const armnn::ITensorHandleFactory& tensorHandleFactory);
273 
275 RankDimSize1Test<armnn::DataType::QSymmS16>(
276  armnn::IWorkloadFactory& workloadFactory,
278  const armnn::ITensorHandleFactory& tensorHandleFactory);
279 
281 RankDimSize1Test<armnn::DataType::QSymmS8>(
282  armnn::IWorkloadFactory& workloadFactory,
284  const armnn::ITensorHandleFactory& tensorHandleFactory);
285 
287 RankDimSize1Test<armnn::DataType::QAsymmS8>(
288  armnn::IWorkloadFactory& workloadFactory,
290  const armnn::ITensorHandleFactory& tensorHandleFactory);
291 
293 RankDimSize1Test<armnn::DataType::BFloat16>(
294  armnn::IWorkloadFactory& workloadFactory,
296  const armnn::ITensorHandleFactory& tensorHandleFactory);
const TensorShape & GetShape() const
Definition: Tensor.hpp:191
LayerTestResult< int32_t, 1 > RankTest(armnn::TensorInfo inputTensorInfo, std::vector< T > input, armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
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)
Contains information about TensorInfos of a layer.
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
unsigned int GetNumElements() const
Definition: Tensor.hpp:196
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)