ArmNN
 21.11
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  std::vector<uint8_t> actualOutput(outputTensorInfo.GetNumElements());
56 
57  std::unique_ptr<armnn::ITensorHandle> inputHandle0 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo0);
58  std::unique_ptr<armnn::ITensorHandle> inputHandle1 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo1);
59  std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
60 
62  qDescriptor.m_Parameters = descriptor;
63 
65  AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get());
66  AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get());
67  AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get());
68 
69  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateComparison(qDescriptor, info);
70 
71  inputHandle0->Allocate();
72  inputHandle1->Allocate();
73  outputHandle->Allocate();
74 
75  CopyDataToITensorHandle(inputHandle0.get(), values0.data());
76  CopyDataToITensorHandle(inputHandle1.get(), values1.data());
77 
78  workload->PostAllocationConfigure();
79  ExecuteWorkload(*workload, memoryManager);
80 
81  CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
82 
83  return LayerTestResult<uint8_t, NumDims>(actualOutput,
84  outValues,
85  outputHandle->GetShape(),
86  outputTensorInfo.GetShape(),
87  true);
88 }
89 
90 template <std::size_t NumDims,
91  armnn::DataType ArmnnInType,
92  typename InType = armnn::ResolveType<ArmnnInType>>
93 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
94  armnn::IWorkloadFactory & workloadFactory,
96  const armnn::ITensorHandleFactory& tensorHandleFactory,
97  const armnn::ComparisonDescriptor& descriptor,
98  const armnn::TensorShape& shape0,
99  std::vector<InType> values0,
100  const armnn::TensorShape& shape1,
101  std::vector<InType> values1,
102  const armnn::TensorShape outShape,
103  std::vector<uint8_t> outValues,
104  float quantScale = 1.f,
105  int quantOffset = 0)
106 {
107  return ComparisonTestImpl<NumDims, ArmnnInType>(
108  workloadFactory,
109  memoryManager,
110  tensorHandleFactory,
111  descriptor,
112  shape0,
113  values0,
114  quantScale,
115  quantOffset,
116  shape1,
117  values1,
118  quantScale,
119  quantOffset,
120  outShape,
121  outValues,
122  quantScale,
123  quantOffset);
124 }
125 
126 template<typename TestData>
127 std::vector<uint8_t> GetExpectedOutputData(const TestData& testData, armnn::ComparisonOperation operation)
128 {
129  switch (operation)
130  {
132  return testData.m_OutputEqual;
134  return testData.m_OutputGreater;
136  return testData.m_OutputGreaterOrEqual;
138  return testData.m_OutputLess;
140  return testData.m_OutputLessOrEqual;
142  default:
143  return testData.m_OutputNotEqual;
144  }
145 }
146 
147 template<armnn::DataType ArmnnInType, typename TestData>
148 LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
150  const armnn::ITensorHandleFactory& tensorHandleFactory,
151  const TestData& testData,
152  armnn::ComparisonOperation operation,
153  float quantScale = 1.f,
154  int quantOffset = 0)
155 {
157 
158  std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
159  std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
160 
161  return ComparisonTestImpl<4, ArmnnInType>(
162  workloadFactory,
163  memoryManager,
164  tensorHandleFactory,
165  armnn::ComparisonDescriptor(operation),
166  testData.m_InputShape0,
167  inputData0,
168  testData.m_InputShape1,
169  inputData1,
170  testData.m_OutputShape,
171  GetExpectedOutputData(testData, operation),
172  quantScale,
173  quantOffset);
174 }
175 
176 class ComparisonTestData
177 {
178 public:
179  ComparisonTestData() = default;
180  virtual ~ComparisonTestData() = default;
181 
182  armnn::TensorShape m_InputShape0;
183  armnn::TensorShape m_InputShape1;
184  armnn::TensorShape m_OutputShape;
185 
186  std::vector<float> m_InputData0;
187  std::vector<float> m_InputData1;
188 
189  std::vector<uint8_t> m_OutputEqual;
190  std::vector<uint8_t> m_OutputGreater;
191  std::vector<uint8_t> m_OutputGreaterOrEqual;
192  std::vector<uint8_t> m_OutputLess;
193  std::vector<uint8_t> m_OutputLessOrEqual;
194  std::vector<uint8_t> m_OutputNotEqual;
195 };
196 
197 class SimpleTestData : public ComparisonTestData
198 {
199 public:
200  SimpleTestData() : ComparisonTestData()
201  {
202  m_InputShape0 = { 2, 2, 2, 2 };
203 
204  m_InputShape1 = m_InputShape0;
205  m_OutputShape = m_InputShape0;
206 
207  m_InputData0 =
208  {
209  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
210  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
211  };
212 
213  m_InputData1 =
214  {
215  1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
216  5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
217  };
218 
219  m_OutputEqual =
220  {
221  1, 1, 1, 1, 0, 0, 0, 0,
222  0, 0, 0, 0, 1, 1, 1, 1
223  };
224 
225  m_OutputGreater =
226  {
227  0, 0, 0, 0, 1, 1, 1, 1,
228  0, 0, 0, 0, 0, 0, 0, 0
229  };
230 
231  m_OutputGreaterOrEqual =
232  {
233  1, 1, 1, 1, 1, 1, 1, 1,
234  0, 0, 0, 0, 1, 1, 1, 1
235  };
236 
237  m_OutputLess =
238  {
239  0, 0, 0, 0, 0, 0, 0, 0,
240  1, 1, 1, 1, 0, 0, 0, 0
241  };
242 
243  m_OutputLessOrEqual =
244  {
245  1, 1, 1, 1, 0, 0, 0, 0,
246  1, 1, 1, 1, 1, 1, 1, 1
247  };
248 
249  m_OutputNotEqual =
250  {
251  0, 0, 0, 0, 1, 1, 1, 1,
252  1, 1, 1, 1, 0, 0, 0, 0
253  };
254  }
255 };
256 
257 class Broadcast1ElementTestData : public ComparisonTestData
258 {
259 public:
260  Broadcast1ElementTestData() : ComparisonTestData()
261  {
262  m_InputShape0 = { 1, 2, 2, 2 };
263  m_InputShape1 = { 1, 1, 1, 1 };
264 
265  m_OutputShape = m_InputShape0;
266 
267  m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f };
268  m_InputData1 = { 3.f };
269 
270  m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 };
271  m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 };
272  m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 };
273  m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 };
274  m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 };
275  m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 };
276  }
277 };
278 
279 class Broadcast1dVectorTestData : public ComparisonTestData
280 {
281 public:
282  Broadcast1dVectorTestData() : ComparisonTestData()
283  {
284  m_InputShape0 = { 1, 2, 2, 3 };
285  m_InputShape1 = { 1, 1, 1, 3 };
286 
287  m_OutputShape = m_InputShape0;
288 
289  m_InputData0 =
290  {
291  1.f, 2.f, 3.f, 4.f, 5.f, 6.f,
292  7.f, 8.f, 9.f, 10.f, 11.f, 12.f
293  };
294 
295  m_InputData1 = { 4.f, 5.f, 6.f };
296 
297  m_OutputEqual =
298  {
299  0, 0, 0, 1, 1, 1,
300  0, 0, 0, 0, 0, 0
301  };
302 
303  m_OutputGreater =
304  {
305  0, 0, 0, 0, 0, 0,
306  1, 1, 1, 1, 1, 1
307  };
308 
309  m_OutputGreaterOrEqual =
310  {
311  0, 0, 0, 1, 1, 1,
312  1, 1, 1, 1, 1, 1
313  };
314 
315  m_OutputLess =
316  {
317  1, 1, 1, 0, 0, 0,
318  0, 0, 0, 0, 0, 0
319  };
320 
321  m_OutputLessOrEqual =
322  {
323  1, 1, 1, 1, 1, 1,
324  0, 0, 0, 0, 0, 0
325  };
326 
327  m_OutputNotEqual =
328  {
329  1, 1, 1, 0, 0, 0,
330  1, 1, 1, 1, 1, 1
331  };
332  }
333 };
334 
335 static SimpleTestData s_SimpleTestData;
336 static Broadcast1ElementTestData s_Broadcast1ElementTestData;
337 static Broadcast1dVectorTestData s_Broadcast1dVectorTestData;
338 
339 } // anonymous namespace
340 
341 // Equal
344  const armnn::ITensorHandleFactory& tensorHandleFactory)
345 {
346  return ComparisonTestImpl<armnn::DataType::Float32>(
347  workloadFactory,
348  memoryManager,
349  tensorHandleFactory,
350  s_SimpleTestData,
352 }
353 
355  armnn::IWorkloadFactory& workloadFactory,
357  const armnn::ITensorHandleFactory& tensorHandleFactory)
358 {
359  return ComparisonTestImpl<armnn::DataType::Float32>(
360  workloadFactory,
361  memoryManager,
362  tensorHandleFactory,
363  s_Broadcast1ElementTestData,
365 }
366 
368  armnn::IWorkloadFactory& workloadFactory,
370  const armnn::ITensorHandleFactory& tensorHandleFactory)
371 {
372  return ComparisonTestImpl<armnn::DataType::Float32>(
373  workloadFactory,
374  memoryManager,
375  tensorHandleFactory,
376  s_Broadcast1dVectorTestData,
378 }
379 
381  armnn::IWorkloadFactory& workloadFactory,
383  const armnn::ITensorHandleFactory& tensorHandleFactory)
384 {
385  return ComparisonTestImpl<armnn::DataType::Float16>(
386  workloadFactory,
387  memoryManager,
388  tensorHandleFactory,
389  s_SimpleTestData,
391 }
392 
394  armnn::IWorkloadFactory& workloadFactory,
396  const armnn::ITensorHandleFactory& tensorHandleFactory)
397 {
398  return ComparisonTestImpl<armnn::DataType::Float16>(
399  workloadFactory,
400  memoryManager,
401  tensorHandleFactory,
402  s_Broadcast1ElementTestData,
404 }
405 
407  armnn::IWorkloadFactory& workloadFactory,
409  const armnn::ITensorHandleFactory& tensorHandleFactory)
410 {
411  return ComparisonTestImpl<armnn::DataType::Float16>(
412  workloadFactory,
413  memoryManager,
414  tensorHandleFactory,
415  s_Broadcast1dVectorTestData,
417 }
418 
420  armnn::IWorkloadFactory& workloadFactory,
422  const armnn::ITensorHandleFactory& tensorHandleFactory)
423 {
424  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
425  workloadFactory,
426  memoryManager,
427  tensorHandleFactory,
428  s_SimpleTestData,
430 }
431 
433  armnn::IWorkloadFactory& workloadFactory,
435  const armnn::ITensorHandleFactory& tensorHandleFactory)
436 {
437  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
438  workloadFactory,
439  memoryManager,
440  tensorHandleFactory,
441  s_Broadcast1ElementTestData,
443 }
444 
446  armnn::IWorkloadFactory& workloadFactory,
448  const armnn::ITensorHandleFactory& tensorHandleFactory)
449 {
450  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
451  workloadFactory,
452  memoryManager,
453  tensorHandleFactory,
454  s_Broadcast1dVectorTestData,
456 }
457 
458 // Greater
461  const armnn::ITensorHandleFactory& tensorHandleFactory)
462 {
463  return ComparisonTestImpl<armnn::DataType::Float32>(
464  workloadFactory,
465  memoryManager,
466  tensorHandleFactory,
467  s_SimpleTestData,
469 }
470 
472  armnn::IWorkloadFactory& workloadFactory,
474  const armnn::ITensorHandleFactory& tensorHandleFactory)
475 {
476  return ComparisonTestImpl<armnn::DataType::Float32>(
477  workloadFactory,
478  memoryManager,
479  tensorHandleFactory,
480  s_Broadcast1ElementTestData,
482 }
483 
485  armnn::IWorkloadFactory& workloadFactory,
487  const armnn::ITensorHandleFactory& tensorHandleFactory)
488 {
489  return ComparisonTestImpl<armnn::DataType::Float32>(
490  workloadFactory,
491  memoryManager,
492  tensorHandleFactory,
493  s_Broadcast1dVectorTestData,
495 }
496 
498  armnn::IWorkloadFactory& workloadFactory,
500  const armnn::ITensorHandleFactory& tensorHandleFactory)
501 {
502  return ComparisonTestImpl<armnn::DataType::Float16>(
503  workloadFactory,
504  memoryManager,
505  tensorHandleFactory,
506  s_SimpleTestData,
508 }
509 
511  armnn::IWorkloadFactory& workloadFactory,
513  const armnn::ITensorHandleFactory& tensorHandleFactory)
514 {
515  return ComparisonTestImpl<armnn::DataType::Float16>(
516  workloadFactory,
517  memoryManager,
518  tensorHandleFactory,
519  s_Broadcast1ElementTestData,
521 }
522 
524  armnn::IWorkloadFactory& workloadFactory,
526  const armnn::ITensorHandleFactory& tensorHandleFactory)
527 {
528  return ComparisonTestImpl<armnn::DataType::Float16>(
529  workloadFactory,
530  memoryManager,
531  tensorHandleFactory,
532  s_Broadcast1dVectorTestData,
534 }
535 
537  armnn::IWorkloadFactory& workloadFactory,
539  const armnn::ITensorHandleFactory& tensorHandleFactory)
540 {
541  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
542  workloadFactory,
543  memoryManager,
544  tensorHandleFactory,
545  s_SimpleTestData,
547 }
548 
550  armnn::IWorkloadFactory& workloadFactory,
552  const armnn::ITensorHandleFactory& tensorHandleFactory)
553 {
554  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
555  workloadFactory,
556  memoryManager,
557  tensorHandleFactory,
558  s_Broadcast1ElementTestData,
560 }
561 
563  armnn::IWorkloadFactory& workloadFactory,
565  const armnn::ITensorHandleFactory& tensorHandleFactory)
566 {
567  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
568  workloadFactory,
569  memoryManager,
570  tensorHandleFactory,
571  s_Broadcast1dVectorTestData,
573 }
574 
575 // GreaterOrEqual
577  armnn::IWorkloadFactory& workloadFactory,
579  const armnn::ITensorHandleFactory& tensorHandleFactory)
580 {
581  return ComparisonTestImpl<armnn::DataType::Float32>(
582  workloadFactory,
583  memoryManager,
584  tensorHandleFactory,
585  s_SimpleTestData,
587 }
588 
590  armnn::IWorkloadFactory& workloadFactory,
592  const armnn::ITensorHandleFactory& tensorHandleFactory)
593 {
594  return ComparisonTestImpl<armnn::DataType::Float32>(
595  workloadFactory,
596  memoryManager,
597  tensorHandleFactory,
598  s_Broadcast1ElementTestData,
600 }
601 
603  armnn::IWorkloadFactory& workloadFactory,
605  const armnn::ITensorHandleFactory& tensorHandleFactory)
606 {
607  return ComparisonTestImpl<armnn::DataType::Float32>(
608  workloadFactory,
609  memoryManager,
610  tensorHandleFactory,
611  s_Broadcast1dVectorTestData,
613 }
614 
616  armnn::IWorkloadFactory& workloadFactory,
618  const armnn::ITensorHandleFactory& tensorHandleFactory)
619 {
620  return ComparisonTestImpl<armnn::DataType::Float16>(
621  workloadFactory,
622  memoryManager,
623  tensorHandleFactory,
624  s_SimpleTestData,
626 }
627 
629  armnn::IWorkloadFactory& workloadFactory,
631  const armnn::ITensorHandleFactory& tensorHandleFactory)
632 {
633  return ComparisonTestImpl<armnn::DataType::Float16>(
634  workloadFactory,
635  memoryManager,
636  tensorHandleFactory,
637  s_Broadcast1ElementTestData,
639 }
640 
642  armnn::IWorkloadFactory& workloadFactory,
644  const armnn::ITensorHandleFactory& tensorHandleFactory)
645 {
646  return ComparisonTestImpl<armnn::DataType::Float16>(
647  workloadFactory,
648  memoryManager,
649  tensorHandleFactory,
650  s_Broadcast1dVectorTestData,
652 }
653 
655  armnn::IWorkloadFactory& workloadFactory,
657  const armnn::ITensorHandleFactory& tensorHandleFactory)
658 {
659  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
660  workloadFactory,
661  memoryManager,
662  tensorHandleFactory,
663  s_SimpleTestData,
665 }
666 
668  armnn::IWorkloadFactory& workloadFactory,
670  const armnn::ITensorHandleFactory& tensorHandleFactory)
671 {
672  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
673  workloadFactory,
674  memoryManager,
675  tensorHandleFactory,
676  s_Broadcast1ElementTestData,
678 }
679 
681  armnn::IWorkloadFactory& workloadFactory,
683  const armnn::ITensorHandleFactory& tensorHandleFactory)
684 {
685  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
686  workloadFactory,
687  memoryManager,
688  tensorHandleFactory,
689  s_Broadcast1dVectorTestData,
691 }
692 
693 // Less
696  const armnn::ITensorHandleFactory& tensorHandleFactory)
697 {
698  return ComparisonTestImpl<armnn::DataType::Float32>(
699  workloadFactory,
700  memoryManager,
701  tensorHandleFactory,
702  s_SimpleTestData,
704 }
705 
707  armnn::IWorkloadFactory& workloadFactory,
709  const armnn::ITensorHandleFactory& tensorHandleFactory)
710 {
711  return ComparisonTestImpl<armnn::DataType::Float32>(
712  workloadFactory,
713  memoryManager,
714  tensorHandleFactory,
715  s_Broadcast1ElementTestData,
717 }
718 
720  armnn::IWorkloadFactory& workloadFactory,
722  const armnn::ITensorHandleFactory& tensorHandleFactory)
723 {
724  return ComparisonTestImpl<armnn::DataType::Float32>(
725  workloadFactory,
726  memoryManager,
727  tensorHandleFactory,
728  s_Broadcast1dVectorTestData,
730 }
731 
733  armnn::IWorkloadFactory& workloadFactory,
735  const armnn::ITensorHandleFactory& tensorHandleFactory)
736 {
737  return ComparisonTestImpl<armnn::DataType::Float16>(
738  workloadFactory,
739  memoryManager,
740  tensorHandleFactory,
741  s_SimpleTestData,
743 }
744 
746  armnn::IWorkloadFactory& workloadFactory,
748  const armnn::ITensorHandleFactory& tensorHandleFactory)
749 {
750  return ComparisonTestImpl<armnn::DataType::Float16>(
751  workloadFactory,
752  memoryManager,
753  tensorHandleFactory,
754  s_Broadcast1ElementTestData,
756 }
757 
759  armnn::IWorkloadFactory& workloadFactory,
761  const armnn::ITensorHandleFactory& tensorHandleFactory)
762 {
763  return ComparisonTestImpl<armnn::DataType::Float16>(
764  workloadFactory,
765  memoryManager,
766  tensorHandleFactory,
767  s_Broadcast1dVectorTestData,
769 }
770 
772  armnn::IWorkloadFactory& workloadFactory,
774  const armnn::ITensorHandleFactory& tensorHandleFactory)
775 {
776  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
777  workloadFactory,
778  memoryManager,
779  tensorHandleFactory,
780  s_SimpleTestData,
782 }
783 
785  armnn::IWorkloadFactory& workloadFactory,
787  const armnn::ITensorHandleFactory& tensorHandleFactory)
788 {
789  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
790  workloadFactory,
791  memoryManager,
792  tensorHandleFactory,
793  s_Broadcast1ElementTestData,
795 }
796 
798  armnn::IWorkloadFactory& workloadFactory,
800  const armnn::ITensorHandleFactory& tensorHandleFactory)
801 {
802  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
803  workloadFactory,
804  memoryManager,
805  tensorHandleFactory,
806  s_Broadcast1dVectorTestData,
808 }
809 
810 // LessOrEqual
812  armnn::IWorkloadFactory& workloadFactory,
814  const armnn::ITensorHandleFactory& tensorHandleFactory)
815 {
816  return ComparisonTestImpl<armnn::DataType::Float32>(
817  workloadFactory,
818  memoryManager,
819  tensorHandleFactory,
820  s_SimpleTestData,
822 }
823 
825  armnn::IWorkloadFactory& workloadFactory,
827  const armnn::ITensorHandleFactory& tensorHandleFactory)
828 {
829  return ComparisonTestImpl<armnn::DataType::Float32>(
830  workloadFactory,
831  memoryManager,
832  tensorHandleFactory,
833  s_Broadcast1ElementTestData,
835 }
836 
838  armnn::IWorkloadFactory& workloadFactory,
840  const armnn::ITensorHandleFactory& tensorHandleFactory)
841 {
842  return ComparisonTestImpl<armnn::DataType::Float32>(
843  workloadFactory,
844  memoryManager,
845  tensorHandleFactory,
846  s_Broadcast1dVectorTestData,
848 }
849 
851  armnn::IWorkloadFactory& workloadFactory,
853  const armnn::ITensorHandleFactory& tensorHandleFactory)
854 {
855  return ComparisonTestImpl<armnn::DataType::Float16>(
856  workloadFactory,
857  memoryManager,
858  tensorHandleFactory,
859  s_SimpleTestData,
861 }
862 
864  armnn::IWorkloadFactory& workloadFactory,
866  const armnn::ITensorHandleFactory& tensorHandleFactory)
867 {
868  return ComparisonTestImpl<armnn::DataType::Float16>(
869  workloadFactory,
870  memoryManager,
871  tensorHandleFactory,
872  s_Broadcast1ElementTestData,
874 }
875 
877  armnn::IWorkloadFactory& workloadFactory,
879  const armnn::ITensorHandleFactory& tensorHandleFactory)
880 {
881  return ComparisonTestImpl<armnn::DataType::Float16>(
882  workloadFactory,
883  memoryManager,
884  tensorHandleFactory,
885  s_Broadcast1dVectorTestData,
887 }
888 
890  armnn::IWorkloadFactory& workloadFactory,
892  const armnn::ITensorHandleFactory& tensorHandleFactory)
893 {
894  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
895  workloadFactory,
896  memoryManager,
897  tensorHandleFactory,
898  s_SimpleTestData,
900 }
901 
903  armnn::IWorkloadFactory& workloadFactory,
905  const armnn::ITensorHandleFactory& tensorHandleFactory)
906 {
907  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
908  workloadFactory,
909  memoryManager,
910  tensorHandleFactory,
911  s_Broadcast1ElementTestData,
913 }
914 
916  armnn::IWorkloadFactory& workloadFactory,
918  const armnn::ITensorHandleFactory& tensorHandleFactory)
919 {
920  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
921  workloadFactory,
922  memoryManager,
923  tensorHandleFactory,
924  s_Broadcast1dVectorTestData,
926 }
927 
928 // NotEqual
930  armnn::IWorkloadFactory& workloadFactory,
932  const armnn::ITensorHandleFactory& tensorHandleFactory)
933 {
934  return ComparisonTestImpl<armnn::DataType::Float32>(
935  workloadFactory,
936  memoryManager,
937  tensorHandleFactory,
938  s_SimpleTestData,
940 }
941 
943  armnn::IWorkloadFactory& workloadFactory,
945  const armnn::ITensorHandleFactory& tensorHandleFactory)
946 {
947  return ComparisonTestImpl<armnn::DataType::Float32>(
948  workloadFactory,
949  memoryManager,
950  tensorHandleFactory,
951  s_Broadcast1ElementTestData,
953 }
954 
956  armnn::IWorkloadFactory& workloadFactory,
958  const armnn::ITensorHandleFactory& tensorHandleFactory)
959 {
960  return ComparisonTestImpl<armnn::DataType::Float32>(
961  workloadFactory,
962  memoryManager,
963  tensorHandleFactory,
964  s_Broadcast1dVectorTestData,
966 }
967 
969  armnn::IWorkloadFactory& workloadFactory,
971  const armnn::ITensorHandleFactory& tensorHandleFactory)
972 {
973  return ComparisonTestImpl<armnn::DataType::Float16>(
974  workloadFactory,
975  memoryManager,
976  tensorHandleFactory,
977  s_SimpleTestData,
979 }
980 
982  armnn::IWorkloadFactory& workloadFactory,
984  const armnn::ITensorHandleFactory& tensorHandleFactory)
985 {
986  return ComparisonTestImpl<armnn::DataType::Float16>(
987  workloadFactory,
988  memoryManager,
989  tensorHandleFactory,
990  s_Broadcast1ElementTestData,
992 }
993 
995  armnn::IWorkloadFactory& workloadFactory,
997  const armnn::ITensorHandleFactory& tensorHandleFactory)
998 {
999  return ComparisonTestImpl<armnn::DataType::Float16>(
1000  workloadFactory,
1001  memoryManager,
1002  tensorHandleFactory,
1003  s_Broadcast1dVectorTestData,
1005 }
1006 
1008  armnn::IWorkloadFactory& workloadFactory,
1010  const armnn::ITensorHandleFactory& tensorHandleFactory)
1011 {
1012  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1013  workloadFactory,
1014  memoryManager,
1015  tensorHandleFactory,
1016  s_SimpleTestData,
1018 }
1019 
1021  armnn::IWorkloadFactory& workloadFactory,
1023  const armnn::ITensorHandleFactory& tensorHandleFactory)
1024 {
1025  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1026  workloadFactory,
1027  memoryManager,
1028  tensorHandleFactory,
1029  s_Broadcast1ElementTestData,
1031 }
1032 
1034  armnn::IWorkloadFactory& workloadFactory,
1036  const armnn::ITensorHandleFactory& tensorHandleFactory)
1037 {
1038  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1039  workloadFactory,
1040  memoryManager,
1041  tensorHandleFactory,
1042  s_Broadcast1dVectorTestData,
1044 }
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:95
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:35
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 TensorInfos of 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)