ArmNN
 22.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>
11 #include <ResolveType.hpp>
12 
15 
18 
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
70  = workloadFactory.CreateWorkload(armnn::LayerType::Comparison, qDescriptor, info);
71 
72  inputHandle0->Allocate();
73  inputHandle1->Allocate();
74  outputHandle->Allocate();
75 
76  CopyDataToITensorHandle(inputHandle0.get(), values0.data());
77  CopyDataToITensorHandle(inputHandle1.get(), values1.data());
78 
79  workload->PostAllocationConfigure();
80  ExecuteWorkload(*workload, memoryManager);
81 
82  CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
83 
84  return LayerTestResult<uint8_t, NumDims>(actualOutput,
85  outValues,
86  outputHandle->GetShape(),
87  outputTensorInfo.GetShape(),
88  true);
89 }
90 
91 template <std::size_t NumDims,
92  armnn::DataType ArmnnInType,
93  typename InType = armnn::ResolveType<ArmnnInType>>
94 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
95  armnn::IWorkloadFactory & workloadFactory,
97  const armnn::ITensorHandleFactory& tensorHandleFactory,
98  const armnn::ComparisonDescriptor& descriptor,
99  const armnn::TensorShape& shape0,
100  std::vector<InType> values0,
101  const armnn::TensorShape& shape1,
102  std::vector<InType> values1,
103  const armnn::TensorShape outShape,
104  std::vector<uint8_t> outValues,
105  float quantScale = 1.f,
106  int quantOffset = 0)
107 {
108  return ComparisonTestImpl<NumDims, ArmnnInType>(
109  workloadFactory,
110  memoryManager,
111  tensorHandleFactory,
112  descriptor,
113  shape0,
114  values0,
115  quantScale,
116  quantOffset,
117  shape1,
118  values1,
119  quantScale,
120  quantOffset,
121  outShape,
122  outValues,
123  quantScale,
124  quantOffset);
125 }
126 
127 template<typename TestData>
128 std::vector<uint8_t> GetExpectedOutputData(const TestData& testData, armnn::ComparisonOperation operation)
129 {
130  switch (operation)
131  {
133  return testData.m_OutputEqual;
135  return testData.m_OutputGreater;
137  return testData.m_OutputGreaterOrEqual;
139  return testData.m_OutputLess;
141  return testData.m_OutputLessOrEqual;
143  default:
144  return testData.m_OutputNotEqual;
145  }
146 }
147 
148 template<armnn::DataType ArmnnInType, typename TestData>
149 LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
151  const armnn::ITensorHandleFactory& tensorHandleFactory,
152  const TestData& testData,
153  armnn::ComparisonOperation operation,
154  float quantScale = 1.f,
155  int quantOffset = 0)
156 {
158 
159  std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
160  std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
161 
162  return ComparisonTestImpl<4, ArmnnInType>(
163  workloadFactory,
164  memoryManager,
165  tensorHandleFactory,
166  armnn::ComparisonDescriptor(operation),
167  testData.m_InputShape0,
168  inputData0,
169  testData.m_InputShape1,
170  inputData1,
171  testData.m_OutputShape,
172  GetExpectedOutputData(testData, operation),
173  quantScale,
174  quantOffset);
175 }
176 
177 class ComparisonTestData
178 {
179 public:
180  ComparisonTestData() = default;
181  virtual ~ComparisonTestData() = default;
182 
183  armnn::TensorShape m_InputShape0;
184  armnn::TensorShape m_InputShape1;
185  armnn::TensorShape m_OutputShape;
186 
187  std::vector<float> m_InputData0;
188  std::vector<float> m_InputData1;
189 
190  std::vector<uint8_t> m_OutputEqual;
191  std::vector<uint8_t> m_OutputGreater;
192  std::vector<uint8_t> m_OutputGreaterOrEqual;
193  std::vector<uint8_t> m_OutputLess;
194  std::vector<uint8_t> m_OutputLessOrEqual;
195  std::vector<uint8_t> m_OutputNotEqual;
196 };
197 
198 class SimpleTestData : public ComparisonTestData
199 {
200 public:
201  SimpleTestData() : ComparisonTestData()
202  {
203  m_InputShape0 = { 2, 2, 2, 2 };
204 
205  m_InputShape1 = m_InputShape0;
206  m_OutputShape = m_InputShape0;
207 
208  m_InputData0 =
209  {
210  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
211  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
212  };
213 
214  m_InputData1 =
215  {
216  1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
217  5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
218  };
219 
220  m_OutputEqual =
221  {
222  1, 1, 1, 1, 0, 0, 0, 0,
223  0, 0, 0, 0, 1, 1, 1, 1
224  };
225 
226  m_OutputGreater =
227  {
228  0, 0, 0, 0, 1, 1, 1, 1,
229  0, 0, 0, 0, 0, 0, 0, 0
230  };
231 
232  m_OutputGreaterOrEqual =
233  {
234  1, 1, 1, 1, 1, 1, 1, 1,
235  0, 0, 0, 0, 1, 1, 1, 1
236  };
237 
238  m_OutputLess =
239  {
240  0, 0, 0, 0, 0, 0, 0, 0,
241  1, 1, 1, 1, 0, 0, 0, 0
242  };
243 
244  m_OutputLessOrEqual =
245  {
246  1, 1, 1, 1, 0, 0, 0, 0,
247  1, 1, 1, 1, 1, 1, 1, 1
248  };
249 
250  m_OutputNotEqual =
251  {
252  0, 0, 0, 0, 1, 1, 1, 1,
253  1, 1, 1, 1, 0, 0, 0, 0
254  };
255  }
256 };
257 
258 class Broadcast1ElementTestData : public ComparisonTestData
259 {
260 public:
261  Broadcast1ElementTestData() : ComparisonTestData()
262  {
263  m_InputShape0 = { 1, 2, 2, 2 };
264  m_InputShape1 = { 1, 1, 1, 1 };
265 
266  m_OutputShape = m_InputShape0;
267 
268  m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f };
269  m_InputData1 = { 3.f };
270 
271  m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 };
272  m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 };
273  m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 };
274  m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 };
275  m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 };
276  m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 };
277  }
278 };
279 
280 class Broadcast1dVectorTestData : public ComparisonTestData
281 {
282 public:
283  Broadcast1dVectorTestData() : ComparisonTestData()
284  {
285  m_InputShape0 = { 1, 2, 2, 3 };
286  m_InputShape1 = { 1, 1, 1, 3 };
287 
288  m_OutputShape = m_InputShape0;
289 
290  m_InputData0 =
291  {
292  1.f, 2.f, 3.f, 4.f, 5.f, 6.f,
293  7.f, 8.f, 9.f, 10.f, 11.f, 12.f
294  };
295 
296  m_InputData1 = { 4.f, 5.f, 6.f };
297 
298  m_OutputEqual =
299  {
300  0, 0, 0, 1, 1, 1,
301  0, 0, 0, 0, 0, 0
302  };
303 
304  m_OutputGreater =
305  {
306  0, 0, 0, 0, 0, 0,
307  1, 1, 1, 1, 1, 1
308  };
309 
310  m_OutputGreaterOrEqual =
311  {
312  0, 0, 0, 1, 1, 1,
313  1, 1, 1, 1, 1, 1
314  };
315 
316  m_OutputLess =
317  {
318  1, 1, 1, 0, 0, 0,
319  0, 0, 0, 0, 0, 0
320  };
321 
322  m_OutputLessOrEqual =
323  {
324  1, 1, 1, 1, 1, 1,
325  0, 0, 0, 0, 0, 0
326  };
327 
328  m_OutputNotEqual =
329  {
330  1, 1, 1, 0, 0, 0,
331  1, 1, 1, 1, 1, 1
332  };
333  }
334 };
335 
336 static SimpleTestData s_SimpleTestData;
337 static Broadcast1ElementTestData s_Broadcast1ElementTestData;
338 static Broadcast1dVectorTestData s_Broadcast1dVectorTestData;
339 
340 } // anonymous namespace
341 
342 // Equal
345  const armnn::ITensorHandleFactory& tensorHandleFactory)
346 {
347  return ComparisonTestImpl<armnn::DataType::Float32>(
348  workloadFactory,
349  memoryManager,
350  tensorHandleFactory,
351  s_SimpleTestData,
353 }
354 
356  armnn::IWorkloadFactory& workloadFactory,
358  const armnn::ITensorHandleFactory& tensorHandleFactory)
359 {
360  return ComparisonTestImpl<armnn::DataType::Float32>(
361  workloadFactory,
362  memoryManager,
363  tensorHandleFactory,
364  s_Broadcast1ElementTestData,
366 }
367 
369  armnn::IWorkloadFactory& workloadFactory,
371  const armnn::ITensorHandleFactory& tensorHandleFactory)
372 {
373  return ComparisonTestImpl<armnn::DataType::Float32>(
374  workloadFactory,
375  memoryManager,
376  tensorHandleFactory,
377  s_Broadcast1dVectorTestData,
379 }
380 
382  armnn::IWorkloadFactory& workloadFactory,
384  const armnn::ITensorHandleFactory& tensorHandleFactory)
385 {
386  return ComparisonTestImpl<armnn::DataType::Float16>(
387  workloadFactory,
388  memoryManager,
389  tensorHandleFactory,
390  s_SimpleTestData,
392 }
393 
395  armnn::IWorkloadFactory& workloadFactory,
397  const armnn::ITensorHandleFactory& tensorHandleFactory)
398 {
399  return ComparisonTestImpl<armnn::DataType::Float16>(
400  workloadFactory,
401  memoryManager,
402  tensorHandleFactory,
403  s_Broadcast1ElementTestData,
405 }
406 
408  armnn::IWorkloadFactory& workloadFactory,
410  const armnn::ITensorHandleFactory& tensorHandleFactory)
411 {
412  return ComparisonTestImpl<armnn::DataType::Float16>(
413  workloadFactory,
414  memoryManager,
415  tensorHandleFactory,
416  s_Broadcast1dVectorTestData,
418 }
419 
421  armnn::IWorkloadFactory& workloadFactory,
423  const armnn::ITensorHandleFactory& tensorHandleFactory)
424 {
425  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
426  workloadFactory,
427  memoryManager,
428  tensorHandleFactory,
429  s_SimpleTestData,
431 }
432 
434  armnn::IWorkloadFactory& workloadFactory,
436  const armnn::ITensorHandleFactory& tensorHandleFactory)
437 {
438  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
439  workloadFactory,
440  memoryManager,
441  tensorHandleFactory,
442  s_Broadcast1ElementTestData,
444 }
445 
447  armnn::IWorkloadFactory& workloadFactory,
449  const armnn::ITensorHandleFactory& tensorHandleFactory)
450 {
451  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
452  workloadFactory,
453  memoryManager,
454  tensorHandleFactory,
455  s_Broadcast1dVectorTestData,
457 }
458 
459 // Greater
462  const armnn::ITensorHandleFactory& tensorHandleFactory)
463 {
464  return ComparisonTestImpl<armnn::DataType::Float32>(
465  workloadFactory,
466  memoryManager,
467  tensorHandleFactory,
468  s_SimpleTestData,
470 }
471 
473  armnn::IWorkloadFactory& workloadFactory,
475  const armnn::ITensorHandleFactory& tensorHandleFactory)
476 {
477  return ComparisonTestImpl<armnn::DataType::Float32>(
478  workloadFactory,
479  memoryManager,
480  tensorHandleFactory,
481  s_Broadcast1ElementTestData,
483 }
484 
486  armnn::IWorkloadFactory& workloadFactory,
488  const armnn::ITensorHandleFactory& tensorHandleFactory)
489 {
490  return ComparisonTestImpl<armnn::DataType::Float32>(
491  workloadFactory,
492  memoryManager,
493  tensorHandleFactory,
494  s_Broadcast1dVectorTestData,
496 }
497 
499  armnn::IWorkloadFactory& workloadFactory,
501  const armnn::ITensorHandleFactory& tensorHandleFactory)
502 {
503  return ComparisonTestImpl<armnn::DataType::Float16>(
504  workloadFactory,
505  memoryManager,
506  tensorHandleFactory,
507  s_SimpleTestData,
509 }
510 
512  armnn::IWorkloadFactory& workloadFactory,
514  const armnn::ITensorHandleFactory& tensorHandleFactory)
515 {
516  return ComparisonTestImpl<armnn::DataType::Float16>(
517  workloadFactory,
518  memoryManager,
519  tensorHandleFactory,
520  s_Broadcast1ElementTestData,
522 }
523 
525  armnn::IWorkloadFactory& workloadFactory,
527  const armnn::ITensorHandleFactory& tensorHandleFactory)
528 {
529  return ComparisonTestImpl<armnn::DataType::Float16>(
530  workloadFactory,
531  memoryManager,
532  tensorHandleFactory,
533  s_Broadcast1dVectorTestData,
535 }
536 
538  armnn::IWorkloadFactory& workloadFactory,
540  const armnn::ITensorHandleFactory& tensorHandleFactory)
541 {
542  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
543  workloadFactory,
544  memoryManager,
545  tensorHandleFactory,
546  s_SimpleTestData,
548 }
549 
551  armnn::IWorkloadFactory& workloadFactory,
553  const armnn::ITensorHandleFactory& tensorHandleFactory)
554 {
555  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
556  workloadFactory,
557  memoryManager,
558  tensorHandleFactory,
559  s_Broadcast1ElementTestData,
561 }
562 
564  armnn::IWorkloadFactory& workloadFactory,
566  const armnn::ITensorHandleFactory& tensorHandleFactory)
567 {
568  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
569  workloadFactory,
570  memoryManager,
571  tensorHandleFactory,
572  s_Broadcast1dVectorTestData,
574 }
575 
576 // GreaterOrEqual
578  armnn::IWorkloadFactory& workloadFactory,
580  const armnn::ITensorHandleFactory& tensorHandleFactory)
581 {
582  return ComparisonTestImpl<armnn::DataType::Float32>(
583  workloadFactory,
584  memoryManager,
585  tensorHandleFactory,
586  s_SimpleTestData,
588 }
589 
591  armnn::IWorkloadFactory& workloadFactory,
593  const armnn::ITensorHandleFactory& tensorHandleFactory)
594 {
595  return ComparisonTestImpl<armnn::DataType::Float32>(
596  workloadFactory,
597  memoryManager,
598  tensorHandleFactory,
599  s_Broadcast1ElementTestData,
601 }
602 
604  armnn::IWorkloadFactory& workloadFactory,
606  const armnn::ITensorHandleFactory& tensorHandleFactory)
607 {
608  return ComparisonTestImpl<armnn::DataType::Float32>(
609  workloadFactory,
610  memoryManager,
611  tensorHandleFactory,
612  s_Broadcast1dVectorTestData,
614 }
615 
617  armnn::IWorkloadFactory& workloadFactory,
619  const armnn::ITensorHandleFactory& tensorHandleFactory)
620 {
621  return ComparisonTestImpl<armnn::DataType::Float16>(
622  workloadFactory,
623  memoryManager,
624  tensorHandleFactory,
625  s_SimpleTestData,
627 }
628 
630  armnn::IWorkloadFactory& workloadFactory,
632  const armnn::ITensorHandleFactory& tensorHandleFactory)
633 {
634  return ComparisonTestImpl<armnn::DataType::Float16>(
635  workloadFactory,
636  memoryManager,
637  tensorHandleFactory,
638  s_Broadcast1ElementTestData,
640 }
641 
643  armnn::IWorkloadFactory& workloadFactory,
645  const armnn::ITensorHandleFactory& tensorHandleFactory)
646 {
647  return ComparisonTestImpl<armnn::DataType::Float16>(
648  workloadFactory,
649  memoryManager,
650  tensorHandleFactory,
651  s_Broadcast1dVectorTestData,
653 }
654 
656  armnn::IWorkloadFactory& workloadFactory,
658  const armnn::ITensorHandleFactory& tensorHandleFactory)
659 {
660  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
661  workloadFactory,
662  memoryManager,
663  tensorHandleFactory,
664  s_SimpleTestData,
666 }
667 
669  armnn::IWorkloadFactory& workloadFactory,
671  const armnn::ITensorHandleFactory& tensorHandleFactory)
672 {
673  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
674  workloadFactory,
675  memoryManager,
676  tensorHandleFactory,
677  s_Broadcast1ElementTestData,
679 }
680 
682  armnn::IWorkloadFactory& workloadFactory,
684  const armnn::ITensorHandleFactory& tensorHandleFactory)
685 {
686  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
687  workloadFactory,
688  memoryManager,
689  tensorHandleFactory,
690  s_Broadcast1dVectorTestData,
692 }
693 
694 // Less
697  const armnn::ITensorHandleFactory& tensorHandleFactory)
698 {
699  return ComparisonTestImpl<armnn::DataType::Float32>(
700  workloadFactory,
701  memoryManager,
702  tensorHandleFactory,
703  s_SimpleTestData,
705 }
706 
708  armnn::IWorkloadFactory& workloadFactory,
710  const armnn::ITensorHandleFactory& tensorHandleFactory)
711 {
712  return ComparisonTestImpl<armnn::DataType::Float32>(
713  workloadFactory,
714  memoryManager,
715  tensorHandleFactory,
716  s_Broadcast1ElementTestData,
718 }
719 
721  armnn::IWorkloadFactory& workloadFactory,
723  const armnn::ITensorHandleFactory& tensorHandleFactory)
724 {
725  return ComparisonTestImpl<armnn::DataType::Float32>(
726  workloadFactory,
727  memoryManager,
728  tensorHandleFactory,
729  s_Broadcast1dVectorTestData,
731 }
732 
734  armnn::IWorkloadFactory& workloadFactory,
736  const armnn::ITensorHandleFactory& tensorHandleFactory)
737 {
738  return ComparisonTestImpl<armnn::DataType::Float16>(
739  workloadFactory,
740  memoryManager,
741  tensorHandleFactory,
742  s_SimpleTestData,
744 }
745 
747  armnn::IWorkloadFactory& workloadFactory,
749  const armnn::ITensorHandleFactory& tensorHandleFactory)
750 {
751  return ComparisonTestImpl<armnn::DataType::Float16>(
752  workloadFactory,
753  memoryManager,
754  tensorHandleFactory,
755  s_Broadcast1ElementTestData,
757 }
758 
760  armnn::IWorkloadFactory& workloadFactory,
762  const armnn::ITensorHandleFactory& tensorHandleFactory)
763 {
764  return ComparisonTestImpl<armnn::DataType::Float16>(
765  workloadFactory,
766  memoryManager,
767  tensorHandleFactory,
768  s_Broadcast1dVectorTestData,
770 }
771 
773  armnn::IWorkloadFactory& workloadFactory,
775  const armnn::ITensorHandleFactory& tensorHandleFactory)
776 {
777  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
778  workloadFactory,
779  memoryManager,
780  tensorHandleFactory,
781  s_SimpleTestData,
783 }
784 
786  armnn::IWorkloadFactory& workloadFactory,
788  const armnn::ITensorHandleFactory& tensorHandleFactory)
789 {
790  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
791  workloadFactory,
792  memoryManager,
793  tensorHandleFactory,
794  s_Broadcast1ElementTestData,
796 }
797 
799  armnn::IWorkloadFactory& workloadFactory,
801  const armnn::ITensorHandleFactory& tensorHandleFactory)
802 {
803  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
804  workloadFactory,
805  memoryManager,
806  tensorHandleFactory,
807  s_Broadcast1dVectorTestData,
809 }
810 
811 // LessOrEqual
813  armnn::IWorkloadFactory& workloadFactory,
815  const armnn::ITensorHandleFactory& tensorHandleFactory)
816 {
817  return ComparisonTestImpl<armnn::DataType::Float32>(
818  workloadFactory,
819  memoryManager,
820  tensorHandleFactory,
821  s_SimpleTestData,
823 }
824 
826  armnn::IWorkloadFactory& workloadFactory,
828  const armnn::ITensorHandleFactory& tensorHandleFactory)
829 {
830  return ComparisonTestImpl<armnn::DataType::Float32>(
831  workloadFactory,
832  memoryManager,
833  tensorHandleFactory,
834  s_Broadcast1ElementTestData,
836 }
837 
839  armnn::IWorkloadFactory& workloadFactory,
841  const armnn::ITensorHandleFactory& tensorHandleFactory)
842 {
843  return ComparisonTestImpl<armnn::DataType::Float32>(
844  workloadFactory,
845  memoryManager,
846  tensorHandleFactory,
847  s_Broadcast1dVectorTestData,
849 }
850 
852  armnn::IWorkloadFactory& workloadFactory,
854  const armnn::ITensorHandleFactory& tensorHandleFactory)
855 {
856  return ComparisonTestImpl<armnn::DataType::Float16>(
857  workloadFactory,
858  memoryManager,
859  tensorHandleFactory,
860  s_SimpleTestData,
862 }
863 
865  armnn::IWorkloadFactory& workloadFactory,
867  const armnn::ITensorHandleFactory& tensorHandleFactory)
868 {
869  return ComparisonTestImpl<armnn::DataType::Float16>(
870  workloadFactory,
871  memoryManager,
872  tensorHandleFactory,
873  s_Broadcast1ElementTestData,
875 }
876 
878  armnn::IWorkloadFactory& workloadFactory,
880  const armnn::ITensorHandleFactory& tensorHandleFactory)
881 {
882  return ComparisonTestImpl<armnn::DataType::Float16>(
883  workloadFactory,
884  memoryManager,
885  tensorHandleFactory,
886  s_Broadcast1dVectorTestData,
888 }
889 
891  armnn::IWorkloadFactory& workloadFactory,
893  const armnn::ITensorHandleFactory& tensorHandleFactory)
894 {
895  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
896  workloadFactory,
897  memoryManager,
898  tensorHandleFactory,
899  s_SimpleTestData,
901 }
902 
904  armnn::IWorkloadFactory& workloadFactory,
906  const armnn::ITensorHandleFactory& tensorHandleFactory)
907 {
908  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
909  workloadFactory,
910  memoryManager,
911  tensorHandleFactory,
912  s_Broadcast1ElementTestData,
914 }
915 
917  armnn::IWorkloadFactory& workloadFactory,
919  const armnn::ITensorHandleFactory& tensorHandleFactory)
920 {
921  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
922  workloadFactory,
923  memoryManager,
924  tensorHandleFactory,
925  s_Broadcast1dVectorTestData,
927 }
928 
929 // NotEqual
931  armnn::IWorkloadFactory& workloadFactory,
933  const armnn::ITensorHandleFactory& tensorHandleFactory)
934 {
935  return ComparisonTestImpl<armnn::DataType::Float32>(
936  workloadFactory,
937  memoryManager,
938  tensorHandleFactory,
939  s_SimpleTestData,
941 }
942 
944  armnn::IWorkloadFactory& workloadFactory,
946  const armnn::ITensorHandleFactory& tensorHandleFactory)
947 {
948  return ComparisonTestImpl<armnn::DataType::Float32>(
949  workloadFactory,
950  memoryManager,
951  tensorHandleFactory,
952  s_Broadcast1ElementTestData,
954 }
955 
957  armnn::IWorkloadFactory& workloadFactory,
959  const armnn::ITensorHandleFactory& tensorHandleFactory)
960 {
961  return ComparisonTestImpl<armnn::DataType::Float32>(
962  workloadFactory,
963  memoryManager,
964  tensorHandleFactory,
965  s_Broadcast1dVectorTestData,
967 }
968 
970  armnn::IWorkloadFactory& workloadFactory,
972  const armnn::ITensorHandleFactory& tensorHandleFactory)
973 {
974  return ComparisonTestImpl<armnn::DataType::Float16>(
975  workloadFactory,
976  memoryManager,
977  tensorHandleFactory,
978  s_SimpleTestData,
980 }
981 
983  armnn::IWorkloadFactory& workloadFactory,
985  const armnn::ITensorHandleFactory& tensorHandleFactory)
986 {
987  return ComparisonTestImpl<armnn::DataType::Float16>(
988  workloadFactory,
989  memoryManager,
990  tensorHandleFactory,
991  s_Broadcast1ElementTestData,
993 }
994 
996  armnn::IWorkloadFactory& workloadFactory,
998  const armnn::ITensorHandleFactory& tensorHandleFactory)
999 {
1000  return ComparisonTestImpl<armnn::DataType::Float16>(
1001  workloadFactory,
1002  memoryManager,
1003  tensorHandleFactory,
1004  s_Broadcast1dVectorTestData,
1006 }
1007 
1009  armnn::IWorkloadFactory& workloadFactory,
1011  const armnn::ITensorHandleFactory& tensorHandleFactory)
1012 {
1013  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1014  workloadFactory,
1015  memoryManager,
1016  tensorHandleFactory,
1017  s_SimpleTestData,
1019 }
1020 
1022  armnn::IWorkloadFactory& workloadFactory,
1024  const armnn::ITensorHandleFactory& tensorHandleFactory)
1025 {
1026  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1027  workloadFactory,
1028  memoryManager,
1029  tensorHandleFactory,
1030  s_Broadcast1ElementTestData,
1032 }
1033 
1035  armnn::IWorkloadFactory& workloadFactory,
1037  const armnn::ITensorHandleFactory& tensorHandleFactory)
1038 {
1039  return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1040  workloadFactory,
1041  memoryManager,
1042  tensorHandleFactory,
1043  s_Broadcast1dVectorTestData,
1045 }
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:89
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:108
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:48
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)
void CopyDataFromITensorHandle(void *mem, const armnn::ITensorHandle *tensorHandle)
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)
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)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
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< IWorkload > CreateWorkload(LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const
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)
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)