blob: aeed272446eeff746d4349623dbec78775bd9663 [file] [log] [blame]
Finn Williams2605b232020-06-10 15:53:46 +01001//
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
14template<typename T, std::size_t n>
15LayerTestResult<int32_t, 1> RankTest(
16 armnn::TensorInfo inputTensorInfo,
17 boost::multi_array<T, n> input,
18 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010019 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
20 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010021{
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
Finn Williamsec36d3e2020-08-28 13:17:05 +010030 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
31 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
Finn Williams2605b232020-06-10 15:53:46 +010032
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
52template<armnn::DataType ArmnnType, typename T>
53LayerTestResult<int32_t, 1> RankDimSize1Test(
54 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010055 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
56 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010057{
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
Finn Williamsec36d3e2020-08-28 13:17:05 +010063 return RankTest<T, 1>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010064}
65
66template<armnn::DataType ArmnnType, typename T>
67LayerTestResult<int32_t, 1> RankDimSize2Test(
68 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010069 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
70 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010071{
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
Finn Williamsec36d3e2020-08-28 13:17:05 +010077 return RankTest<T, 2>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010078}
79
80template<armnn::DataType ArmnnType, typename T>
81LayerTestResult<int32_t, 1> RankDimSize3Test(
82 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010083 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
84 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010085{
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
Finn Williamsec36d3e2020-08-28 13:17:05 +010091 return RankTest<T, 3>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010092}
93
94template<armnn::DataType ArmnnType, typename T>
95LayerTestResult<int32_t, 1> RankDimSize4Test(
96 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010097 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
98 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010099{
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
Finn Williamsec36d3e2020-08-28 13:17:05 +0100106 return RankTest<T, 4>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100107}
108
109template LayerTestResult<int32_t, 1>
110RankDimSize4Test<armnn::DataType::Float16>(
111 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
113 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100114
115template LayerTestResult<int32_t, 1>
116RankDimSize4Test<armnn::DataType::Float32>(
117 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100118 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
119 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100120
121template LayerTestResult<int32_t, 1>
122RankDimSize4Test<armnn::DataType::QAsymmU8>(
123 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100124 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
125 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100126
127template LayerTestResult<int32_t, 1>
128RankDimSize4Test<armnn::DataType::Signed32>(
129 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
131 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100132
133template LayerTestResult<int32_t, 1>
134RankDimSize4Test<armnn::DataType::QSymmS16>(
135 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100136 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
137 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100138
139template LayerTestResult<int32_t, 1>
140RankDimSize4Test<armnn::DataType::QSymmS8>(
141 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
143 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100144
145template LayerTestResult<int32_t, 1>
146RankDimSize4Test<armnn::DataType::QAsymmS8>(
147 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100148 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
149 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100150
151template LayerTestResult<int32_t, 1>
152RankDimSize4Test<armnn::DataType::BFloat16>(
153 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
155 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100156
157template LayerTestResult<int32_t, 1>
158RankDimSize3Test<armnn::DataType::Float16>(
159 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100160 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
161 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100162
163template LayerTestResult<int32_t, 1>
164RankDimSize3Test<armnn::DataType::Float32>(
165 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100166 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
167 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100168
169template LayerTestResult<int32_t, 1>
170RankDimSize3Test<armnn::DataType::QAsymmU8>(
171 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
173 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100174
175template LayerTestResult<int32_t, 1>
176RankDimSize3Test<armnn::DataType::Signed32>(
177 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
179 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100180
181template LayerTestResult<int32_t, 1>
182RankDimSize3Test<armnn::DataType::QSymmS16>(
183 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
185 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100186
187template LayerTestResult<int32_t, 1>
188RankDimSize3Test<armnn::DataType::QSymmS8>(
189 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
191 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100192
193template LayerTestResult<int32_t, 1>
194RankDimSize3Test<armnn::DataType::QAsymmS8>(
195 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
197 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100198
199template LayerTestResult<int32_t, 1>
200RankDimSize3Test<armnn::DataType::BFloat16>(
201 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100202 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
203 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100204
205template LayerTestResult<int32_t, 1>
206RankDimSize2Test<armnn::DataType::Float16>(
207 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100208 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
209 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100210
211template LayerTestResult<int32_t, 1>
212RankDimSize2Test<armnn::DataType::Float32>(
213 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
215 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100216
217template LayerTestResult<int32_t, 1>
218RankDimSize2Test<armnn::DataType::QAsymmU8>(
219 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100220 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
221 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100222
223template LayerTestResult<int32_t, 1>
224RankDimSize2Test<armnn::DataType::Signed32>(
225 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
227 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100228
229template LayerTestResult<int32_t, 1>
230RankDimSize2Test<armnn::DataType::QSymmS16>(
231 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100232 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
233 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100234
235template LayerTestResult<int32_t, 1>
236RankDimSize2Test<armnn::DataType::QSymmS8>(
237 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100238 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
239 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100240
241template LayerTestResult<int32_t, 1>
242RankDimSize2Test<armnn::DataType::QAsymmS8>(
243 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
245 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100246
247template LayerTestResult<int32_t, 1>
248RankDimSize2Test<armnn::DataType::BFloat16>(
249 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100250 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
251 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100252
253template LayerTestResult<int32_t, 1>
254RankDimSize1Test<armnn::DataType::Float16>(
255 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
257 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100258
259template LayerTestResult<int32_t, 1>
260RankDimSize1Test<armnn::DataType::Float32>(
261 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100262 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
263 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100264
265template LayerTestResult<int32_t, 1>
266RankDimSize1Test<armnn::DataType::QAsymmU8>(
267 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100268 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
269 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100270
271template LayerTestResult<int32_t, 1>
272RankDimSize1Test<armnn::DataType::Signed32>(
273 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100274 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
275 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100276
277template LayerTestResult<int32_t, 1>
278RankDimSize1Test<armnn::DataType::QSymmS16>(
279 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
281 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100282
283template LayerTestResult<int32_t, 1>
284RankDimSize1Test<armnn::DataType::QSymmS8>(
285 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100286 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
287 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100288
289template LayerTestResult<int32_t, 1>
290RankDimSize1Test<armnn::DataType::QAsymmS8>(
291 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
293 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100294
295template LayerTestResult<int32_t, 1>
296RankDimSize1Test<armnn::DataType::BFloat16>(
297 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100298 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
299 const armnn::ITensorHandleFactory& tensorHandleFactory);