• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <backendsCommon/test/DataTypeUtils.hpp>
9 #include <backendsCommon/test/TensorCopyUtils.hpp>
10 #include <backendsCommon/test/WorkloadTestUtils.hpp>
11 
12 #include <test/TensorHelpers.hpp>
13 
14 template<typename T, std::size_t n>
RankTest(armnn::TensorInfo inputTensorInfo,boost::multi_array<T,n> input,armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)15 LayerTestResult<int32_t, 1> RankTest(
16         armnn::TensorInfo inputTensorInfo,
17         boost::multi_array<T, n> 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     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 
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.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>
RankDimSize1Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)53 LayerTestResult<int32_t, 1> RankDimSize1Test(
54         armnn::IWorkloadFactory& workloadFactory,
55         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize2Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)67 LayerTestResult<int32_t, 1> RankDimSize2Test(
68         armnn::IWorkloadFactory& workloadFactory,
69         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize3Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)81 LayerTestResult<int32_t, 1> RankDimSize3Test(
82         armnn::IWorkloadFactory& workloadFactory,
83         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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>
RankDimSize4Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)95 LayerTestResult<int32_t, 1> RankDimSize4Test(
96         armnn::IWorkloadFactory& workloadFactory,
97         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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 
109 template LayerTestResult<int32_t, 1>
110 RankDimSize4Test<armnn::DataType::Float16>(
111         armnn::IWorkloadFactory& workloadFactory,
112         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
113         const armnn::ITensorHandleFactory& tensorHandleFactory);
114 
115 template LayerTestResult<int32_t, 1>
116 RankDimSize4Test<armnn::DataType::Float32>(
117         armnn::IWorkloadFactory& workloadFactory,
118         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
119         const armnn::ITensorHandleFactory& tensorHandleFactory);
120 
121 template LayerTestResult<int32_t, 1>
122 RankDimSize4Test<armnn::DataType::QAsymmU8>(
123         armnn::IWorkloadFactory& workloadFactory,
124         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
125         const armnn::ITensorHandleFactory& tensorHandleFactory);
126 
127 template LayerTestResult<int32_t, 1>
128 RankDimSize4Test<armnn::DataType::Signed32>(
129         armnn::IWorkloadFactory& workloadFactory,
130         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
131         const armnn::ITensorHandleFactory& tensorHandleFactory);
132 
133 template LayerTestResult<int32_t, 1>
134 RankDimSize4Test<armnn::DataType::QSymmS16>(
135         armnn::IWorkloadFactory& workloadFactory,
136         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
137         const armnn::ITensorHandleFactory& tensorHandleFactory);
138 
139 template LayerTestResult<int32_t, 1>
140 RankDimSize4Test<armnn::DataType::QSymmS8>(
141         armnn::IWorkloadFactory& workloadFactory,
142         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
143         const armnn::ITensorHandleFactory& tensorHandleFactory);
144 
145 template LayerTestResult<int32_t, 1>
146 RankDimSize4Test<armnn::DataType::QAsymmS8>(
147         armnn::IWorkloadFactory& workloadFactory,
148         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
149         const armnn::ITensorHandleFactory& tensorHandleFactory);
150 
151 template LayerTestResult<int32_t, 1>
152 RankDimSize4Test<armnn::DataType::BFloat16>(
153         armnn::IWorkloadFactory& workloadFactory,
154         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
155         const armnn::ITensorHandleFactory& tensorHandleFactory);
156 
157 template LayerTestResult<int32_t, 1>
158 RankDimSize3Test<armnn::DataType::Float16>(
159         armnn::IWorkloadFactory& workloadFactory,
160         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
161         const armnn::ITensorHandleFactory& tensorHandleFactory);
162 
163 template LayerTestResult<int32_t, 1>
164 RankDimSize3Test<armnn::DataType::Float32>(
165         armnn::IWorkloadFactory& workloadFactory,
166         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
167         const armnn::ITensorHandleFactory& tensorHandleFactory);
168 
169 template LayerTestResult<int32_t, 1>
170 RankDimSize3Test<armnn::DataType::QAsymmU8>(
171         armnn::IWorkloadFactory& workloadFactory,
172         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
173         const armnn::ITensorHandleFactory& tensorHandleFactory);
174 
175 template LayerTestResult<int32_t, 1>
176 RankDimSize3Test<armnn::DataType::Signed32>(
177         armnn::IWorkloadFactory& workloadFactory,
178         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
179         const armnn::ITensorHandleFactory& tensorHandleFactory);
180 
181 template LayerTestResult<int32_t, 1>
182 RankDimSize3Test<armnn::DataType::QSymmS16>(
183         armnn::IWorkloadFactory& workloadFactory,
184         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
185         const armnn::ITensorHandleFactory& tensorHandleFactory);
186 
187 template LayerTestResult<int32_t, 1>
188 RankDimSize3Test<armnn::DataType::QSymmS8>(
189         armnn::IWorkloadFactory& workloadFactory,
190         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
191         const armnn::ITensorHandleFactory& tensorHandleFactory);
192 
193 template LayerTestResult<int32_t, 1>
194 RankDimSize3Test<armnn::DataType::QAsymmS8>(
195         armnn::IWorkloadFactory& workloadFactory,
196         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
197         const armnn::ITensorHandleFactory& tensorHandleFactory);
198 
199 template LayerTestResult<int32_t, 1>
200 RankDimSize3Test<armnn::DataType::BFloat16>(
201         armnn::IWorkloadFactory& workloadFactory,
202         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
203         const armnn::ITensorHandleFactory& tensorHandleFactory);
204 
205 template LayerTestResult<int32_t, 1>
206 RankDimSize2Test<armnn::DataType::Float16>(
207         armnn::IWorkloadFactory& workloadFactory,
208         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
209         const armnn::ITensorHandleFactory& tensorHandleFactory);
210 
211 template LayerTestResult<int32_t, 1>
212 RankDimSize2Test<armnn::DataType::Float32>(
213         armnn::IWorkloadFactory& workloadFactory,
214         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
215         const armnn::ITensorHandleFactory& tensorHandleFactory);
216 
217 template LayerTestResult<int32_t, 1>
218 RankDimSize2Test<armnn::DataType::QAsymmU8>(
219         armnn::IWorkloadFactory& workloadFactory,
220         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
221         const armnn::ITensorHandleFactory& tensorHandleFactory);
222 
223 template LayerTestResult<int32_t, 1>
224 RankDimSize2Test<armnn::DataType::Signed32>(
225         armnn::IWorkloadFactory& workloadFactory,
226         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
227         const armnn::ITensorHandleFactory& tensorHandleFactory);
228 
229 template LayerTestResult<int32_t, 1>
230 RankDimSize2Test<armnn::DataType::QSymmS16>(
231         armnn::IWorkloadFactory& workloadFactory,
232         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
233         const armnn::ITensorHandleFactory& tensorHandleFactory);
234 
235 template LayerTestResult<int32_t, 1>
236 RankDimSize2Test<armnn::DataType::QSymmS8>(
237         armnn::IWorkloadFactory& workloadFactory,
238         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
239         const armnn::ITensorHandleFactory& tensorHandleFactory);
240 
241 template LayerTestResult<int32_t, 1>
242 RankDimSize2Test<armnn::DataType::QAsymmS8>(
243         armnn::IWorkloadFactory& workloadFactory,
244         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
245         const armnn::ITensorHandleFactory& tensorHandleFactory);
246 
247 template LayerTestResult<int32_t, 1>
248 RankDimSize2Test<armnn::DataType::BFloat16>(
249         armnn::IWorkloadFactory& workloadFactory,
250         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
251         const armnn::ITensorHandleFactory& tensorHandleFactory);
252 
253 template LayerTestResult<int32_t, 1>
254 RankDimSize1Test<armnn::DataType::Float16>(
255         armnn::IWorkloadFactory& workloadFactory,
256         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
257         const armnn::ITensorHandleFactory& tensorHandleFactory);
258 
259 template LayerTestResult<int32_t, 1>
260 RankDimSize1Test<armnn::DataType::Float32>(
261         armnn::IWorkloadFactory& workloadFactory,
262         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
263         const armnn::ITensorHandleFactory& tensorHandleFactory);
264 
265 template LayerTestResult<int32_t, 1>
266 RankDimSize1Test<armnn::DataType::QAsymmU8>(
267         armnn::IWorkloadFactory& workloadFactory,
268         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
269         const armnn::ITensorHandleFactory& tensorHandleFactory);
270 
271 template LayerTestResult<int32_t, 1>
272 RankDimSize1Test<armnn::DataType::Signed32>(
273         armnn::IWorkloadFactory& workloadFactory,
274         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
275         const armnn::ITensorHandleFactory& tensorHandleFactory);
276 
277 template LayerTestResult<int32_t, 1>
278 RankDimSize1Test<armnn::DataType::QSymmS16>(
279         armnn::IWorkloadFactory& workloadFactory,
280         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
281         const armnn::ITensorHandleFactory& tensorHandleFactory);
282 
283 template LayerTestResult<int32_t, 1>
284 RankDimSize1Test<armnn::DataType::QSymmS8>(
285         armnn::IWorkloadFactory& workloadFactory,
286         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
287         const armnn::ITensorHandleFactory& tensorHandleFactory);
288 
289 template LayerTestResult<int32_t, 1>
290 RankDimSize1Test<armnn::DataType::QAsymmS8>(
291         armnn::IWorkloadFactory& workloadFactory,
292         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
293         const armnn::ITensorHandleFactory& tensorHandleFactory);
294 
295 template LayerTestResult<int32_t, 1>
296 RankDimSize1Test<armnn::DataType::BFloat16>(
297         armnn::IWorkloadFactory& workloadFactory,
298         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
299         const armnn::ITensorHandleFactory& tensorHandleFactory);