ArmNN
 21.05
ComparisonTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ComparisonTestImpl.hpp"
7 
9 #include <Half.hpp>
10 #include <QuantizeHelper.hpp>
11 #include <ResolveType.hpp>
12 
15 
18 
19 #include <test/TensorHelpers.hpp>
20 
21 namespace
22 {
23 
24 template <std::size_t NumDims,
25  armnn::DataType ArmnnInType,
26  typename InType = armnn::ResolveType<ArmnnInType>>
27 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
28  armnn::IWorkloadFactory & workloadFactory,
30  const armnn::ITensorHandleFactory& tensorHandleFactory,
31  const armnn::ComparisonDescriptor& descriptor,
32  const armnn::TensorShape& shape0,
33  std::vector<InType> values0,
34  float quantScale0,
35  int quantOffset0,
36  const armnn::TensorShape& shape1,
37  std::vector<InType> values1,
38  float quantScale1,
39  int quantOffset1,
40  const armnn::TensorShape& outShape,
41  std::vector<uint8_t> outValues,
42  float outQuantScale,
43  int outQuantOffset)
44 {
45  IgnoreUnused(memoryManager);
46  ARMNN_ASSERT(shape0.GetNumDimensions() == NumDims);
47  armnn::TensorInfo inputTensorInfo0(shape0, ArmnnInType, quantScale0, quantOffset0);
48 
49  ARMNN_ASSERT(shape1.GetNumDimensions() == NumDims);
50  armnn::TensorInfo inputTensorInfo1(shape1, ArmnnInType, quantScale1, quantOffset1);
51 
52  ARMNN_ASSERT(outShape.GetNumDimensions() == NumDims);
53  armnn::TensorInfo outputTensorInfo(outShape, armnn::DataType::Boolean, outQuantScale, outQuantOffset);
54 
55  auto input0 = MakeTensor<InType, NumDims>(inputTensorInfo0, values0);
56  auto input1 = MakeTensor<InType, NumDims>(inputTensorInfo1, values1);
57 
58  LayerTestResult<uint8_t, NumDims> ret(outputTensorInfo);
59 
60  std::unique_ptr<armnn::ITensorHandle> inputHandle0 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo0);
61  std::unique_ptr<armnn::ITensorHandle> inputHandle1 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo1);
62  std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
63 
65  qDescriptor.m_Parameters = descriptor;
66 
68  AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get());
69  AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get());
70  AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get());
71 
72  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateComparison(qDescriptor, info);
73 
74  inputHandle0->Allocate();
75  inputHandle1->Allocate();
76  outputHandle->Allocate();
77 
78  CopyDataToITensorHandle(inputHandle0.get(), input0.origin());
79  CopyDataToITensorHandle(inputHandle1.get(), input1.origin());
80 
81  workload->PostAllocationConfigure();
82  ExecuteWorkload(*workload, memoryManager);
83 
84  CopyDataFromITensorHandle(ret.output.origin(), outputHandle.get());
85 
86  ret.outputExpected = MakeTensor<uint8_t, NumDims>(outputTensorInfo, outValues);
87  ret.compareBoolean = true;
88 
89  return ret;
90 }
91 
92 template <std::size_t NumDims,
93  armnn::DataType ArmnnInType,
94  typename InType = armnn::ResolveType<ArmnnInType>>
95 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
96  armnn::IWorkloadFactory & workloadFactory,
98  const armnn::ITensorHandleFactory& tensorHandleFactory,
99  const armnn::ComparisonDescriptor& descriptor,
100  const armnn::TensorShape& shape0,
101  std::vector<InType> values0,
102  const armnn::TensorShape& shape1,
103  std::vector<InType> values1,
104  const armnn::TensorShape outShape,
105  std::vector<uint8_t> outValues,
106  float quantScale = 1.f,
107  int quantOffset = 0)
108 {
109  return ComparisonTestImpl<NumDims, ArmnnInType>(
110  workloadFactory,
111  memoryManager,
112  tensorHandleFactory,
113  descriptor,
114  shape0,
115  values0,
116  quantScale,
117  quantOffset,
118  shape1,
119  values1,
120  quantScale,
121  quantOffset,
122  outShape,
123  outValues,
124  quantScale,
125  quantOffset);
126 }
127 
128 template<typename TestData>
129 std::vector<uint8_t> GetExpectedOutputData(const TestData& testData, armnn::ComparisonOperation operation)
130 {
131  switch (operation)
132  {
134  return testData.m_OutputEqual;
136  return testData.m_OutputGreater;
138  return testData.m_OutputGreaterOrEqual;
140  return testData.m_OutputLess;
142  return testData.m_OutputLessOrEqual;
144  default:
145  return testData.m_OutputNotEqual;
146  }
147 }
148 
149 template<armnn::DataType ArmnnInType, typename TestData>
150 LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
152  const armnn::ITensorHandleFactory& tensorHandleFactory,
153  const TestData& testData,
154  armnn::ComparisonOperation operation,
155  float quantScale = 1.f,
156  int quantOffset = 0)
157 {
159 
160  std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
161  std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
162 
163  return ComparisonTestImpl<4, ArmnnInType>(
164  workloadFactory,
165  memoryManager,
166  tensorHandleFactory,
167  armnn::ComparisonDescriptor(operation),
168  testData.m_InputShape0,
169  inputData0,
170  testData.m_InputShape1,
171  inputData1,
172  testData.m_OutputShape,
173  GetExpectedOutputData(testData, operation),
174  quantScale,
175  quantOffset);
176 }
177 
178 class ComparisonTestData
179 {
180 public:
181  ComparisonTestData() = default;
182  virtual ~ComparisonTestData() = default;
183 
184  armnn::TensorShape m_InputShape0;
185  armnn::TensorShape m_InputShape1;
186  armnn::TensorShape m_OutputShape;
187 
188  std::vector<float> m_InputData0;
189  std::vector<float> m_InputData1;
190 
191  std::vector<uint8_t> m_OutputEqual;
192  std::vector<uint8_t> m_OutputGreater;
193  std::vector<uint8_t> m_OutputGreaterOrEqual;
194  std::vector<uint8_t> m_OutputLess;
195  std::vector<uint8_t> m_OutputLessOrEqual;
196  std::vector<uint8_t> m_OutputNotEqual;
197 };
198 
199 class SimpleTestData : public ComparisonTestData
200 {
201 public:
202  SimpleTestData() : ComparisonTestData()
203  {
204  m_InputShape0 = { 2, 2, 2, 2 };
205 
206  m_InputShape1 = m_InputShape0;
207  m_OutputShape = m_InputShape0;
208 
209  m_InputData0 =
210  {
211  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
212  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
213  };
214 
215  m_InputData1 =
216  {
217  1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
218  5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
219  };
220 
221  m_OutputEqual =
222  {
223  1, 1, 1, 1, 0, 0, 0, 0,
224  0, 0, 0, 0, 1, 1, 1, 1
225  };
226 
227  m_OutputGreater =
228  {
229  0, 0, 0, 0, 1, 1, 1, 1,
230  0, 0, 0, 0, 0, 0, 0, 0
231  };
232 
233  m_OutputGreaterOrEqual =
234  {
235  1, 1, 1, 1, 1, 1, 1, 1,
236  0, 0, 0, 0, 1, 1, 1, 1
237  };
238 
239  m_OutputLess =
240  {
241  0, 0, 0, 0, 0, 0, 0, 0,
242  1, 1, 1, 1, 0, 0, 0, 0
243  };
244 
245  m_OutputLessOrEqual =
246  {
247  1, 1, 1, 1, 0, 0, 0, 0,
248  1, 1, 1, 1, 1, 1, 1, 1
249  };
250 
251  m_OutputNotEqual =
252  {
253  0, 0, 0, 0, 1, 1, 1, 1,
254  1, 1, 1, 1, 0, 0, 0, 0
255  };
256  }
257 };
258 
259 class Broadcast1ElementTestData : public ComparisonTestData
260 {
261 public:
262  Broadcast1ElementTestData() : ComparisonTestData()
263  {
264  m_InputShape0 = { 1, 2, 2, 2 };
265  m_InputShape1 = { 1, 1, 1, 1 };
266 
267  m_OutputShape = m_InputShape0;
268 
269  m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f };
270  m_InputData1 = { 3.f };
271 
272  m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 };
273  m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 };
274  m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 };
275  m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 };
276  m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 };
277  m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 };
278  }
279 };
280 
281 class Broadcast1dVectorTestData : public ComparisonTestData
282 {
283 public:
284  Broadcast1dVectorTestData() : ComparisonTestData()
285  {
286  m_InputShape0 = { 1, 2, 2, 3 };
287  m_InputShape1 = { 1, 1, 1, 3 };
288 
289  m_OutputShape = m_InputShape0;
290 
291  m_InputData0 =
292  {
293  1.f, 2.f, 3.f, 4.f, 5.f, 6.f,
294  7.f, 8.f, 9.f, 10.f, 11.f, 12.f
295  };
296 
297  m_InputData1 = { 4.f, 5.f, 6.f };
298 
299  m_OutputEqual =
300  {
301  0, 0, 0, 1, 1, 1,
302  0, 0, 0, 0, 0, 0
303  };
304 
305  m_OutputGreater =
306  {
307  0, 0, 0, 0, 0, 0,
308  1, 1, 1, 1, 1, 1
309  };
310 
311  m_OutputGreaterOrEqual =
312  {
313  0, 0, 0, 1, 1, 1,
314  1, 1, 1, 1, 1, 1
315  };
316 
317  m_OutputLess =
318  {
319  1, 1, 1, 0, 0, 0,
320  0, 0, 0, 0, 0, 0
321  };
322 
323  m_OutputLessOrEqual =
324  {
325  1, 1, 1, 1, 1, 1,
326  0, 0, 0, 0, 0, 0
327  };
328 
329  m_OutputNotEqual =
330  {
331  1, 1, 1, 0, 0, 0,
332  1, 1, 1, 1, 1, 1
333  };
334  }
335 };
336 
337 static SimpleTestData s_SimpleTestData;
338 static Broadcast1ElementTestData s_Broadcast1ElementTestData;
339 static Broadcast1dVectorTestData s_Broadcast1dVectorTestData;
340 
341 } // anonymous namespace
342 
343 // Equal
346  const armnn::ITensorHandleFactory& tensorHandleFactory)
347 {
348  return ComparisonTestImpl<armnn::DataType::Float32>(
349  workloadFactory,
350  memoryManager,
351  tensorHandleFactory,
352  s_SimpleTestData,
354 }
355 
357  armnn::IWorkloadFactory& workloadFactory,
359  const armnn::ITensorHandleFactory& tensorHandleFactory)
360 {
361  return ComparisonTestImpl<armnn::DataType::Float32>(
362  workloadFactory,
363  memoryManager,
364  tensorHandleFactory,
365  s_Broadcast1ElementTestData,
367 }
368 
370  armnn::IWorkloadFactory& workloadFactory,
372  const armnn::ITensorHandleFactory& tensorHandleFactory)
373 {
374  return ComparisonTestImpl<armnn::DataType::Float32>(
375  workloadFactory,
376  memoryManager,
377  tensorHandleFactory,
378  s_Broadcast1dVectorTestData,
380 }
381 
383  armnn::IWorkloadFactory& workloadFactory,
385  const armnn::ITensorHandleFactory& tensorHandleFactory)
386 {
387  return ComparisonTestImpl<armnn::DataType::Float16>(
388  workloadFactory,
389  memoryManager,
390  tensorHandleFactory,
391  s_SimpleTestData,
393 }
394 
396  armnn::IWorkloadFactory& workloadFactory,
398  const armnn::ITensorHandleFactory& tensorHandleFactory)
399 {
400  return ComparisonTestImpl<armnn::DataType::Float16>(
401  workloadFactory,
402  memoryManager,
403  tensorHandleFactory,
404  s_Broadcast1ElementTestData,
406 }
407 
409  armnn::IWorkloadFactory& workloadFactory,
411  const armnn::ITensorHandleFactory& tensorHandleFactory)
412 {
413  return ComparisonTestImpl<armnn::DataType::Float16>(
414  workloadFactory,
415  memoryManager,
416  tensorHandleFactory,
417  s_Broadcast1dVectorTestData,
419 }
420 
422  armnn::IWorkloadFactory& workloadFactory,
424  const armnn::ITensorHandleFactory& tensorHandleFactory)
425 {
426  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
427  workloadFactory,
428  memoryManager,
429  tensorHandleFactory,
430  s_SimpleTestData,
432 }
433 
435  armnn::IWorkloadFactory& workloadFactory,
437  const armnn::ITensorHandleFactory& tensorHandleFactory)
438 {
439  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
440  workloadFactory,
441  memoryManager,
442  tensorHandleFactory,
443  s_Broadcast1ElementTestData,
445 }
446 
448  armnn::IWorkloadFactory& workloadFactory,
450  const armnn::ITensorHandleFactory& tensorHandleFactory)
451 {
452  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
453  workloadFactory,
454  memoryManager,
455  tensorHandleFactory,
456  s_Broadcast1dVectorTestData,
458 }
459 
460 // Greater
463  const armnn::ITensorHandleFactory& tensorHandleFactory)
464 {
465  return ComparisonTestImpl<armnn::DataType::Float32>(
466  workloadFactory,
467  memoryManager,
468  tensorHandleFactory,
469  s_SimpleTestData,
471 }
472 
474  armnn::IWorkloadFactory& workloadFactory,
476  const armnn::ITensorHandleFactory& tensorHandleFactory)
477 {
478  return ComparisonTestImpl<armnn::DataType::Float32>(
479  workloadFactory,
480  memoryManager,
481  tensorHandleFactory,
482  s_Broadcast1ElementTestData,
484 }
485 
487  armnn::IWorkloadFactory& workloadFactory,
489  const armnn::ITensorHandleFactory& tensorHandleFactory)
490 {
491  return ComparisonTestImpl<armnn::DataType::Float32>(
492  workloadFactory,
493  memoryManager,
494  tensorHandleFactory,
495  s_Broadcast1dVectorTestData,
497 }
498 
500  armnn::IWorkloadFactory& workloadFactory,
502  const armnn::ITensorHandleFactory& tensorHandleFactory)
503 {
504  return ComparisonTestImpl<armnn::DataType::Float16>(
505  workloadFactory,
506  memoryManager,
507  tensorHandleFactory,
508  s_SimpleTestData,
510 }
511 
513  armnn::IWorkloadFactory& workloadFactory,
515  const armnn::ITensorHandleFactory& tensorHandleFactory)
516 {
517  return ComparisonTestImpl<armnn::DataType::Float16>(
518  workloadFactory,
519  memoryManager,
520  tensorHandleFactory,
521  s_Broadcast1ElementTestData,
523 }
524 
526  armnn::IWorkloadFactory& workloadFactory,
528  const armnn::ITensorHandleFactory& tensorHandleFactory)
529 {
530  return ComparisonTestImpl<armnn::DataType::Float16>(
531  workloadFactory,
532  memoryManager,
533  tensorHandleFactory,
534  s_Broadcast1dVectorTestData,
536 }
537 
539  armnn::IWorkloadFactory& workloadFactory,
541  const armnn::ITensorHandleFactory& tensorHandleFactory)
542 {
543  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
544  workloadFactory,
545  memoryManager,
546  tensorHandleFactory,
547  s_SimpleTestData,
549 }
550 
552  armnn::IWorkloadFactory& workloadFactory,
554  const armnn::ITensorHandleFactory& tensorHandleFactory)
555 {
556  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
557  workloadFactory,
558  memoryManager,
559  tensorHandleFactory,
560  s_Broadcast1ElementTestData,
562 }
563 
565  armnn::IWorkloadFactory& workloadFactory,
567  const armnn::ITensorHandleFactory& tensorHandleFactory)
568 {
569  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
570  workloadFactory,
571  memoryManager,
572  tensorHandleFactory,
573  s_Broadcast1dVectorTestData,
575 }
576 
577 // GreaterOrEqual
579  armnn::IWorkloadFactory& workloadFactory,
581  const armnn::ITensorHandleFactory& tensorHandleFactory)
582 {
583  return ComparisonTestImpl<armnn::DataType::Float32>(
584  workloadFactory,
585  memoryManager,
586  tensorHandleFactory,
587  s_SimpleTestData,
589 }
590 
592  armnn::IWorkloadFactory& workloadFactory,
594  const armnn::ITensorHandleFactory& tensorHandleFactory)
595 {
596  return ComparisonTestImpl<armnn::DataType::Float32>(
597  workloadFactory,
598  memoryManager,
599  tensorHandleFactory,
600  s_Broadcast1ElementTestData,
602 }
603 
605  armnn::IWorkloadFactory& workloadFactory,
607  const armnn::ITensorHandleFactory& tensorHandleFactory)
608 {
609  return ComparisonTestImpl<armnn::DataType::Float32>(
610  workloadFactory,
611  memoryManager,
612  tensorHandleFactory,
613  s_Broadcast1dVectorTestData,
615 }
616 
618  armnn::IWorkloadFactory& workloadFactory,
620  const armnn::ITensorHandleFactory& tensorHandleFactory)
621 {
622  return ComparisonTestImpl<armnn::DataType::Float16>(
623  workloadFactory,
624  memoryManager,
625  tensorHandleFactory,
626  s_SimpleTestData,
628 }
629 
631  armnn::IWorkloadFactory& workloadFactory,
633  const armnn::ITensorHandleFactory& tensorHandleFactory)
634 {
635  return ComparisonTestImpl<armnn::DataType::Float16>(
636  workloadFactory,
637  memoryManager,
638  tensorHandleFactory,
639  s_Broadcast1ElementTestData,
641 }
642 
644  armnn::IWorkloadFactory& workloadFactory,
646  const armnn::ITensorHandleFactory& tensorHandleFactory)
647 {
648  return ComparisonTestImpl<armnn::DataType::Float16>(
649  workloadFactory,
650  memoryManager,
651  tensorHandleFactory,
652  s_Broadcast1dVectorTestData,
654 }
655 
657  armnn::IWorkloadFactory& workloadFactory,
659  const armnn::ITensorHandleFactory& tensorHandleFactory)
660 {
661  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
662  workloadFactory,
663  memoryManager,
664  tensorHandleFactory,
665  s_SimpleTestData,
667 }
668 
670  armnn::IWorkloadFactory& workloadFactory,
672  const armnn::ITensorHandleFactory& tensorHandleFactory)
673 {
674  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
675  workloadFactory,
676  memoryManager,
677  tensorHandleFactory,
678  s_Broadcast1ElementTestData,
680 }
681 
683  armnn::IWorkloadFactory& workloadFactory,
685  const armnn::ITensorHandleFactory& tensorHandleFactory)
686 {
687  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
688  workloadFactory,
689  memoryManager,
690  tensorHandleFactory,
691  s_Broadcast1dVectorTestData,
693 }
694 
695 // Less
698  const armnn::ITensorHandleFactory& tensorHandleFactory)
699 {
700  return ComparisonTestImpl<armnn::DataType::Float32>(
701  workloadFactory,
702  memoryManager,
703  tensorHandleFactory,
704  s_SimpleTestData,
706 }
707 
709  armnn::IWorkloadFactory& workloadFactory,
711  const armnn::ITensorHandleFactory& tensorHandleFactory)
712 {
713  return ComparisonTestImpl<armnn::DataType::Float32>(
714  workloadFactory,
715  memoryManager,
716  tensorHandleFactory,
717  s_Broadcast1ElementTestData,
719 }
720 
722  armnn::IWorkloadFactory& workloadFactory,
724  const armnn::ITensorHandleFactory& tensorHandleFactory)
725 {
726  return ComparisonTestImpl<armnn::DataType::Float32>(
727  workloadFactory,
728  memoryManager,
729  tensorHandleFactory,
730  s_Broadcast1dVectorTestData,
732 }
733 
735  armnn::IWorkloadFactory& workloadFactory,
737  const armnn::ITensorHandleFactory& tensorHandleFactory)
738 {
739  return ComparisonTestImpl<armnn::DataType::Float16>(
740  workloadFactory,
741  memoryManager,
742  tensorHandleFactory,
743  s_SimpleTestData,
745 }
746 
748  armnn::IWorkloadFactory& workloadFactory,
750  const armnn::ITensorHandleFactory& tensorHandleFactory)
751 {
752  return ComparisonTestImpl<armnn::DataType::Float16>(
753  workloadFactory,
754  memoryManager,
755  tensorHandleFactory,
756  s_Broadcast1ElementTestData,
758 }
759 
761  armnn::IWorkloadFactory& workloadFactory,
763  const armnn::ITensorHandleFactory& tensorHandleFactory)
764 {
765  return ComparisonTestImpl<armnn::DataType::Float16>(
766  workloadFactory,
767  memoryManager,
768  tensorHandleFactory,
769  s_Broadcast1dVectorTestData,
771 }
772 
774  armnn::IWorkloadFactory& workloadFactory,
776  const armnn::ITensorHandleFactory& tensorHandleFactory)
777 {
778  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
779  workloadFactory,
780  memoryManager,
781  tensorHandleFactory,
782  s_SimpleTestData,
784 }
785 
787  armnn::IWorkloadFactory& workloadFactory,
789  const armnn::ITensorHandleFactory& tensorHandleFactory)
790 {
791  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
792  workloadFactory,
793  memoryManager,
794  tensorHandleFactory,
795  s_Broadcast1ElementTestData,
797 }
798 
800  armnn::IWorkloadFactory& workloadFactory,
802  const armnn::ITensorHandleFactory& tensorHandleFactory)
803 {
804  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
805  workloadFactory,
806  memoryManager,
807  tensorHandleFactory,
808  s_Broadcast1dVectorTestData,
810 }
811 
812 // LessOrEqual
814  armnn::IWorkloadFactory& workloadFactory,
816  const armnn::ITensorHandleFactory& tensorHandleFactory)
817 {
818  return ComparisonTestImpl<armnn::DataType::Float32>(
819  workloadFactory,
820  memoryManager,
821  tensorHandleFactory,
822  s_SimpleTestData,
824 }
825 
827  armnn::IWorkloadFactory& workloadFactory,
829  const armnn::ITensorHandleFactory& tensorHandleFactory)
830 {
831  return ComparisonTestImpl<armnn::DataType::Float32>(
832  workloadFactory,
833  memoryManager,
834  tensorHandleFactory,
835  s_Broadcast1ElementTestData,
837 }
838 
840  armnn::IWorkloadFactory& workloadFactory,
842  const armnn::ITensorHandleFactory& tensorHandleFactory)
843 {
844  return ComparisonTestImpl<armnn::DataType::Float32>(
845  workloadFactory,
846  memoryManager,
847  tensorHandleFactory,
848  s_Broadcast1dVectorTestData,
850 }
851 
853  armnn::IWorkloadFactory& workloadFactory,
855  const armnn::ITensorHandleFactory& tensorHandleFactory)
856 {
857  return ComparisonTestImpl<armnn::DataType::Float16>(
858  workloadFactory,
859  memoryManager,
860  tensorHandleFactory,
861  s_SimpleTestData,
863 }
864 
866  armnn::IWorkloadFactory& workloadFactory,
868  const armnn::ITensorHandleFactory& tensorHandleFactory)
869 {
870  return ComparisonTestImpl<armnn::DataType::Float16>(
871  workloadFactory,
872  memoryManager,
873  tensorHandleFactory,
874  s_Broadcast1ElementTestData,
876 }
877 
879  armnn::IWorkloadFactory& workloadFactory,
881  const armnn::ITensorHandleFactory& tensorHandleFactory)
882 {
883  return ComparisonTestImpl<armnn::DataType::Float16>(
884  workloadFactory,
885  memoryManager,
886  tensorHandleFactory,
887  s_Broadcast1dVectorTestData,
889 }
890 
892  armnn::IWorkloadFactory& workloadFactory,
894  const armnn::ITensorHandleFactory& tensorHandleFactory)
895 {
896  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
897  workloadFactory,
898  memoryManager,
899  tensorHandleFactory,
900  s_SimpleTestData,
902 }
903 
905  armnn::IWorkloadFactory& workloadFactory,
907  const armnn::ITensorHandleFactory& tensorHandleFactory)
908 {
909  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
910  workloadFactory,
911  memoryManager,
912  tensorHandleFactory,
913  s_Broadcast1ElementTestData,
915 }
916 
918  armnn::IWorkloadFactory& workloadFactory,
920  const armnn::ITensorHandleFactory& tensorHandleFactory)
921 {
922  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
923  workloadFactory,
924  memoryManager,
925  tensorHandleFactory,
926  s_Broadcast1dVectorTestData,
928 }
929 
930 // NotEqual
932  armnn::IWorkloadFactory& workloadFactory,
934  const armnn::ITensorHandleFactory& tensorHandleFactory)
935 {
936  return ComparisonTestImpl<armnn::DataType::Float32>(
937  workloadFactory,
938  memoryManager,
939  tensorHandleFactory,
940  s_SimpleTestData,
942 }
943 
945  armnn::IWorkloadFactory& workloadFactory,
947  const armnn::ITensorHandleFactory& tensorHandleFactory)
948 {
949  return ComparisonTestImpl<armnn::DataType::Float32>(
950  workloadFactory,
951  memoryManager,
952  tensorHandleFactory,
953  s_Broadcast1ElementTestData,
955 }
956 
958  armnn::IWorkloadFactory& workloadFactory,
960  const armnn::ITensorHandleFactory& tensorHandleFactory)
961 {
962  return ComparisonTestImpl<armnn::DataType::Float32>(
963  workloadFactory,
964  memoryManager,
965  tensorHandleFactory,
966  s_Broadcast1dVectorTestData,
968 }
969 
971  armnn::IWorkloadFactory& workloadFactory,
973  const armnn::ITensorHandleFactory& tensorHandleFactory)
974 {
975  return ComparisonTestImpl<armnn::DataType::Float16>(
976  workloadFactory,
977  memoryManager,
978  tensorHandleFactory,
979  s_SimpleTestData,
981 }
982 
984  armnn::IWorkloadFactory& workloadFactory,
986  const armnn::ITensorHandleFactory& tensorHandleFactory)
987 {
988  return ComparisonTestImpl<armnn::DataType::Float16>(
989  workloadFactory,
990  memoryManager,
991  tensorHandleFactory,
992  s_Broadcast1ElementTestData,
994 }
995 
997  armnn::IWorkloadFactory& workloadFactory,
999  const armnn::ITensorHandleFactory& tensorHandleFactory)
1000 {
1001  return ComparisonTestImpl<armnn::DataType::Float16>(
1002  workloadFactory,
1003  memoryManager,
1004  tensorHandleFactory,
1005  s_Broadcast1dVectorTestData,
1007 }
1008 
1010  armnn::IWorkloadFactory& workloadFactory,
1012  const armnn::ITensorHandleFactory& tensorHandleFactory)
1013 {
1014  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1015  workloadFactory,
1016  memoryManager,
1017  tensorHandleFactory,
1018  s_SimpleTestData,
1020 }
1021 
1023  armnn::IWorkloadFactory& workloadFactory,
1025  const armnn::ITensorHandleFactory& tensorHandleFactory)
1026 {
1027  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1028  workloadFactory,
1029  memoryManager,
1030  tensorHandleFactory,
1031  s_Broadcast1ElementTestData,
1033 }
1034 
1036  armnn::IWorkloadFactory& workloadFactory,
1038  const armnn::ITensorHandleFactory& tensorHandleFactory)
1039 {
1040  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1041  workloadFactory,
1042  memoryManager,
1043  tensorHandleFactory,
1044  s_Broadcast1dVectorTestData,
1046 }
LayerTestResult< uint8_t, 4 > NotEqualSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:78
LayerTestResult< uint8_t, 4 > LessBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:79
LayerTestResult< uint8_t, 4 > LessSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void IgnoreUnused(Ts &&...)
LayerTestResult< uint8_t, 4 > GreaterSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
ComparisonOperation
Definition: Types.hpp:89
LayerTestResult< uint8_t, 4 > GreaterBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
DataType
Definition: Types.hpp:36
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< uint8_t, 4 > GreaterBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
LayerTestResult< uint8_t, 4 > EqualSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
virtual std::unique_ptr< IWorkload > CreateComparison(const ComparisonQueueDescriptor &descriptor, const WorkloadInfo &Info) const
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
unsigned int GetNumDimensions() const
Function that returns the tensor rank.
Definition: Tensor.cpp:174
LayerTestResult< uint8_t, 4 > GreaterOrEqualSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
Contains information about inputs and outputs to a layer.
LayerTestResult< uint8_t, 4 > GreaterBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LessOrEqualSimpleFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > NotEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
LayerTestResult< uint8_t, 4 > LessBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualBroadcast1dVectorTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > GreaterOrEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerTestResult< uint8_t, 4 > LessOrEqualBroadcast1ElementTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > EqualSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)