xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/RankTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "RankTestImpl.hpp"
7 
8 #include <DataTypeUtils.hpp>
9 #include <armnnTestUtils/TensorCopyUtils.hpp>
10 #include <armnnTestUtils/WorkloadTestUtils.hpp>
11 
12 #include <armnnTestUtils/TensorHelpers.hpp>
13 
14 template<typename T, std::size_t n>
RankTest(armnn::TensorInfo inputTensorInfo,std::vector<T> input,armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)15 LayerTestResult<int32_t, 1> RankTest(
16         armnn::TensorInfo inputTensorInfo,
17         std::vector<T> input,
18         armnn::IWorkloadFactory& workloadFactory,
19         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
20         const armnn::ITensorHandleFactory& tensorHandleFactory)
21 {
22     IgnoreUnused(memoryManager);
23 
24     const armnn::TensorShape outputShape{armnn::Dimensionality::Scalar};
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 
33     armnn::RankQueueDescriptor data;
34     armnn::WorkloadInfo info;
35     AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
36     AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
37 
38     std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Rank, 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>
RankDimSize1Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)56 LayerTestResult<int32_t, 1> RankDimSize1Test(
57         armnn::IWorkloadFactory& workloadFactory,
58         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize2Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)68 LayerTestResult<int32_t, 1> RankDimSize2Test(
69         armnn::IWorkloadFactory& workloadFactory,
70         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize3Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)80 LayerTestResult<int32_t, 1> RankDimSize3Test(
81         armnn::IWorkloadFactory& workloadFactory,
82         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize4Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)92 LayerTestResult<int32_t, 1> RankDimSize4Test(
93         armnn::IWorkloadFactory& workloadFactory,
94         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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 
106 template LayerTestResult<int32_t, 1>
107 RankDimSize4Test<armnn::DataType::Float16>(
108         armnn::IWorkloadFactory& workloadFactory,
109         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
110         const armnn::ITensorHandleFactory& tensorHandleFactory);
111 
112 template LayerTestResult<int32_t, 1>
113 RankDimSize4Test<armnn::DataType::Float32>(
114         armnn::IWorkloadFactory& workloadFactory,
115         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
116         const armnn::ITensorHandleFactory& tensorHandleFactory);
117 
118 template LayerTestResult<int32_t, 1>
119 RankDimSize4Test<armnn::DataType::QAsymmU8>(
120         armnn::IWorkloadFactory& workloadFactory,
121         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
122         const armnn::ITensorHandleFactory& tensorHandleFactory);
123 
124 template LayerTestResult<int32_t, 1>
125 RankDimSize4Test<armnn::DataType::Signed32>(
126         armnn::IWorkloadFactory& workloadFactory,
127         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
128         const armnn::ITensorHandleFactory& tensorHandleFactory);
129 
130 template LayerTestResult<int32_t, 1>
131 RankDimSize4Test<armnn::DataType::QSymmS16>(
132         armnn::IWorkloadFactory& workloadFactory,
133         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
134         const armnn::ITensorHandleFactory& tensorHandleFactory);
135 
136 template LayerTestResult<int32_t, 1>
137 RankDimSize4Test<armnn::DataType::QSymmS8>(
138         armnn::IWorkloadFactory& workloadFactory,
139         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
140         const armnn::ITensorHandleFactory& tensorHandleFactory);
141 
142 template LayerTestResult<int32_t, 1>
143 RankDimSize4Test<armnn::DataType::QAsymmS8>(
144         armnn::IWorkloadFactory& workloadFactory,
145         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
146         const armnn::ITensorHandleFactory& tensorHandleFactory);
147 
148 template LayerTestResult<int32_t, 1>
149 RankDimSize4Test<armnn::DataType::BFloat16>(
150         armnn::IWorkloadFactory& workloadFactory,
151         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
152         const armnn::ITensorHandleFactory& tensorHandleFactory);
153 
154 template LayerTestResult<int32_t, 1>
155 RankDimSize3Test<armnn::DataType::Float16>(
156         armnn::IWorkloadFactory& workloadFactory,
157         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
158         const armnn::ITensorHandleFactory& tensorHandleFactory);
159 
160 template LayerTestResult<int32_t, 1>
161 RankDimSize3Test<armnn::DataType::Float32>(
162         armnn::IWorkloadFactory& workloadFactory,
163         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
164         const armnn::ITensorHandleFactory& tensorHandleFactory);
165 
166 template LayerTestResult<int32_t, 1>
167 RankDimSize3Test<armnn::DataType::QAsymmU8>(
168         armnn::IWorkloadFactory& workloadFactory,
169         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
170         const armnn::ITensorHandleFactory& tensorHandleFactory);
171 
172 template LayerTestResult<int32_t, 1>
173 RankDimSize3Test<armnn::DataType::Signed32>(
174         armnn::IWorkloadFactory& workloadFactory,
175         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
176         const armnn::ITensorHandleFactory& tensorHandleFactory);
177 
178 template LayerTestResult<int32_t, 1>
179 RankDimSize3Test<armnn::DataType::QSymmS16>(
180         armnn::IWorkloadFactory& workloadFactory,
181         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
182         const armnn::ITensorHandleFactory& tensorHandleFactory);
183 
184 template LayerTestResult<int32_t, 1>
185 RankDimSize3Test<armnn::DataType::QSymmS8>(
186         armnn::IWorkloadFactory& workloadFactory,
187         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
188         const armnn::ITensorHandleFactory& tensorHandleFactory);
189 
190 template LayerTestResult<int32_t, 1>
191 RankDimSize3Test<armnn::DataType::QAsymmS8>(
192         armnn::IWorkloadFactory& workloadFactory,
193         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
194         const armnn::ITensorHandleFactory& tensorHandleFactory);
195 
196 template LayerTestResult<int32_t, 1>
197 RankDimSize3Test<armnn::DataType::BFloat16>(
198         armnn::IWorkloadFactory& workloadFactory,
199         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
200         const armnn::ITensorHandleFactory& tensorHandleFactory);
201 
202 template LayerTestResult<int32_t, 1>
203 RankDimSize2Test<armnn::DataType::Float16>(
204         armnn::IWorkloadFactory& workloadFactory,
205         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
206         const armnn::ITensorHandleFactory& tensorHandleFactory);
207 
208 template LayerTestResult<int32_t, 1>
209 RankDimSize2Test<armnn::DataType::Float32>(
210         armnn::IWorkloadFactory& workloadFactory,
211         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
212         const armnn::ITensorHandleFactory& tensorHandleFactory);
213 
214 template LayerTestResult<int32_t, 1>
215 RankDimSize2Test<armnn::DataType::QAsymmU8>(
216         armnn::IWorkloadFactory& workloadFactory,
217         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
218         const armnn::ITensorHandleFactory& tensorHandleFactory);
219 
220 template LayerTestResult<int32_t, 1>
221 RankDimSize2Test<armnn::DataType::Signed32>(
222         armnn::IWorkloadFactory& workloadFactory,
223         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
224         const armnn::ITensorHandleFactory& tensorHandleFactory);
225 
226 template LayerTestResult<int32_t, 1>
227 RankDimSize2Test<armnn::DataType::QSymmS16>(
228         armnn::IWorkloadFactory& workloadFactory,
229         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
230         const armnn::ITensorHandleFactory& tensorHandleFactory);
231 
232 template LayerTestResult<int32_t, 1>
233 RankDimSize2Test<armnn::DataType::QSymmS8>(
234         armnn::IWorkloadFactory& workloadFactory,
235         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
236         const armnn::ITensorHandleFactory& tensorHandleFactory);
237 
238 template LayerTestResult<int32_t, 1>
239 RankDimSize2Test<armnn::DataType::QAsymmS8>(
240         armnn::IWorkloadFactory& workloadFactory,
241         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
242         const armnn::ITensorHandleFactory& tensorHandleFactory);
243 
244 template LayerTestResult<int32_t, 1>
245 RankDimSize2Test<armnn::DataType::BFloat16>(
246         armnn::IWorkloadFactory& workloadFactory,
247         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
248         const armnn::ITensorHandleFactory& tensorHandleFactory);
249 
250 template LayerTestResult<int32_t, 1>
251 RankDimSize1Test<armnn::DataType::Float16>(
252         armnn::IWorkloadFactory& workloadFactory,
253         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
254         const armnn::ITensorHandleFactory& tensorHandleFactory);
255 
256 template LayerTestResult<int32_t, 1>
257 RankDimSize1Test<armnn::DataType::Float32>(
258         armnn::IWorkloadFactory& workloadFactory,
259         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
260         const armnn::ITensorHandleFactory& tensorHandleFactory);
261 
262 template LayerTestResult<int32_t, 1>
263 RankDimSize1Test<armnn::DataType::QAsymmU8>(
264         armnn::IWorkloadFactory& workloadFactory,
265         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
266         const armnn::ITensorHandleFactory& tensorHandleFactory);
267 
268 template LayerTestResult<int32_t, 1>
269 RankDimSize1Test<armnn::DataType::Signed32>(
270         armnn::IWorkloadFactory& workloadFactory,
271         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
272         const armnn::ITensorHandleFactory& tensorHandleFactory);
273 
274 template LayerTestResult<int32_t, 1>
275 RankDimSize1Test<armnn::DataType::QSymmS16>(
276         armnn::IWorkloadFactory& workloadFactory,
277         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
278         const armnn::ITensorHandleFactory& tensorHandleFactory);
279 
280 template LayerTestResult<int32_t, 1>
281 RankDimSize1Test<armnn::DataType::QSymmS8>(
282         armnn::IWorkloadFactory& workloadFactory,
283         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
284         const armnn::ITensorHandleFactory& tensorHandleFactory);
285 
286 template LayerTestResult<int32_t, 1>
287 RankDimSize1Test<armnn::DataType::QAsymmS8>(
288         armnn::IWorkloadFactory& workloadFactory,
289         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
290         const armnn::ITensorHandleFactory& tensorHandleFactory);
291 
292 template LayerTestResult<int32_t, 1>
293 RankDimSize1Test<armnn::DataType::BFloat16>(
294         armnn::IWorkloadFactory& workloadFactory,
295         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
296         const armnn::ITensorHandleFactory& tensorHandleFactory);