blob: 3ebb5236bcdd57b74f2608a5be1d2bffacec3a0e [file] [log] [blame]
Keith Davis3ae3f972021-05-21 16:33:48 +01001//
2// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ShapeTestImpl.hpp"
7
Sadik Armagana097d2a2021-11-24 15:47:28 +00008#include <DataTypeUtils.hpp>
9#include <armnnTestUtils/TensorCopyUtils.hpp>
10#include <WorkloadTestUtils.hpp>
Keith Davis3ae3f972021-05-21 16:33:48 +010011
Sadik Armagana097d2a2021-11-24 15:47:28 +000012#include <TensorHelpers.hpp>
Keith Davis3ae3f972021-05-21 16:33:48 +010013
14template<typename T, std::size_t n>
15LayerTestResult<int32_t, 1> ShapeTest(
16 armnn::TensorInfo inputTensorInfo,
17 std::vector<T> input,
18 armnn::TensorInfo outputTensorInfo,
19 std::vector<int32_t> expectedOutputData,
20 armnn::IWorkloadFactory& workloadFactory,
21 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
22 const armnn::ITensorHandleFactory& tensorHandleFactory)
23{
24 IgnoreUnused(memoryManager);
25
26 std::vector<int32_t> actualOutput(outputTensorInfo.GetNumElements());
27
28 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
29 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
30
31 armnn::ShapeQueueDescriptor data;
32 armnn::WorkloadInfo info;
33 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
34 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
35
36 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateShape(data, info);
37
38 inputHandle->Allocate();
39 outputHandle->Allocate();
40
41 CopyDataToITensorHandle(inputHandle.get(), input.data());
42
43 workload->Execute();
44
45 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
46
47 return LayerTestResult<int32_t, 1>(actualOutput,
48 expectedOutputData,
49 outputHandle->GetShape(),
50 outputTensorInfo.GetShape());
51}
52
53template<armnn::DataType ArmnnType, typename T>
54LayerTestResult<int32_t, 1> ShapeDimSize1Test(
55 armnn::IWorkloadFactory& workloadFactory,
56 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
57 const armnn::ITensorHandleFactory& tensorHandleFactory)
58{
59 armnn::TensorInfo inputTensorInfo({ 1 }, ArmnnType, 1.0f, 0);
60 armnn::TensorInfo outputTensorInfo({ 1 }, armnn::DataType::Signed32);
61
62 auto input = ConvertToDataType<ArmnnType>({ 1.0f }, inputTensorInfo);
63
64 return ShapeTest<T, 1>(inputTensorInfo, input, outputTensorInfo, { 1 }, workloadFactory, memoryManager,
65 tensorHandleFactory);
66}
67
68template<armnn::DataType ArmnnType, typename T>
69LayerTestResult<int32_t, 1> ShapeDimSize2Test(
70 armnn::IWorkloadFactory& workloadFactory,
71 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
72 const armnn::ITensorHandleFactory& tensorHandleFactory)
73{
74 armnn::TensorInfo inputTensorInfo({ 1, 2 }, ArmnnType, 1.0f, 0);
75 armnn::TensorInfo outputTensorInfo({ 2 }, armnn::DataType::Signed32);
76
77 auto input = ConvertToDataType<ArmnnType>({ 1.0f, 1.0f }, inputTensorInfo);
78
79 return ShapeTest<T, 2>(inputTensorInfo, input, outputTensorInfo, { 1, 2 }, workloadFactory, memoryManager,
80 tensorHandleFactory);
81}
82
83template<armnn::DataType ArmnnType, typename T>
84LayerTestResult<int32_t, 1> ShapeDimSize3Test(
85 armnn::IWorkloadFactory& workloadFactory,
86 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
87 const armnn::ITensorHandleFactory& tensorHandleFactory)
88{
89 armnn::TensorInfo inputTensorInfo({ 1, 2, 3 }, ArmnnType, 1.0f, 0);
90 armnn::TensorInfo outputTensorInfo({ 3 }, armnn::DataType::Signed32);
91
92 auto input = ConvertToDataType<ArmnnType>({ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }, inputTensorInfo);
93
94 return ShapeTest<T, 3>(inputTensorInfo, input, outputTensorInfo, { 1, 2, 3 }, workloadFactory, memoryManager,
95 tensorHandleFactory);
96}
97
98template<armnn::DataType ArmnnType, typename T>
99LayerTestResult<int32_t, 1> ShapeDimSize4Test(
100 armnn::IWorkloadFactory& workloadFactory,
101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
102 const armnn::ITensorHandleFactory& tensorHandleFactory)
103{
104 armnn::TensorInfo inputTensorInfo({ 2, 2, 3, 2 }, ArmnnType, 1.0f, 0);
105 armnn::TensorInfo outputTensorInfo({ 4 }, armnn::DataType::Signed32);
106
107 auto input = ConvertToDataType<ArmnnType>({ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
108 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
109 1.0f },
110 inputTensorInfo);
111
112 return ShapeTest<T, 4>(inputTensorInfo, input, outputTensorInfo, { 2, 2, 3, 2 }, workloadFactory, memoryManager,
113 tensorHandleFactory);
114}
115
116template LayerTestResult<int32_t, 1>
117ShapeDimSize4Test<armnn::DataType::Float16>(
118 armnn::IWorkloadFactory& workloadFactory,
119 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
120 const armnn::ITensorHandleFactory& tensorHandleFactory);
121
122template LayerTestResult<int32_t, 1>
123ShapeDimSize4Test<armnn::DataType::Float32>(
124 armnn::IWorkloadFactory& workloadFactory,
125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
126 const armnn::ITensorHandleFactory& tensorHandleFactory);
127
128template LayerTestResult<int32_t, 1>
129ShapeDimSize4Test<armnn::DataType::QAsymmU8>(
130 armnn::IWorkloadFactory& workloadFactory,
131 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
132 const armnn::ITensorHandleFactory& tensorHandleFactory);
133
134template LayerTestResult<int32_t, 1>
135ShapeDimSize4Test<armnn::DataType::Signed32>(
136 armnn::IWorkloadFactory& workloadFactory,
137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
138 const armnn::ITensorHandleFactory& tensorHandleFactory);
139
140template LayerTestResult<int32_t, 1>
141ShapeDimSize4Test<armnn::DataType::QSymmS16>(
142 armnn::IWorkloadFactory& workloadFactory,
143 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
144 const armnn::ITensorHandleFactory& tensorHandleFactory);
145
146template LayerTestResult<int32_t, 1>
147ShapeDimSize4Test<armnn::DataType::QSymmS8>(
148 armnn::IWorkloadFactory& workloadFactory,
149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
150 const armnn::ITensorHandleFactory& tensorHandleFactory);
151
152template LayerTestResult<int32_t, 1>
153ShapeDimSize4Test<armnn::DataType::QAsymmS8>(
154 armnn::IWorkloadFactory& workloadFactory,
155 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
156 const armnn::ITensorHandleFactory& tensorHandleFactory);
157
158template LayerTestResult<int32_t, 1>
159ShapeDimSize4Test<armnn::DataType::BFloat16>(
160 armnn::IWorkloadFactory& workloadFactory,
161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
162 const armnn::ITensorHandleFactory& tensorHandleFactory);
163
164template LayerTestResult<int32_t, 1>
165ShapeDimSize3Test<armnn::DataType::Float16>(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
168 const armnn::ITensorHandleFactory& tensorHandleFactory);
169
170template LayerTestResult<int32_t, 1>
171ShapeDimSize3Test<armnn::DataType::Float32>(
172 armnn::IWorkloadFactory& workloadFactory,
173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
174 const armnn::ITensorHandleFactory& tensorHandleFactory);
175
176template LayerTestResult<int32_t, 1>
177ShapeDimSize3Test<armnn::DataType::QAsymmU8>(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 const armnn::ITensorHandleFactory& tensorHandleFactory);
181
182template LayerTestResult<int32_t, 1>
183ShapeDimSize3Test<armnn::DataType::Signed32>(
184 armnn::IWorkloadFactory& workloadFactory,
185 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
186 const armnn::ITensorHandleFactory& tensorHandleFactory);
187
188template LayerTestResult<int32_t, 1>
189ShapeDimSize3Test<armnn::DataType::QSymmS16>(
190 armnn::IWorkloadFactory& workloadFactory,
191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
192 const armnn::ITensorHandleFactory& tensorHandleFactory);
193
194template LayerTestResult<int32_t, 1>
195ShapeDimSize3Test<armnn::DataType::QSymmS8>(
196 armnn::IWorkloadFactory& workloadFactory,
197 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
198 const armnn::ITensorHandleFactory& tensorHandleFactory);
199
200template LayerTestResult<int32_t, 1>
201ShapeDimSize3Test<armnn::DataType::QAsymmS8>(
202 armnn::IWorkloadFactory& workloadFactory,
203 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
204 const armnn::ITensorHandleFactory& tensorHandleFactory);
205
206template LayerTestResult<int32_t, 1>
207ShapeDimSize3Test<armnn::DataType::BFloat16>(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
210 const armnn::ITensorHandleFactory& tensorHandleFactory);
211
212template LayerTestResult<int32_t, 1>
213ShapeDimSize2Test<armnn::DataType::Float16>(
214 armnn::IWorkloadFactory& workloadFactory,
215 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
216 const armnn::ITensorHandleFactory& tensorHandleFactory);
217
218template LayerTestResult<int32_t, 1>
219ShapeDimSize2Test<armnn::DataType::Float32>(
220 armnn::IWorkloadFactory& workloadFactory,
221 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
222 const armnn::ITensorHandleFactory& tensorHandleFactory);
223
224template LayerTestResult<int32_t, 1>
225ShapeDimSize2Test<armnn::DataType::QAsymmU8>(
226 armnn::IWorkloadFactory& workloadFactory,
227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
228 const armnn::ITensorHandleFactory& tensorHandleFactory);
229
230template LayerTestResult<int32_t, 1>
231ShapeDimSize2Test<armnn::DataType::Signed32>(
232 armnn::IWorkloadFactory& workloadFactory,
233 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
234 const armnn::ITensorHandleFactory& tensorHandleFactory);
235
236template LayerTestResult<int32_t, 1>
237ShapeDimSize2Test<armnn::DataType::QSymmS16>(
238 armnn::IWorkloadFactory& workloadFactory,
239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
240 const armnn::ITensorHandleFactory& tensorHandleFactory);
241
242template LayerTestResult<int32_t, 1>
243ShapeDimSize2Test<armnn::DataType::QSymmS8>(
244 armnn::IWorkloadFactory& workloadFactory,
245 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
246 const armnn::ITensorHandleFactory& tensorHandleFactory);
247
248template LayerTestResult<int32_t, 1>
249ShapeDimSize2Test<armnn::DataType::QAsymmS8>(
250 armnn::IWorkloadFactory& workloadFactory,
251 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
252 const armnn::ITensorHandleFactory& tensorHandleFactory);
253
254template LayerTestResult<int32_t, 1>
255ShapeDimSize2Test<armnn::DataType::BFloat16>(
256 armnn::IWorkloadFactory& workloadFactory,
257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
258 const armnn::ITensorHandleFactory& tensorHandleFactory);
259
260template LayerTestResult<int32_t, 1>
261ShapeDimSize1Test<armnn::DataType::Float16>(
262 armnn::IWorkloadFactory& workloadFactory,
263 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
264 const armnn::ITensorHandleFactory& tensorHandleFactory);
265
266template LayerTestResult<int32_t, 1>
267ShapeDimSize1Test<armnn::DataType::Float32>(
268 armnn::IWorkloadFactory& workloadFactory,
269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
270 const armnn::ITensorHandleFactory& tensorHandleFactory);
271
272template LayerTestResult<int32_t, 1>
273ShapeDimSize1Test<armnn::DataType::QAsymmU8>(
274 armnn::IWorkloadFactory& workloadFactory,
275 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
276 const armnn::ITensorHandleFactory& tensorHandleFactory);
277
278template LayerTestResult<int32_t, 1>
279ShapeDimSize1Test<armnn::DataType::Signed32>(
280 armnn::IWorkloadFactory& workloadFactory,
281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
282 const armnn::ITensorHandleFactory& tensorHandleFactory);
283
284template LayerTestResult<int32_t, 1>
285ShapeDimSize1Test<armnn::DataType::QSymmS16>(
286 armnn::IWorkloadFactory& workloadFactory,
287 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
288 const armnn::ITensorHandleFactory& tensorHandleFactory);
289
290template LayerTestResult<int32_t, 1>
291ShapeDimSize1Test<armnn::DataType::QSymmS8>(
292 armnn::IWorkloadFactory& workloadFactory,
293 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
294 const armnn::ITensorHandleFactory& tensorHandleFactory);
295
296template LayerTestResult<int32_t, 1>
297ShapeDimSize1Test<armnn::DataType::QAsymmS8>(
298 armnn::IWorkloadFactory& workloadFactory,
299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
300 const armnn::ITensorHandleFactory& tensorHandleFactory);
301
302template LayerTestResult<int32_t, 1>
303ShapeDimSize1Test<armnn::DataType::BFloat16>(
304 armnn::IWorkloadFactory& workloadFactory,
305 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
306 const armnn::ITensorHandleFactory& tensorHandleFactory);