ArmNN
 20.08
SubtractionTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
9 
10 template<>
11 std::unique_ptr<armnn::IWorkload> CreateWorkload<armnn::SubtractionQueueDescriptor>(
12  const armnn::IWorkloadFactory& workloadFactory,
13  const armnn::WorkloadInfo& info,
14  const armnn::SubtractionQueueDescriptor& descriptor)
15 {
16  return workloadFactory.CreateSubtraction(descriptor, info);
17 }
18 
20  armnn::IWorkloadFactory& workloadFactory,
22 {
23  const unsigned int shape0[] = { 1, 1, 2, 2 };
24  const unsigned int shape1[] = { 1, 1, 2, 2 };
25 
26  std::vector<uint8_t> input0 = { 10, 12, 14, 16 };
27  std::vector<uint8_t> input1 = { 1, 2, 1, 2 };
28  std::vector<uint8_t> output = { 3, 3, 5, 5 };
29 
30  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QAsymmU8>(
31  workloadFactory,
32  memoryManager,
33  shape0,
34  input0,
35  0.5f,
36  2,
37  shape1,
38  input1,
39  1.0f,
40  0,
41  shape0,
42  output,
43  1.0f,
44  0);
45 }
46 
48  armnn::IWorkloadFactory& workloadFactory,
50 {
51  const unsigned int shape0[] = { 1, 1, 2, 2 };
52  const unsigned int shape1[] = { 1, 1, 1, 1 };
53 
54  std::vector<uint8_t> input0 = { 10, 12, 14, 16 };
55 
56  std::vector<uint8_t> input1 = { 2 };
57 
58  std::vector<uint8_t> output = { 5, 6, 7, 8 };
59 
60  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QAsymmU8>(
61  workloadFactory,
62  memoryManager,
63  shape0,
64  input0,
65  0.5f,
66  2,
67  shape1,
68  input1,
69  1.0f,
70  0,
71  shape0,
72  output,
73  1.0f,
74  3);
75 }
76 
78  armnn::IWorkloadFactory& workloadFactory,
80 {
81  const unsigned int shape0[] = { 1, 1, 2, 2 };
82  const unsigned int shape1[] = { 1, 1, 2, 1 };
83 
84  std::vector<uint8_t> input0 = { 10, 12, 14, 16 };
85 
86  std::vector<uint8_t> input1 = { 2, 1 };
87 
88  std::vector<uint8_t> output = { 8, 11, 12, 15 };
89 
90  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QAsymmU8>(
91  workloadFactory,
92  memoryManager,
93  shape0,
94  input0,
95  shape1,
96  input1,
97  shape0,
98  output);
99 }
100 
102  armnn::IWorkloadFactory& workloadFactory,
104 {
105  const unsigned int shape0[] = { 1, 1, 2, 2 };
106  const unsigned int shape1[] = { 1, 1, 2, 2 };
107 
108  std::vector<float> input0 = { 1, 2, 3, 4 };
109  std::vector<float> input1 = { 1, -1, 0, 2 };
110  std::vector<float> output = { 0, 3, 3, 2 };
111 
112  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float32>(
113  workloadFactory,
114  memoryManager,
115  shape0,
116  input0,
117  shape1,
118  input1,
119  shape0,
120  output);
121 }
122 
124  armnn::IWorkloadFactory& workloadFactory,
126 {
127  const unsigned int shape0[] = { 1, 1, 2, 2 };
128  const unsigned int shape1[] = { 1, 1, 1, 1 };
129 
130  std::vector<float> input0 = { 1, 2, 3, 4 };
131 
132  std::vector<float> input1 = { 10 };
133 
134  std::vector<float> output = { -9, -8, -7, -6 };
135 
136  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float32>(
137  workloadFactory,
138  memoryManager,
139  shape0,
140  input0,
141  shape1,
142  input1,
143  shape0,
144  output);
145 }
146 
148  armnn::IWorkloadFactory& workloadFactory,
150 {
151  const unsigned int shape0[] = { 1, 1, 2, 2 };
152  const unsigned int shape1[] = { 1, 1, 1, 2 };
153 
154  std::vector<float> input0 = { 1, 2, 3, 4 };
155 
156  std::vector<float> input1 = { 10, -5 };
157 
158  std::vector<float> output = { -9, 7, -7, 9 };
159 
160  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float32>(
161  workloadFactory,
162  memoryManager,
163  shape0,
164  input0,
165  shape1,
166  input1,
167  shape0,
168  output);
169 }
170 
172  armnn::IWorkloadFactory& workloadFactory,
174 {
175  using namespace half_float::literal;
176 
177  const unsigned int shape0[] = { 1, 1, 2, 2 };
178  const unsigned int shape1[] = { 1, 1, 2, 2 };
179 
180  std::vector<armnn::Half> input0 = { 1._h, 2._h, 3._h, 4._h };
181  std::vector<armnn::Half> input1 = { 1._h, -1._h, 0._h, 2._h };
182  std::vector<armnn::Half> output = { 0._h, 3._h, 3._h, 2._h };
183 
184  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float16>(
185  workloadFactory,
186  memoryManager,
187  shape0,
188  input0,
189  shape1,
190  input1,
191  shape0,
192  output);
193 }
194 
196  armnn::IWorkloadFactory& workloadFactory,
198 {
199  using namespace half_float::literal;
200 
201  const unsigned int shape0[] = { 1, 1, 2, 2 };
202  const unsigned int shape1[] = { 1, 1, 1, 1 };
203 
204  std::vector<armnn::Half> input0 = { 1._h, 2._h, 3._h, 4._h };
205 
206  std::vector<armnn::Half> input1 = { 10._h };
207 
208  std::vector<armnn::Half> output = { -9._h, -8._h, -7._h, -6._h };
209 
210  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float16>(
211  workloadFactory,
212  memoryManager,
213  shape0,
214  input0,
215  shape1,
216  input1,
217  shape0,
218  output);
219 }
220 
222  armnn::IWorkloadFactory& workloadFactory,
224 {
225  using namespace half_float::literal;
226 
227  const unsigned int shape0[] = { 1, 1, 2, 2 };
228  const unsigned int shape1[] = { 1, 1, 1, 2 };
229 
230  std::vector<armnn::Half> input0 = { 1._h, 2._h, 3._h, 4._h };
231 
232  std::vector<armnn::Half> input1 = { 10._h, -5._h };
233 
234  std::vector<armnn::Half> output = { -9._h, 7._h, -7._h, 9._h };
235 
236  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Float16>(
237  workloadFactory,
238  memoryManager,
239  shape0,
240  input0,
241  shape1,
242  input1,
243  shape0,
244  output);
245 }
246 
248  armnn::IWorkloadFactory& workloadFactory,
250 {
251  const unsigned int shape[] = { 1, 1, 2, 2 };
252 
253  std::vector<int16_t> input0 = { 10, 12, 14, 16 };
254  std::vector<int16_t> input1 = { 1, 2, 1, 2 };
255  std::vector<int16_t> output = { 3, 3, 5, 5 };
256 
257  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QSymmS16>(
258  workloadFactory,
259  memoryManager,
260  shape,
261  input0,
262  0.5f,
263  0,
264  shape,
265  input1,
266  1.0f,
267  0,
268  shape,
269  output,
270  1.0f,
271  0);
272 }
273 
275  armnn::IWorkloadFactory& workloadFactory,
277 {
278  const unsigned int shape0[] = { 1, 1, 2, 2 };
279  const unsigned int shape1[] = { 1, 1, 1, 1 };
280 
281  std::vector<int16_t> input0 = { 10, 12, 14, 16 };
282 
283  std::vector<int16_t> input1 = { 2 };
284 
285  std::vector<int16_t> output = { 3, 4, 5, 6 };
286 
287  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QSymmS16>(
288  workloadFactory,
289  memoryManager,
290  shape0,
291  input0,
292  0.5f,
293  0,
294  shape1,
295  input1,
296  1.0f,
297  0,
298  shape0,
299  output,
300  1.0f,
301  0);
302 }
303 
305  armnn::IWorkloadFactory& workloadFactory,
307 {
308  const unsigned int shape0[] = { 1, 1, 2, 2 };
309  const unsigned int shape1[] = { 1, 1, 2, 1 };
310 
311  std::vector<int16_t> input0 = { 10, 12, 14, 16 };
312 
313  std::vector<int16_t> input1 = { 2, 1 };
314 
315  std::vector<int16_t> output = { 8, 11, 12, 15 };
316 
317  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::QSymmS16>(
318  workloadFactory,
319  memoryManager,
320  shape0,
321  input0,
322  shape1,
323  input1,
324  shape0,
325  output);
326 }
327 
329  armnn::IWorkloadFactory& workloadFactory,
331 {
332  const unsigned int shape[] = { 1, 1, 2, 2 };
333 
334  std::vector<int32_t> input0 = { 5, 6, 7, 8 };
335  std::vector<int32_t> input1 = { 1, 2, 1, 2 };
336  std::vector<int32_t> output = { 4, 4, 6, 6 };
337 
338  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Signed32>(
339  workloadFactory,
340  memoryManager,
341  shape,
342  input0,
343  1.0f,
344  0,
345  shape,
346  input1,
347  1.0f,
348  0,
349  shape,
350  output,
351  1.0f,
352  0);
353 }
354 
356  armnn::IWorkloadFactory& workloadFactory,
358 {
359  const unsigned int shape0[] = { 1, 1, 2, 2 };
360  const unsigned int shape1[] = { 1, 1, 1, 1 };
361 
362  std::vector<int32_t> input0 = { 5, 6, 7, 8 };
363 
364  std::vector<int32_t> input1 = { 2 };
365 
366  std::vector<int32_t> output = { 3, 4, 5, 6 };
367 
368  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Signed32>(
369  workloadFactory,
370  memoryManager,
371  shape0,
372  input0,
373  1.0f,
374  0,
375  shape1,
376  input1,
377  1.0f,
378  0,
379  shape0,
380  output,
381  1.0f,
382  0);
383 }
384 
386  armnn::IWorkloadFactory& workloadFactory,
388 {
389  const unsigned int shape0[] = { 1, 1, 2, 2 };
390  const unsigned int shape1[] = { 1, 1, 2, 1 };
391 
392  std::vector<int32_t> input0 = { 10, 12, 14, 16 };
393 
394  std::vector<int32_t> input1 = { 2, 1 };
395 
396  std::vector<int32_t> output = { 8, 11, 12, 15 };
397 
398  return ElementwiseTestHelper<4, armnn::SubtractionQueueDescriptor, armnn::DataType::Signed32>(
399  workloadFactory,
400  memoryManager,
401  shape0,
402  input0,
403  shape1,
404  input1,
405  shape0,
406  output);
407 }
LayerTestResult< int32_t, 4 > SubtractionBroadcastInt32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int32_t, 4 > SubtractionBroadcast1ElementInt32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::Half, 4 > SubtractionBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 4 > SubtractionInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 4 > SubtractionBroadcast1ElementInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 4 > SubtractionBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 4 > SubtractionBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int16_t, 4 > SubtractionBroadcastInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< int32_t, 4 > SubtractionInt32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< float, 4 > SubtractionTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::Half, 4 > SubtractionBroadcastFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 4 > SubtractionUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
Contains information about inputs and outputs to a layer.
LayerTestResult< float, 4 > SubtractionBroadcastTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< uint8_t, 4 > SubtractionBroadcastUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::Half, 4 > SubtractionFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)