ArmNN
 21.08
ShapeTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ShapeTestImpl.hpp"
7 
11 
12 #include <test/TensorHelpers.hpp>
13 
14 template<typename T, std::size_t n>
16  armnn::TensorInfo inputTensorInfo,
17  std::vector<T> input,
18  armnn::TensorInfo outputTensorInfo,
19  std::vector<int32_t> expectedOutputData,
20  armnn::IWorkloadFactory& workloadFactory,
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 
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 
53 template<armnn::DataType ArmnnType, typename T>
55  armnn::IWorkloadFactory& workloadFactory,
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 
68 template<armnn::DataType ArmnnType, typename T>
70  armnn::IWorkloadFactory& workloadFactory,
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 
83 template<armnn::DataType ArmnnType, typename T>
85  armnn::IWorkloadFactory& workloadFactory,
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 
98 template<armnn::DataType ArmnnType, typename T>
100  armnn::IWorkloadFactory& workloadFactory,
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 
117 ShapeDimSize4Test<armnn::DataType::Float16>(
118  armnn::IWorkloadFactory& workloadFactory,
120  const armnn::ITensorHandleFactory& tensorHandleFactory);
121 
123 ShapeDimSize4Test<armnn::DataType::Float32>(
124  armnn::IWorkloadFactory& workloadFactory,
126  const armnn::ITensorHandleFactory& tensorHandleFactory);
127 
129 ShapeDimSize4Test<armnn::DataType::QAsymmU8>(
130  armnn::IWorkloadFactory& workloadFactory,
132  const armnn::ITensorHandleFactory& tensorHandleFactory);
133 
135 ShapeDimSize4Test<armnn::DataType::Signed32>(
136  armnn::IWorkloadFactory& workloadFactory,
138  const armnn::ITensorHandleFactory& tensorHandleFactory);
139 
141 ShapeDimSize4Test<armnn::DataType::QSymmS16>(
142  armnn::IWorkloadFactory& workloadFactory,
144  const armnn::ITensorHandleFactory& tensorHandleFactory);
145 
147 ShapeDimSize4Test<armnn::DataType::QSymmS8>(
148  armnn::IWorkloadFactory& workloadFactory,
150  const armnn::ITensorHandleFactory& tensorHandleFactory);
151 
153 ShapeDimSize4Test<armnn::DataType::QAsymmS8>(
154  armnn::IWorkloadFactory& workloadFactory,
156  const armnn::ITensorHandleFactory& tensorHandleFactory);
157 
159 ShapeDimSize4Test<armnn::DataType::BFloat16>(
160  armnn::IWorkloadFactory& workloadFactory,
162  const armnn::ITensorHandleFactory& tensorHandleFactory);
163 
165 ShapeDimSize3Test<armnn::DataType::Float16>(
166  armnn::IWorkloadFactory& workloadFactory,
168  const armnn::ITensorHandleFactory& tensorHandleFactory);
169 
171 ShapeDimSize3Test<armnn::DataType::Float32>(
172  armnn::IWorkloadFactory& workloadFactory,
174  const armnn::ITensorHandleFactory& tensorHandleFactory);
175 
177 ShapeDimSize3Test<armnn::DataType::QAsymmU8>(
178  armnn::IWorkloadFactory& workloadFactory,
180  const armnn::ITensorHandleFactory& tensorHandleFactory);
181 
183 ShapeDimSize3Test<armnn::DataType::Signed32>(
184  armnn::IWorkloadFactory& workloadFactory,
186  const armnn::ITensorHandleFactory& tensorHandleFactory);
187 
189 ShapeDimSize3Test<armnn::DataType::QSymmS16>(
190  armnn::IWorkloadFactory& workloadFactory,
192  const armnn::ITensorHandleFactory& tensorHandleFactory);
193 
195 ShapeDimSize3Test<armnn::DataType::QSymmS8>(
196  armnn::IWorkloadFactory& workloadFactory,
198  const armnn::ITensorHandleFactory& tensorHandleFactory);
199 
201 ShapeDimSize3Test<armnn::DataType::QAsymmS8>(
202  armnn::IWorkloadFactory& workloadFactory,
204  const armnn::ITensorHandleFactory& tensorHandleFactory);
205 
207 ShapeDimSize3Test<armnn::DataType::BFloat16>(
208  armnn::IWorkloadFactory& workloadFactory,
210  const armnn::ITensorHandleFactory& tensorHandleFactory);
211 
213 ShapeDimSize2Test<armnn::DataType::Float16>(
214  armnn::IWorkloadFactory& workloadFactory,
216  const armnn::ITensorHandleFactory& tensorHandleFactory);
217 
219 ShapeDimSize2Test<armnn::DataType::Float32>(
220  armnn::IWorkloadFactory& workloadFactory,
222  const armnn::ITensorHandleFactory& tensorHandleFactory);
223 
225 ShapeDimSize2Test<armnn::DataType::QAsymmU8>(
226  armnn::IWorkloadFactory& workloadFactory,
228  const armnn::ITensorHandleFactory& tensorHandleFactory);
229 
231 ShapeDimSize2Test<armnn::DataType::Signed32>(
232  armnn::IWorkloadFactory& workloadFactory,
234  const armnn::ITensorHandleFactory& tensorHandleFactory);
235 
237 ShapeDimSize2Test<armnn::DataType::QSymmS16>(
238  armnn::IWorkloadFactory& workloadFactory,
240  const armnn::ITensorHandleFactory& tensorHandleFactory);
241 
243 ShapeDimSize2Test<armnn::DataType::QSymmS8>(
244  armnn::IWorkloadFactory& workloadFactory,
246  const armnn::ITensorHandleFactory& tensorHandleFactory);
247 
249 ShapeDimSize2Test<armnn::DataType::QAsymmS8>(
250  armnn::IWorkloadFactory& workloadFactory,
252  const armnn::ITensorHandleFactory& tensorHandleFactory);
253 
255 ShapeDimSize2Test<armnn::DataType::BFloat16>(
256  armnn::IWorkloadFactory& workloadFactory,
258  const armnn::ITensorHandleFactory& tensorHandleFactory);
259 
261 ShapeDimSize1Test<armnn::DataType::Float16>(
262  armnn::IWorkloadFactory& workloadFactory,
264  const armnn::ITensorHandleFactory& tensorHandleFactory);
265 
267 ShapeDimSize1Test<armnn::DataType::Float32>(
268  armnn::IWorkloadFactory& workloadFactory,
270  const armnn::ITensorHandleFactory& tensorHandleFactory);
271 
273 ShapeDimSize1Test<armnn::DataType::QAsymmU8>(
274  armnn::IWorkloadFactory& workloadFactory,
276  const armnn::ITensorHandleFactory& tensorHandleFactory);
277 
279 ShapeDimSize1Test<armnn::DataType::Signed32>(
280  armnn::IWorkloadFactory& workloadFactory,
282  const armnn::ITensorHandleFactory& tensorHandleFactory);
283 
285 ShapeDimSize1Test<armnn::DataType::QSymmS16>(
286  armnn::IWorkloadFactory& workloadFactory,
288  const armnn::ITensorHandleFactory& tensorHandleFactory);
289 
291 ShapeDimSize1Test<armnn::DataType::QSymmS8>(
292  armnn::IWorkloadFactory& workloadFactory,
294  const armnn::ITensorHandleFactory& tensorHandleFactory);
295 
297 ShapeDimSize1Test<armnn::DataType::QAsymmS8>(
298  armnn::IWorkloadFactory& workloadFactory,
300  const armnn::ITensorHandleFactory& tensorHandleFactory);
301 
303 ShapeDimSize1Test<armnn::DataType::BFloat16>(
304  armnn::IWorkloadFactory& workloadFactory,
306  const armnn::ITensorHandleFactory& tensorHandleFactory);
const TensorShape & GetShape() const
Definition: Tensor.hpp:191
LayerTestResult< int32_t, 1 > ShapeDimSize4Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void IgnoreUnused(Ts &&...)
LayerTestResult< int32_t, 1 > ShapeDimSize1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int32_t, 1 > ShapeTest(armnn::TensorInfo inputTensorInfo, std::vector< T > input, armnn::TensorInfo outputTensorInfo, std::vector< int32_t > expectedOutputData, armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
Contains information about TensorInfos of a layer.
LayerTestResult< int32_t, 1 > ShapeDimSize3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
virtual std::unique_ptr< IWorkload > CreateShape(const ShapeQueueDescriptor &descriptor, const WorkloadInfo &info) const
LayerTestResult< int32_t, 1 > ShapeDimSize2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
unsigned int GetNumElements() const
Definition: Tensor.hpp:196
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)