ArmNN
 22.08
BatchMatMulTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
12 
16 #include <armnn/Optional.hpp>
17 
18 
19 template<armnn::DataType ArmnnType, typename T, std::size_t NumDims>
21  armnn::IWorkloadFactory& workloadFactory,
23  const armnn::ITensorHandleFactory& tensorHandleFactory,
25  const std::vector<T>& inputX,
26  const std::vector<T>& inputY,
27  const std::vector<T>& outputExpected,
28  const armnn::TensorInfo& inputXInfo,
29  const armnn::TensorInfo& inputYInfo,
30  const armnn::TensorInfo& outputInfo)
31 {
32  std::vector<T> outputActual(outputInfo.GetNumElements());
33 
34  std::unique_ptr<armnn::ITensorHandle> inputXHandle = tensorHandleFactory.CreateTensorHandle(inputXInfo);
35  std::unique_ptr<armnn::ITensorHandle> inputYHandle = tensorHandleFactory.CreateTensorHandle(inputYInfo);
36  std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
37 
38  armnn::BatchMatMulQueueDescriptor queueDescriptor;
39  queueDescriptor.m_Parameters = descriptor;
40  armnn::WorkloadInfo workloadInfo;
41 
42  AddInputToWorkload(queueDescriptor, workloadInfo, inputXInfo, inputXHandle.get());
43  AddInputToWorkload(queueDescriptor, workloadInfo, inputYInfo, inputYHandle.get());
44  AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());
45 
46  auto workload = workloadFactory.CreateWorkload(armnn::LayerType::BatchMatMul, queueDescriptor, workloadInfo);
47 
48  inputXHandle->Allocate();
49  inputYHandle->Allocate();
50  outputHandle->Allocate();
51 
52  CopyDataToITensorHandle(inputXHandle.get(), inputX.data());
53  CopyDataToITensorHandle(inputYHandle.get(), inputY.data());
54 
55  workload->PostAllocationConfigure();
56  ExecuteWorkload(*workload, memoryManager);
57 
58  CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
59 
60  return LayerTestResult<T, NumDims>(outputActual,
61  outputExpected,
62  outputHandle->GetShape(),
63  outputInfo.GetShape());
64 }
65 
66 template<armnn::DataType ArmnnType, typename T>
68  armnn::IWorkloadFactory& workloadFactory,
70  const armnn::ITensorHandleFactory& tensorHandleFactory)
71 {
72  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
73 
74  float qScale = 0.0f;
75  int32_t qOffset = 0;
76 
77  switch(ArmnnType)
78  {
82  qScale = 1.0f;
83  break;
84  default:
85  break;
86  }
87 
88  armnn::TensorInfo inputXInfo({2,2}, ArmnnType, qScale, qOffset);
89  armnn::TensorInfo inputYInfo({2,2}, ArmnnType, qScale, qOffset);
90  armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
91 
92  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
93  1, 2,
94  3, 4
95  }, qScale, qOffset);
96 
97  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
98  5, 6,
99  7, 8
100  }, qScale, qOffset);
101 
102  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
103  19, 22,
104  43, 50
105  }, qScale, qOffset);
106 
107  return BatchMatMulTestImpl<ArmnnType, T, 2>(workloadFactory,
108  memoryManager,
109  tensorHandleFactory,
110  descriptor,
111  inputX,
112  inputY,
113  outputExpected,
114  inputXInfo,
115  inputYInfo,
116  outputInfo);
117 }
118 
120 BatchMatMul2DSimpleTest<armnn::DataType::BFloat16>(
121  armnn::IWorkloadFactory& workloadFactory,
123  const armnn::ITensorHandleFactory& tensorHandleFactory);
124 
126 BatchMatMul2DSimpleTest<armnn::DataType::Float32>(
127  armnn::IWorkloadFactory& workloadFactory,
129  const armnn::ITensorHandleFactory& tensorHandleFactory);
130 
132 BatchMatMul2DSimpleTest<armnn::DataType::Float16>(
133  armnn::IWorkloadFactory& workloadFactory,
135  const armnn::ITensorHandleFactory& tensorHandleFactory);
136 
138 BatchMatMul2DSimpleTest<armnn::DataType::QAsymmS8>(
139  armnn::IWorkloadFactory& workloadFactory,
141  const armnn::ITensorHandleFactory& tensorHandleFactory);
142 
144 BatchMatMul2DSimpleTest<armnn::DataType::QAsymmU8>(
145  armnn::IWorkloadFactory& workloadFactory,
147  const armnn::ITensorHandleFactory& tensorHandleFactory);
148 
150 BatchMatMul2DSimpleTest<armnn::DataType::QSymmS16>(
151  armnn::IWorkloadFactory& workloadFactory,
153  const armnn::ITensorHandleFactory& tensorHandleFactory);
154 
155 template<armnn::DataType ArmnnType, typename T>
157  armnn::IWorkloadFactory& workloadFactory,
159  const armnn::ITensorHandleFactory& tensorHandleFactory)
160 {
161  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
162 
163  float qScale = 0.0f;
164  int32_t qOffset = 0;
165 
166  switch(ArmnnType)
167  {
171  qScale = 1.0f;
172  break;
173  default:
174  break;
175  }
176 
177  armnn::TensorInfo inputXInfo({1,2,2}, ArmnnType, qScale, qOffset);
178  armnn::TensorInfo inputYInfo({1,2,2}, ArmnnType, qScale, qOffset);
179  armnn::TensorInfo outputInfo({1,2,2}, ArmnnType, qScale, qOffset);
180 
181  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
182  1, 2,
183  3, 4
184  }, qScale, qOffset);
185 
186  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
187  5, 6,
188  7, 8
189  }, qScale, qOffset);
190 
191  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
192  19, 22,
193  43, 50
194  },qScale, qOffset);
195 
196  return BatchMatMulTestImpl<ArmnnType, T, 3>(workloadFactory,
197  memoryManager,
198  tensorHandleFactory,
199  descriptor,
200  inputX,
201  inputY,
202  outputExpected,
203  inputXInfo,
204  inputYInfo,
205  outputInfo);
206 }
207 
209 BatchMatMul3DSimpleTest<armnn::DataType::BFloat16>(
210  armnn::IWorkloadFactory& workloadFactory,
212  const armnn::ITensorHandleFactory& tensorHandleFactory);
213 
215 BatchMatMul3DSimpleTest<armnn::DataType::Float32>(
216  armnn::IWorkloadFactory& workloadFactory,
218  const armnn::ITensorHandleFactory& tensorHandleFactory);
219 
221 BatchMatMul3DSimpleTest<armnn::DataType::Float16>(
222  armnn::IWorkloadFactory& workloadFactory,
224  const armnn::ITensorHandleFactory& tensorHandleFactory);
225 
227 BatchMatMul3DSimpleTest<armnn::DataType::QAsymmS8>(
228  armnn::IWorkloadFactory& workloadFactory,
230  const armnn::ITensorHandleFactory& tensorHandleFactory);
231 
233 BatchMatMul3DSimpleTest<armnn::DataType::QAsymmU8>(
234  armnn::IWorkloadFactory& workloadFactory,
236  const armnn::ITensorHandleFactory& tensorHandleFactory);
237 
239 BatchMatMul3DSimpleTest<armnn::DataType::QSymmS16>(
240  armnn::IWorkloadFactory& workloadFactory,
242  const armnn::ITensorHandleFactory& tensorHandleFactory);
243 
244 template<armnn::DataType ArmnnType, typename T>
246  armnn::IWorkloadFactory& workloadFactory,
248  const armnn::ITensorHandleFactory& tensorHandleFactory)
249 {
250  auto descriptor = armnn::BatchMatMulDescriptor(
253 
254  float qScale = 0.0f;
255  int32_t qOffset = 0;
256 
257  switch(ArmnnType)
258  {
262  qScale = 1.0f;
263  break;
264  default:
265  break;
266  }
267 
268  armnn::TensorInfo inputXInfo({1,1,2,2}, ArmnnType, qScale, qOffset);
269  armnn::TensorInfo inputYInfo({1,1,2,2}, ArmnnType, qScale, qOffset);
270  armnn::TensorInfo outputInfo({1,1,2,2}, ArmnnType, qScale, qOffset);
271 
272  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
273  1, 2,
274  3, 4
275  }, qScale, qOffset);
276 
277  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
278  5, 6,
279  7, 8
280  }, qScale, qOffset);
281 
282  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
283  19, 22,
284  43, 50
285  },qScale, qOffset);
286 
287  return BatchMatMulTestImpl<ArmnnType, T, 4>(workloadFactory,
288  memoryManager,
289  tensorHandleFactory,
290  descriptor,
291  inputX,
292  inputY,
293  outputExpected,
294  inputXInfo,
295  inputYInfo,
296  outputInfo);
297 }
298 
300 BatchMatMulNCHWSimpleTest<armnn::DataType::BFloat16>(
301  armnn::IWorkloadFactory& workloadFactory,
303  const armnn::ITensorHandleFactory& tensorHandleFactory);
304 
306 BatchMatMulNCHWSimpleTest<armnn::DataType::Float32>(
307  armnn::IWorkloadFactory& workloadFactory,
309  const armnn::ITensorHandleFactory& tensorHandleFactory);
310 
312 BatchMatMulNCHWSimpleTest<armnn::DataType::Float16>(
313  armnn::IWorkloadFactory& workloadFactory,
315  const armnn::ITensorHandleFactory& tensorHandleFactory);
316 
318 BatchMatMulNCHWSimpleTest<armnn::DataType::QAsymmS8>(
319  armnn::IWorkloadFactory& workloadFactory,
321  const armnn::ITensorHandleFactory& tensorHandleFactory);
322 
324 BatchMatMulNCHWSimpleTest<armnn::DataType::QAsymmU8>(
325  armnn::IWorkloadFactory& workloadFactory,
327  const armnn::ITensorHandleFactory& tensorHandleFactory);
328 
330 BatchMatMulNCHWSimpleTest<armnn::DataType::QSymmS16>(
331  armnn::IWorkloadFactory& workloadFactory,
333  const armnn::ITensorHandleFactory& tensorHandleFactory);
334 
335 template<armnn::DataType ArmnnType, typename T>
337  armnn::IWorkloadFactory& workloadFactory,
339  const armnn::ITensorHandleFactory& tensorHandleFactory)
340 {
341  auto descriptor = armnn::BatchMatMulDescriptor(
344 
345  float qScale = 0.0f;
346  int32_t qOffset = 0;
347 
348  switch(ArmnnType)
349  {
353  qScale = 1.0f;
354  break;
355  default:
356  break;
357  }
358 
359  armnn::TensorInfo inputXInfo({1,2,2,1}, ArmnnType, qScale, qOffset);
360  armnn::TensorInfo inputYInfo({1,2,2,1}, ArmnnType, qScale, qOffset);
361  armnn::TensorInfo outputInfo({1,2,2,1}, ArmnnType, qScale, qOffset);
362 
363  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
364  1, 2,
365  3, 4
366  }, qScale, qOffset);
367 
368  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
369  5, 6,
370  7, 8
371  }, qScale, qOffset);
372 
373  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
374  19, 22,
375  43, 50
376  },qScale, qOffset);
377 
378  return BatchMatMulTestImpl<ArmnnType, T, 4>(workloadFactory,
379  memoryManager,
380  tensorHandleFactory,
381  descriptor,
382  inputX,
383  inputY,
384  outputExpected,
385  inputXInfo,
386  inputYInfo,
387  outputInfo);
388 }
389 
391 BatchMatMulNHWCSimpleTest<armnn::DataType::BFloat16>(
392  armnn::IWorkloadFactory& workloadFactory,
394  const armnn::ITensorHandleFactory& tensorHandleFactory);
395 
397 BatchMatMulNHWCSimpleTest<armnn::DataType::Float32>(
398  armnn::IWorkloadFactory& workloadFactory,
400  const armnn::ITensorHandleFactory& tensorHandleFactory);
401 
403 BatchMatMulNHWCSimpleTest<armnn::DataType::Float16>(
404  armnn::IWorkloadFactory& workloadFactory,
406  const armnn::ITensorHandleFactory& tensorHandleFactory);
407 
409 BatchMatMulNHWCSimpleTest<armnn::DataType::QAsymmS8>(
410  armnn::IWorkloadFactory& workloadFactory,
412  const armnn::ITensorHandleFactory& tensorHandleFactory);
413 
415 BatchMatMulNHWCSimpleTest<armnn::DataType::QAsymmU8>(
416  armnn::IWorkloadFactory& workloadFactory,
418  const armnn::ITensorHandleFactory& tensorHandleFactory);
419 
421 BatchMatMulNHWCSimpleTest<armnn::DataType::QSymmS16>(
422  armnn::IWorkloadFactory& workloadFactory,
424  const armnn::ITensorHandleFactory& tensorHandleFactory);
425 
426 template<armnn::DataType ArmnnType, typename T>
428  armnn::IWorkloadFactory& workloadFactory,
430  const armnn::ITensorHandleFactory& tensorHandleFactory)
431 {
432  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
433 
434  float qScale = 0.0f;
435  int32_t qOffset = 0;
436 
437  switch(ArmnnType)
438  {
442  qScale = 1.0f;
443  break;
444  default:
445  break;
446  }
447 
448  armnn::TensorInfo inputXInfo({2,2,2}, ArmnnType, qScale, qOffset);
449  armnn::TensorInfo inputYInfo({2,2,2}, ArmnnType, qScale, qOffset);
450  armnn::TensorInfo outputInfo({2,2,2}, ArmnnType, qScale, qOffset);
451 
452  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
453  1, 2,
454  3, 4,
455 
456  9, 10,
457  11, 12
458  }, qScale, qOffset);
459 
460  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
461  5, 6,
462  7, 8,
463 
464  13, 14,
465  15, 16
466  }, qScale, qOffset);
467 
468  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
469  19, 22,
470  43, 50,
471 
472  267, 286,
473  323, 346
474  },qScale, qOffset);
475 
476  return BatchMatMulTestImpl<ArmnnType, T, 3>(workloadFactory,
477  memoryManager,
478  tensorHandleFactory,
479  descriptor,
480  inputX,
481  inputY,
482  outputExpected,
483  inputXInfo,
484  inputYInfo,
485  outputInfo);
486 }
487 
489 BatchMatMul3DBatchTest<armnn::DataType::BFloat16>(
490  armnn::IWorkloadFactory& workloadFactory,
492  const armnn::ITensorHandleFactory& tensorHandleFactory);
493 
495 BatchMatMul3DBatchTest<armnn::DataType::Float32>(
496  armnn::IWorkloadFactory& workloadFactory,
498  const armnn::ITensorHandleFactory& tensorHandleFactory);
499 
501 BatchMatMul3DBatchTest<armnn::DataType::Float16>(
502  armnn::IWorkloadFactory& workloadFactory,
504  const armnn::ITensorHandleFactory& tensorHandleFactory);
505 
507 BatchMatMul3DBatchTest<armnn::DataType::QAsymmS8>(
508  armnn::IWorkloadFactory& workloadFactory,
510  const armnn::ITensorHandleFactory& tensorHandleFactory);
511 
513 BatchMatMul3DBatchTest<armnn::DataType::QAsymmU8>(
514  armnn::IWorkloadFactory& workloadFactory,
516  const armnn::ITensorHandleFactory& tensorHandleFactory);
517 
519 BatchMatMul3DBatchTest<armnn::DataType::QSymmS16>(
520  armnn::IWorkloadFactory& workloadFactory,
522  const armnn::ITensorHandleFactory& tensorHandleFactory);
523 
524 template<armnn::DataType ArmnnType, typename T>
526  armnn::IWorkloadFactory& workloadFactory,
528  const armnn::ITensorHandleFactory& tensorHandleFactory)
529 {
530  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
531 
532  float qScale = 0.0f;
533  int32_t qOffset = 0;
534 
535  switch(ArmnnType)
536  {
540  qScale = 1.0f;
541  break;
542  default:
543  break;
544  }
545 
546  armnn::TensorInfo inputXInfo({2,2,2}, ArmnnType, qScale, qOffset);
547  armnn::TensorInfo inputYInfo({1,2,2}, ArmnnType, qScale, qOffset);
548  armnn::TensorInfo outputInfo({2,2,2}, ArmnnType, qScale, qOffset);
549 
550  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
551  1, 2,
552  3, 4,
553 
554  9, 10,
555  11, 12
556  }, qScale, qOffset);
557 
558  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
559  13, 14,
560  15, 16
561  }, qScale, qOffset);
562 
563  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
564  43, 46,
565  99, 106,
566 
567  267, 286,
568  323, 346
569  },qScale, qOffset);
570 
571  return BatchMatMulTestImpl<ArmnnType, T, 3>(workloadFactory,
572  memoryManager,
573  tensorHandleFactory,
574  descriptor,
575  inputX,
576  inputY,
577  outputExpected,
578  inputXInfo,
579  inputYInfo,
580  outputInfo);
581 }
582 
584 BatchMatMul3DBroadcastTest<armnn::DataType::BFloat16>(
585  armnn::IWorkloadFactory& workloadFactory,
587  const armnn::ITensorHandleFactory& tensorHandleFactory);
588 
590 BatchMatMul3DBroadcastTest<armnn::DataType::Float32>(
591  armnn::IWorkloadFactory& workloadFactory,
593  const armnn::ITensorHandleFactory& tensorHandleFactory);
594 
596 BatchMatMul3DBroadcastTest<armnn::DataType::Float16>(
597  armnn::IWorkloadFactory& workloadFactory,
599  const armnn::ITensorHandleFactory& tensorHandleFactory);
600 
602 BatchMatMul3DBroadcastTest<armnn::DataType::QAsymmS8>(
603  armnn::IWorkloadFactory& workloadFactory,
605  const armnn::ITensorHandleFactory& tensorHandleFactory);
606 
608 BatchMatMul3DBroadcastTest<armnn::DataType::QAsymmU8>(
609  armnn::IWorkloadFactory& workloadFactory,
611  const armnn::ITensorHandleFactory& tensorHandleFactory);
612 
614 BatchMatMul3DBroadcastTest<armnn::DataType::QSymmS16>(
615  armnn::IWorkloadFactory& workloadFactory,
617  const armnn::ITensorHandleFactory& tensorHandleFactory);
618 
619 template<armnn::DataType ArmnnType, typename T>
621  armnn::IWorkloadFactory& workloadFactory,
623  const armnn::ITensorHandleFactory& tensorHandleFactory)
624 {
625  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
626 
627  float qScale = 0.0f;
628  int32_t qOffset = 0;
629 
630  switch(ArmnnType)
631  {
635  qScale = 1.0f;
636  break;
637  default:
638  break;
639  }
640 
641  armnn::TensorInfo inputXInfo({2,2,2}, ArmnnType, qScale, qOffset);
642  armnn::TensorInfo inputYInfo({2,2}, ArmnnType, qScale, qOffset);
643  armnn::TensorInfo outputInfo({2,2,2}, ArmnnType, qScale, qOffset);
644 
645  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
646  1, 2,
647  3, 4,
648 
649  9, 10,
650  11, 12
651  }, qScale, qOffset);
652 
653  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
654  13, 14,
655  15, 16
656  }, qScale, qOffset);
657 
658  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
659  43, 46,
660  99, 106,
661 
662  267, 286,
663  323, 346
664  },qScale, qOffset);
665 
666  return BatchMatMulTestImpl<ArmnnType, T, 3>(workloadFactory,
667  memoryManager,
668  tensorHandleFactory,
669  descriptor,
670  inputX,
671  inputY,
672  outputExpected,
673  inputXInfo,
674  inputYInfo,
675  outputInfo);
676 }
677 
679 BatchMatMul3D2DBroadcastTest<armnn::DataType::BFloat16>(
680  armnn::IWorkloadFactory& workloadFactory,
682  const armnn::ITensorHandleFactory& tensorHandleFactory);
683 
685 BatchMatMul3D2DBroadcastTest<armnn::DataType::Float32>(
686  armnn::IWorkloadFactory& workloadFactory,
688  const armnn::ITensorHandleFactory& tensorHandleFactory);
689 
691 BatchMatMul3D2DBroadcastTest<armnn::DataType::Float16>(
692  armnn::IWorkloadFactory& workloadFactory,
694  const armnn::ITensorHandleFactory& tensorHandleFactory);
695 
697 BatchMatMul3D2DBroadcastTest<armnn::DataType::QAsymmS8>(
698  armnn::IWorkloadFactory& workloadFactory,
700  const armnn::ITensorHandleFactory& tensorHandleFactory);
701 
703 BatchMatMul3D2DBroadcastTest<armnn::DataType::QAsymmU8>(
704  armnn::IWorkloadFactory& workloadFactory,
706  const armnn::ITensorHandleFactory& tensorHandleFactory);
707 
709 BatchMatMul3D2DBroadcastTest<armnn::DataType::QSymmS16>(
710  armnn::IWorkloadFactory& workloadFactory,
712  const armnn::ITensorHandleFactory& tensorHandleFactory);
713 
714 template<armnn::DataType ArmnnType, typename T>
716  armnn::IWorkloadFactory& workloadFactory,
718  const armnn::ITensorHandleFactory& tensorHandleFactory)
719 {
720  auto descriptor = armnn::BatchMatMulDescriptor(
723 
724  float qScale = 0.0f;
725  int32_t qOffset = 0;
726 
727  switch(ArmnnType)
728  {
732  qScale = 1.0f;
733  break;
734  default:
735  break;
736  }
737 
738  armnn::TensorInfo inputXInfo({1,1,2,2,2}, ArmnnType, qScale, qOffset);
739  armnn::TensorInfo inputYInfo({1,2,2,2}, ArmnnType, qScale, qOffset);
740  armnn::TensorInfo outputInfo({1,1,2,2,2}, ArmnnType, qScale, qOffset);
741 
742  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
743  1, 20,
744  3, 22,
745 
746  2, 21,
747  4, 23
748  }, qScale, qOffset);
749 
750  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
751  5, 24,
752  7, 26,
753 
754  6, 25,
755  8, 27
756  }, qScale, qOffset);
757 
758  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
759  23, 1030,
760  31, 1114,
761 
762  34, 1079,
763  46, 1167
764  },qScale, qOffset);
765 
766  return BatchMatMulTestImpl<ArmnnType, T, 5>(workloadFactory,
767  memoryManager,
768  tensorHandleFactory,
769  descriptor,
770  inputX,
771  inputY,
772  outputExpected,
773  inputXInfo,
774  inputYInfo,
775  outputInfo);
776 }
777 
779 BatchMatMulNDHWCNHWCTest<armnn::DataType::BFloat16>(
780  armnn::IWorkloadFactory& workloadFactory,
782  const armnn::ITensorHandleFactory& tensorHandleFactory);
783 
785 BatchMatMulNDHWCNHWCTest<armnn::DataType::Float32>(
786  armnn::IWorkloadFactory& workloadFactory,
788  const armnn::ITensorHandleFactory& tensorHandleFactory);
789 
791 BatchMatMulNDHWCNHWCTest<armnn::DataType::Float16>(
792  armnn::IWorkloadFactory& workloadFactory,
794  const armnn::ITensorHandleFactory& tensorHandleFactory);
795 
797 BatchMatMulNDHWCNHWCTest<armnn::DataType::QAsymmS8>(
798  armnn::IWorkloadFactory& workloadFactory,
800  const armnn::ITensorHandleFactory& tensorHandleFactory);
801 
803 BatchMatMulNDHWCNHWCTest<armnn::DataType::QAsymmU8>(
804  armnn::IWorkloadFactory& workloadFactory,
806  const armnn::ITensorHandleFactory& tensorHandleFactory);
807 
809 BatchMatMulNDHWCNHWCTest<armnn::DataType::QSymmS16>(
810  armnn::IWorkloadFactory& workloadFactory,
812  const armnn::ITensorHandleFactory& tensorHandleFactory);
813 
814 template<armnn::DataType ArmnnType, typename T>
816  armnn::IWorkloadFactory& workloadFactory,
818  const armnn::ITensorHandleFactory& tensorHandleFactory)
819 {
820  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
821 
822  float qScale = 0.0f;
823  int32_t qOffset = 0;
824 
825  switch(ArmnnType)
826  {
830  qScale = 1.0f;
831  break;
832  default:
833  break;
834  }
835 
836  armnn::TensorInfo inputXInfo({1,1}, ArmnnType, qScale, qOffset);
837  armnn::TensorInfo inputYInfo({1,1}, ArmnnType, qScale, qOffset);
838  armnn::TensorInfo outputInfo({1,1}, ArmnnType, qScale, qOffset);
839 
840  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
841  3
842  }, qScale, qOffset);
843 
844  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
845  5
846  }, qScale, qOffset);
847 
848  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
849  15
850  }, qScale, qOffset);
851 
852  return BatchMatMulTestImpl<ArmnnType, T, 2>(workloadFactory,
853  memoryManager,
854  tensorHandleFactory,
855  descriptor,
856  inputX,
857  inputY,
858  outputExpected,
859  inputXInfo,
860  inputYInfo,
861  outputInfo);
862 }
863 
865 BatchMatMul2DTinyTest<armnn::DataType::BFloat16>(
866  armnn::IWorkloadFactory& workloadFactory,
868  const armnn::ITensorHandleFactory& tensorHandleFactory);
869 
871 BatchMatMul2DTinyTest<armnn::DataType::Float32>(
872  armnn::IWorkloadFactory& workloadFactory,
874  const armnn::ITensorHandleFactory& tensorHandleFactory);
875 
877 BatchMatMul2DTinyTest<armnn::DataType::Float16>(
878  armnn::IWorkloadFactory& workloadFactory,
880  const armnn::ITensorHandleFactory& tensorHandleFactory);
881 
883 BatchMatMul2DTinyTest<armnn::DataType::QAsymmS8>(
884  armnn::IWorkloadFactory& workloadFactory,
886  const armnn::ITensorHandleFactory& tensorHandleFactory);
887 
889 BatchMatMul2DTinyTest<armnn::DataType::QAsymmU8>(
890  armnn::IWorkloadFactory& workloadFactory,
892  const armnn::ITensorHandleFactory& tensorHandleFactory);
893 
895 BatchMatMul2DTinyTest<armnn::DataType::QSymmS16>(
896  armnn::IWorkloadFactory& workloadFactory,
898  const armnn::ITensorHandleFactory& tensorHandleFactory);
899 
900 template<armnn::DataType ArmnnType, typename T>
902  armnn::IWorkloadFactory& workloadFactory,
904  const armnn::ITensorHandleFactory& tensorHandleFactory)
905 {
906  auto descriptor = armnn::BatchMatMulDescriptor(); // Arbitrary layout with no transpose/adjointing
907 
908  float qScale = 0.0f;
909  int32_t qOffset = 0;
910 
911  switch(ArmnnType)
912  {
916  qScale = 1.0f;
917  break;
918  default:
919  break;
920  }
921 
922  armnn::TensorInfo inputXInfo({2,5,3}, ArmnnType, qScale, qOffset);
923  armnn::TensorInfo inputYInfo({2,3,4}, ArmnnType, qScale, qOffset);
924  armnn::TensorInfo outputInfo({2,5,4}, ArmnnType, qScale, qOffset);
925 
926  std::vector<T> inputX = armnnUtils::QuantizedVector<T>({
927  8, 8, 4,
928  6, 1, 3,
929  8, 8, 3,
930  8, 9, 8,
931  5, 4, 4,
932 
933  1, 8, 5,
934  7, 1, 1,
935  8, 7, 9,
936  3, 2, 7,
937  8, 5, 3
938  }, qScale, qOffset);
939 
940  std::vector<T> inputY = armnnUtils::QuantizedVector<T>({
941  6, 2, 3, 2,
942  6, 2, 2, 8,
943  3, 7, 8, 1,
944 
945  7, 2, 9, 5,
946  2, 3, 1, 3,
947  2, 7, 7, 5
948  }, qScale, qOffset);
949 
950  std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
951  108, 60, 72, 84,
952  51, 35, 44, 23,
953  105, 53, 64, 83,
954  126, 90, 106, 96,
955  66, 46, 55, 46,
956 
957  33, 61, 52, 54,
958  53, 24, 71, 43,
959  88, 100, 142, 106,
960  39, 61, 78, 56,
961  72, 52, 98, 70
962  },qScale, qOffset);
963 
964  return BatchMatMulTestImpl<ArmnnType, T, 3>(workloadFactory,
965  memoryManager,
966  tensorHandleFactory,
967  descriptor,
968  inputX,
969  inputY,
970  outputExpected,
971  inputXInfo,
972  inputYInfo,
973  outputInfo);
974 }
975 
977 BatchMatMul3DNonSquareTest<armnn::DataType::BFloat16>(
978  armnn::IWorkloadFactory& workloadFactory,
980  const armnn::ITensorHandleFactory& tensorHandleFactory);
981 
983 BatchMatMul3DNonSquareTest<armnn::DataType::Float32>(
984  armnn::IWorkloadFactory& workloadFactory,
986  const armnn::ITensorHandleFactory& tensorHandleFactory);
987 
989 BatchMatMul3DNonSquareTest<armnn::DataType::Float16>(
990  armnn::IWorkloadFactory& workloadFactory,
992  const armnn::ITensorHandleFactory& tensorHandleFactory);
993 
995 BatchMatMul3DNonSquareTest<armnn::DataType::QAsymmS8>(
996  armnn::IWorkloadFactory& workloadFactory,
998  const armnn::ITensorHandleFactory& tensorHandleFactory);
999 
1001 BatchMatMul3DNonSquareTest<armnn::DataType::QAsymmU8>(
1002  armnn::IWorkloadFactory& workloadFactory,
1004  const armnn::ITensorHandleFactory& tensorHandleFactory);
1005 
1007 BatchMatMul3DNonSquareTest<armnn::DataType::QSymmS16>(
1008  armnn::IWorkloadFactory& workloadFactory,
1010  const armnn::ITensorHandleFactory& tensorHandleFactory);
LayerTestResult< T, 2 > BatchMatMul2DTinyTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
const TensorShape & GetShape() const
Definition: Tensor.hpp:191
LayerTestResult< T, 4 > BatchMatMulNHWCSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 4 > BatchMatMulNCHWSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 2 > BatchMatMul2DSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 3 > BatchMatMul3DNonSquareTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 3 > BatchMatMul3DBatchTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 5 > BatchMatMulNDHWCNHWCTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< T, 3 > BatchMatMul3DBroadcastTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< T, 3 > BatchMatMul3D2DBroadcastTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataFromITensorHandle(void *mem, const armnn::ITensorHandle *tensorHandle)
A BatchMatMulDescriptor for the BatchMatMul operator.
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
Contains information about TensorInfos of a layer.
LayerTestResult< T, 3 > BatchMatMul3DSimpleTest(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< T, NumDims > BatchMatMulTestImpl(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, armnn::BatchMatMulDescriptor descriptor, const std::vector< T > &inputX, const std::vector< T > &inputY, const std::vector< T > &outputExpected, const armnn::TensorInfo &inputXInfo, const armnn::TensorInfo &inputYInfo, const armnn::TensorInfo &outputInfo)
unsigned int GetNumElements() const
Definition: Tensor.hpp:196