blob: 1dedfc390650c5dc2d72635d70260306f5431225 [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
Sadik Armagana097d2a2021-11-24 15:47:28 +00008#include <DataTypeUtils.hpp>
9#include <armnnTestUtils/TensorCopyUtils.hpp>
Colm Donelan0c479742021-12-10 12:43:54 +000010#include <armnnTestUtils/WorkloadTestUtils.hpp>
Finn Williams2605b232020-06-10 15:53:46 +010011
Colm Donelanc42a9872022-02-02 16:35:09 +000012#include <armnnTestUtils/TensorHelpers.hpp>
Finn Williams2605b232020-06-10 15:53:46 +010013
14template<typename T, std::size_t n>
15LayerTestResult<int32_t, 1> RankTest(
16 armnn::TensorInfo inputTensorInfo,
Sadik Armagan483c8112021-06-01 09:24:52 +010017 std::vector<T> input,
Finn Williams2605b232020-06-10 15:53:46 +010018 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
Sadik Armagan483c8112021-06-01 09:24:52 +010027 std::vector<int32_t> actualOutput(outputTensorInfo.GetNumElements());
28 std::vector<int32_t> expectedOutput = { n };
Finn Williams2605b232020-06-10 15:53:46 +010029
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
Teresa Charlin611c7fb2022-01-07 09:47:29 +000038 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Rank, data, info);
Finn Williams2605b232020-06-10 15:53:46 +010039
40 inputHandle->Allocate();
41 outputHandle->Allocate();
42
Sadik Armagan483c8112021-06-01 09:24:52 +010043 CopyDataToITensorHandle(inputHandle.get(), input.data());
Finn Williams2605b232020-06-10 15:53:46 +010044
45 workload->Execute();
46
Sadik Armagan483c8112021-06-01 09:24:52 +010047 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
Finn Williams2605b232020-06-10 15:53:46 +010048
Sadik Armagan483c8112021-06-01 09:24:52 +010049 return LayerTestResult<int32_t, 1>(actualOutput,
50 expectedOutput,
51 outputHandle->GetShape(),
52 outputTensorInfo.GetShape());
Finn Williams2605b232020-06-10 15:53:46 +010053}
54
55template<armnn::DataType ArmnnType, typename T>
56LayerTestResult<int32_t, 1> RankDimSize1Test(
57 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010058 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
59 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010060{
61 armnn::TensorInfo inputTensorInfo({6}, ArmnnType, 1.0f, 0);
Sadik Armagan483c8112021-06-01 09:24:52 +010062 auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f, -2.0f, -1.3f, -0.5f }, inputTensorInfo);
Finn Williams2605b232020-06-10 15:53:46 +010063
Finn Williamsec36d3e2020-08-28 13:17:05 +010064 return RankTest<T, 1>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010065}
66
67template<armnn::DataType ArmnnType, typename T>
68LayerTestResult<int32_t, 1> RankDimSize2Test(
69 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010070 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
71 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010072{
73 armnn::TensorInfo inputTensorInfo({1, 3}, ArmnnType, 1.0f, 0);
Sadik Armagan483c8112021-06-01 09:24:52 +010074 auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f }, inputTensorInfo);
Finn Williams2605b232020-06-10 15:53:46 +010075
Finn Williamsec36d3e2020-08-28 13:17:05 +010076 return RankTest<T, 2>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010077}
78
79template<armnn::DataType ArmnnType, typename T>
80LayerTestResult<int32_t, 1> RankDimSize3Test(
81 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010082 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
83 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010084{
85 armnn::TensorInfo inputTensorInfo({1, 3, 2}, ArmnnType, 1.0f, 0);
Sadik Armagan483c8112021-06-01 09:24:52 +010086 auto input = ConvertToDataType<ArmnnType>({ -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f}, inputTensorInfo);
Finn Williams2605b232020-06-10 15:53:46 +010087
Finn Williamsec36d3e2020-08-28 13:17:05 +010088 return RankTest<T, 3>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +010089}
90
91template<armnn::DataType ArmnnType, typename T>
92LayerTestResult<int32_t, 1> RankDimSize4Test(
93 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +010094 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
95 const armnn::ITensorHandleFactory& tensorHandleFactory)
Finn Williams2605b232020-06-10 15:53:46 +010096{
97 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType, 1.0f, 0);
Sadik Armagan483c8112021-06-01 09:24:52 +010098 auto input = ConvertToDataType<ArmnnType>(
Finn Williams2605b232020-06-10 15:53:46 +010099 { -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 },
Sadik Armagan483c8112021-06-01 09:24:52 +0100101 inputTensorInfo);
Finn Williams2605b232020-06-10 15:53:46 +0100102
Finn Williamsec36d3e2020-08-28 13:17:05 +0100103 return RankTest<T, 4>(inputTensorInfo, input, workloadFactory, memoryManager, tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100104}
105
106template LayerTestResult<int32_t, 1>
107RankDimSize4Test<armnn::DataType::Float16>(
108 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
110 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100111
112template LayerTestResult<int32_t, 1>
113RankDimSize4Test<armnn::DataType::Float32>(
114 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100115 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
116 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100117
118template LayerTestResult<int32_t, 1>
119RankDimSize4Test<armnn::DataType::QAsymmU8>(
120 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100121 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
122 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100123
124template LayerTestResult<int32_t, 1>
125RankDimSize4Test<armnn::DataType::Signed32>(
126 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100127 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
128 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100129
130template LayerTestResult<int32_t, 1>
131RankDimSize4Test<armnn::DataType::QSymmS16>(
132 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
134 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100135
136template LayerTestResult<int32_t, 1>
137RankDimSize4Test<armnn::DataType::QSymmS8>(
138 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100139 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
140 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100141
142template LayerTestResult<int32_t, 1>
143RankDimSize4Test<armnn::DataType::QAsymmS8>(
144 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
146 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100147
148template LayerTestResult<int32_t, 1>
149RankDimSize4Test<armnn::DataType::BFloat16>(
150 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
152 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100153
154template LayerTestResult<int32_t, 1>
155RankDimSize3Test<armnn::DataType::Float16>(
156 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
158 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100159
160template LayerTestResult<int32_t, 1>
161RankDimSize3Test<armnn::DataType::Float32>(
162 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100163 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
164 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100165
166template LayerTestResult<int32_t, 1>
167RankDimSize3Test<armnn::DataType::QAsymmU8>(
168 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
170 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100171
172template LayerTestResult<int32_t, 1>
173RankDimSize3Test<armnn::DataType::Signed32>(
174 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100175 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
176 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100177
178template LayerTestResult<int32_t, 1>
179RankDimSize3Test<armnn::DataType::QSymmS16>(
180 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100181 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
182 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100183
184template LayerTestResult<int32_t, 1>
185RankDimSize3Test<armnn::DataType::QSymmS8>(
186 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100187 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
188 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100189
190template LayerTestResult<int32_t, 1>
191RankDimSize3Test<armnn::DataType::QAsymmS8>(
192 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100193 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
194 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100195
196template LayerTestResult<int32_t, 1>
197RankDimSize3Test<armnn::DataType::BFloat16>(
198 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
200 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100201
202template LayerTestResult<int32_t, 1>
203RankDimSize2Test<armnn::DataType::Float16>(
204 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100205 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
206 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100207
208template LayerTestResult<int32_t, 1>
209RankDimSize2Test<armnn::DataType::Float32>(
210 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
212 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100213
214template LayerTestResult<int32_t, 1>
215RankDimSize2Test<armnn::DataType::QAsymmU8>(
216 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100217 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
218 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100219
220template LayerTestResult<int32_t, 1>
221RankDimSize2Test<armnn::DataType::Signed32>(
222 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100223 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
224 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100225
226template LayerTestResult<int32_t, 1>
227RankDimSize2Test<armnn::DataType::QSymmS16>(
228 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
230 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100231
232template LayerTestResult<int32_t, 1>
233RankDimSize2Test<armnn::DataType::QSymmS8>(
234 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
236 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100237
238template LayerTestResult<int32_t, 1>
239RankDimSize2Test<armnn::DataType::QAsymmS8>(
240 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100241 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
242 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100243
244template LayerTestResult<int32_t, 1>
245RankDimSize2Test<armnn::DataType::BFloat16>(
246 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100247 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
248 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100249
250template LayerTestResult<int32_t, 1>
251RankDimSize1Test<armnn::DataType::Float16>(
252 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
254 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100255
256template LayerTestResult<int32_t, 1>
257RankDimSize1Test<armnn::DataType::Float32>(
258 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
260 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100261
262template LayerTestResult<int32_t, 1>
263RankDimSize1Test<armnn::DataType::QAsymmU8>(
264 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
266 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100267
268template LayerTestResult<int32_t, 1>
269RankDimSize1Test<armnn::DataType::Signed32>(
270 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
272 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100273
274template LayerTestResult<int32_t, 1>
275RankDimSize1Test<armnn::DataType::QSymmS16>(
276 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100277 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
278 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100279
280template LayerTestResult<int32_t, 1>
281RankDimSize1Test<armnn::DataType::QSymmS8>(
282 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
284 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100285
286template LayerTestResult<int32_t, 1>
287RankDimSize1Test<armnn::DataType::QAsymmS8>(
288 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
290 const armnn::ITensorHandleFactory& tensorHandleFactory);
Finn Williams2605b232020-06-10 15:53:46 +0100291
292template LayerTestResult<int32_t, 1>
293RankDimSize1Test<armnn::DataType::BFloat16>(
294 armnn::IWorkloadFactory& workloadFactory,
Finn Williamsec36d3e2020-08-28 13:17:05 +0100295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
296 const armnn::ITensorHandleFactory& tensorHandleFactory);