6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
8
9
- #include " ../../esimd_test_utils .hpp"
9
+ #include " common .hpp"
10
10
11
11
#include < iostream>
12
12
#include < sycl/ext/intel/esimd.hpp>
@@ -553,38 +553,44 @@ auto run_test(queue q) {
553
553
}
554
554
555
555
template <int N, template <class , int > class Op , bool UseMask,
556
- bool UsePVCFeatures, bool UseAcc, int SignMask = (Signed | Unsigned)>
556
+ TestFeatures Features, bool UseAcc,
557
+ int SignMask = (Signed | Unsigned)>
557
558
bool test_int_types (queue q) {
558
559
bool passed = true ;
559
560
if constexpr (SignMask & Signed) {
560
- if constexpr (UsePVCFeatures)
561
+ if constexpr (Features == TestFeatures::DG2 ||
562
+ Features == TestFeatures::PVC)
561
563
passed &= run_test<UseAcc, int16_t , N, Op, UseMask>(q);
562
564
563
565
passed &= run_test<UseAcc, int32_t , N, Op, UseMask>(q);
564
566
565
- if constexpr (UsePVCFeatures) {
567
+ // int64_t not supported on DG2
568
+ if constexpr (Features == TestFeatures::PVC) {
566
569
passed &= run_test<UseAcc, int64_t , N, Op, UseMask>(q);
567
570
}
568
571
}
569
572
570
573
if constexpr (SignMask & Unsigned) {
571
- if constexpr (UsePVCFeatures)
574
+ if constexpr (Features == TestFeatures::DG2 ||
575
+ Features == TestFeatures::PVC)
572
576
passed &= run_test<UseAcc, uint16_t , N, Op, UseMask>(q);
573
577
574
578
passed &= run_test<UseAcc, uint32_t , N, Op, UseMask>(q);
575
579
576
- if constexpr (UsePVCFeatures) {
580
+ // uint64_t not supported on DG2
581
+ if constexpr (Features == TestFeatures::PVC) {
577
582
passed &= run_test<UseAcc, uint64_t , N, Op, UseMask>(q);
578
583
}
579
584
}
580
585
return passed;
581
586
}
582
587
583
588
template <int N, template <class , int > class Op , bool UseMask,
584
- bool UsePVCFeatures , bool UseAcc>
589
+ TestFeatures Features , bool UseAcc>
585
590
bool test_fp_types (queue q) {
586
591
bool passed = true ;
587
- if constexpr (UsePVCFeatures) {
592
+ if constexpr (Features == TestFeatures::DG2 ||
593
+ Features == TestFeatures::PVC) {
588
594
if constexpr (std::is_same_v<Op<sycl::half, N>,
589
595
ImplLSCFmax<sycl::half, N>> ||
590
596
std::is_same_v<Op<sycl::half, N>,
@@ -600,7 +606,8 @@ bool test_fp_types(queue q) {
600
606
601
607
passed &= run_test<UseAcc, float , N, Op, UseMask>(q);
602
608
603
- if constexpr (UsePVCFeatures) {
609
+ if constexpr (Features == TestFeatures::DG2 ||
610
+ Features == TestFeatures::PVC) {
604
611
// TODO: fmin/max for double does not pass validation likely due to
605
612
// a driver bug. fcmpwr is hanging.
606
613
if constexpr (!std::is_same_v<Op<double , N>, ImplLSCFmax<double , N>> &&
@@ -615,142 +622,133 @@ bool test_fp_types(queue q) {
615
622
return passed;
616
623
}
617
624
618
- template <template <class , int > class Op , bool UseMask, bool UsePVCFeatures ,
625
+ template <template <class , int > class Op , bool UseMask, TestFeatures Features ,
619
626
bool UseAcc, int SignMask = (Signed | Unsigned)>
620
627
bool test_int_types_and_sizes (queue q) {
621
628
bool passed = true ;
622
- passed &= test_int_types<1 , Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
623
- passed &= test_int_types<2 , Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
624
- passed &= test_int_types<4 , Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
625
- passed &= test_int_types<8 , Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
629
+ passed &= test_int_types<1 , Op, UseMask, Features , UseAcc, SignMask>(q);
630
+ passed &= test_int_types<2 , Op, UseMask, Features , UseAcc, SignMask>(q);
631
+ passed &= test_int_types<4 , Op, UseMask, Features , UseAcc, SignMask>(q);
632
+ passed &= test_int_types<8 , Op, UseMask, Features , UseAcc, SignMask>(q);
626
633
// TODO: N=16 and N=32 does not pass on Gen12 with mask due to older driver.
627
- if (UseMask && !UsePVCFeatures &&
634
+ if (UseMask && Features == TestFeatures::Generic &&
628
635
esimd_test::isGPUDriverGE (q, esimd_test::GPUDriverOS::LinuxAndWindows,
629
636
" 26918" , " 101.4953" , false )) {
630
- passed &=
631
- test_int_types<16 , Op, UseMask, UsePVCFeatures, UseAcc, SignMask>(q);
632
- passed &=
633
- test_int_types<32 , Op, UseMask, UsePVCFeatures, UseAcc, SignMask>(q);
637
+ passed &= test_int_types<16 , Op, UseMask, Features, UseAcc, SignMask>(q);
638
+ passed &= test_int_types<32 , Op, UseMask, Features, UseAcc, SignMask>(q);
634
639
}
635
640
636
641
// Supported by LSC atomic:
637
- if constexpr (UsePVCFeatures) {
638
- passed &=
639
- test_int_types<64 , Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
642
+ if constexpr (Features == TestFeatures::DG2 ||
643
+ Features == TestFeatures::PVC) {
644
+ passed &= test_int_types<64 , Op, UseMask, Features , UseAcc, SignMask>(q);
640
645
// non power of two values are supported only in newer driver.
641
646
// TODO: Enable this when the new driver reaches test infrastructure
642
647
// (v27556).
643
648
#if 0
644
- passed &= test_int_types<12, Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
645
- passed &= test_int_types<33, Op, UseMask, UsePVCFeatures , UseAcc, SignMask>(q);
649
+ passed &= test_int_types<12, Op, UseMask, Features , UseAcc, SignMask>(q);
650
+ passed &= test_int_types<33, Op, UseMask, Features , UseAcc, SignMask>(q);
646
651
#endif
647
652
}
648
653
649
654
return passed;
650
655
}
651
656
652
- template <template <class , int > class Op , bool UseMask, bool UsePVCFeatures ,
657
+ template <template <class , int > class Op , bool UseMask, TestFeatures Features ,
653
658
bool UseAcc>
654
659
bool test_fp_types_and_sizes (queue q) {
655
660
bool passed = true ;
656
- passed &= test_fp_types<1 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
657
- passed &= test_fp_types<2 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
658
- passed &= test_fp_types<4 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
659
- passed &= test_fp_types<8 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
660
- passed &= test_fp_types<16 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
661
- passed &= test_fp_types<32 , Op, UseMask, UsePVCFeatures , UseAcc>(q);
661
+ passed &= test_fp_types<1 , Op, UseMask, Features , UseAcc>(q);
662
+ passed &= test_fp_types<2 , Op, UseMask, Features , UseAcc>(q);
663
+ passed &= test_fp_types<4 , Op, UseMask, Features , UseAcc>(q);
664
+ passed &= test_fp_types<8 , Op, UseMask, Features , UseAcc>(q);
665
+ passed &= test_fp_types<16 , Op, UseMask, Features , UseAcc>(q);
666
+ passed &= test_fp_types<32 , Op, UseMask, Features , UseAcc>(q);
662
667
663
668
// Supported by LSC atomic:
664
- if constexpr (UsePVCFeatures) {
665
- passed &= test_fp_types<64 , Op, UseMask, UsePVCFeatures, UseAcc>(q);
669
+ if constexpr (Features == TestFeatures::DG2 ||
670
+ Features == TestFeatures::PVC) {
671
+ passed &= test_fp_types<64 , Op, UseMask, Features, UseAcc>(q);
666
672
// non power of two values are supported only in newer driver.
667
673
// TODO: Enable this when the new driver reaches test infrastructure
668
674
// (v27556).
669
675
#if 0
670
- passed &= test_fp_types<33, Op, UseMask, UsePVCFeatures , UseAcc>(q);
671
- passed &= test_fp_types<65, Op, UseMask, UsePVCFeatures , UseAcc>(q);
676
+ passed &= test_fp_types<33, Op, UseMask, Features , UseAcc>(q);
677
+ passed &= test_fp_types<65, Op, UseMask, Features , UseAcc>(q);
672
678
#endif
673
679
}
674
680
return passed;
675
681
}
676
682
677
- template <bool UseMask, bool UsePVCFeatures , bool UseAcc>
683
+ template <bool UseMask, TestFeatures Features , bool UseAcc>
678
684
int test_with_mask (queue q) {
679
685
bool passed = true ;
680
686
#ifndef CMPXCHG_TEST
687
+ passed &= test_int_types_and_sizes<ImplInc, UseMask, Features, UseAcc>(q);
688
+ passed &= test_int_types_and_sizes<ImplDec, UseMask, Features, UseAcc>(q);
689
+
690
+ passed &= test_int_types_and_sizes<ImplIntAdd, UseMask, Features, UseAcc>(q);
691
+ passed &= test_int_types_and_sizes<ImplIntSub, UseMask, Features, UseAcc>(q);
692
+
681
693
passed &=
682
- test_int_types_and_sizes<ImplInc , UseMask, UsePVCFeatures , UseAcc>(q);
694
+ test_int_types_and_sizes<ImplSMax , UseMask, Features , UseAcc, Signed >(q);
683
695
passed &=
684
- test_int_types_and_sizes<ImplDec , UseMask, UsePVCFeatures , UseAcc>(q);
696
+ test_int_types_and_sizes<ImplSMin , UseMask, Features , UseAcc, Signed >(q);
685
697
686
698
passed &=
687
- test_int_types_and_sizes<ImplIntAdd, UseMask, UsePVCFeatures, UseAcc>(q);
699
+ test_int_types_and_sizes<ImplUMax, UseMask, Features, UseAcc, Unsigned>(
700
+ q);
688
701
passed &=
689
- test_int_types_and_sizes<ImplIntSub, UseMask, UsePVCFeatures, UseAcc>(q);
690
-
691
- passed &= test_int_types_and_sizes<ImplSMax, UseMask, UsePVCFeatures, UseAcc,
692
- Signed>(q);
693
- passed &= test_int_types_and_sizes<ImplSMin, UseMask, UsePVCFeatures, UseAcc,
694
- Signed>(q);
695
-
696
- passed &= test_int_types_and_sizes<ImplUMax, UseMask, UsePVCFeatures, UseAcc,
697
- Unsigned>(q);
698
- passed &= test_int_types_and_sizes<ImplUMin, UseMask, UsePVCFeatures, UseAcc,
699
- Unsigned>(q);
702
+ test_int_types_and_sizes<ImplUMin, UseMask, Features, UseAcc, Unsigned>(
703
+ q);
700
704
701
- if constexpr (UsePVCFeatures) {
705
+ if constexpr (Features == TestFeatures::DG2 ||
706
+ Features == TestFeatures::PVC) {
702
707
passed &=
703
- test_fp_types_and_sizes<ImplLSCFmax, UseMask, UsePVCFeatures, UseAcc>(
704
- q);
708
+ test_fp_types_and_sizes<ImplLSCFmax, UseMask, Features, UseAcc>(q);
705
709
passed &=
706
- test_fp_types_and_sizes<ImplLSCFmin, UseMask, UsePVCFeatures, UseAcc>(
707
- q);
710
+ test_fp_types_and_sizes<ImplLSCFmin, UseMask, Features, UseAcc>(q);
708
711
709
712
// TODO: fadd/fsub are emulated in the newer driver, but do not pass
710
713
// validation.
711
714
#if 0
712
- passed &= test_fp_types_and_sizes<ImplFadd, UseMask, UsePVCFeatures , UseAcc>(q);
713
- passed &= test_fp_types_and_sizes<ImplFsub, UseMask, UsePVCFeatures , UseAcc>(q);
715
+ passed &= test_fp_types_and_sizes<ImplFadd, UseMask, Features , UseAcc>(q);
716
+ passed &= test_fp_types_and_sizes<ImplFsub, UseMask, Features , UseAcc>(q);
714
717
#endif
715
718
716
719
// Check load/store operations.
717
- passed &=
718
- test_int_types_and_sizes<ImplLoad, UseMask, UsePVCFeatures, UseAcc>(q);
719
- passed &=
720
- test_int_types_and_sizes<ImplStore, UseMask, UsePVCFeatures, UseAcc>(q);
721
- passed &=
722
- test_fp_types_and_sizes<ImplStore, UseMask, UsePVCFeatures, UseAcc>(q);
720
+ passed &= test_int_types_and_sizes<ImplLoad, UseMask, Features, UseAcc>(q);
721
+ passed &= test_int_types_and_sizes<ImplStore, UseMask, Features, UseAcc>(q);
722
+ passed &= test_fp_types_and_sizes<ImplStore, UseMask, Features, UseAcc>(q);
723
723
}
724
724
#else
725
+ passed &= test_int_types_and_sizes<ImplCmpxchg, UseMask, Features, UseAcc>(q);
725
726
passed &=
726
- test_int_types_and_sizes<ImplCmpxchg, UseMask, UsePVCFeatures, UseAcc>(q);
727
- passed &=
728
- test_fp_types_and_sizes<ImplLSCFcmpwr, UseMask, UsePVCFeatures, UseAcc>(
729
- q);
727
+ test_fp_types_and_sizes<ImplLSCFcmpwr, UseMask, Features, UseAcc>(q);
730
728
#endif
731
729
return passed;
732
730
}
733
731
734
- template <bool UsePVCFeatures > bool test_main (queue q) {
732
+ template <TestFeatures Features > bool test_main (queue q) {
735
733
bool passed = true ;
736
734
737
735
constexpr const bool UseMask = true ;
738
736
constexpr const bool UseAcc = true ;
739
737
740
- passed &= test_with_mask<UseMask, UsePVCFeatures , !UseAcc>(q);
741
- passed &= test_with_mask<!UseMask, UsePVCFeatures , !UseAcc>(q);
738
+ passed &= test_with_mask<UseMask, Features , !UseAcc>(q);
739
+ passed &= test_with_mask<!UseMask, Features , !UseAcc>(q);
742
740
743
741
return passed;
744
742
}
745
743
746
- template <bool UsePVCFeatures > bool test_main_acc (queue q) {
744
+ template <TestFeatures Features > bool test_main_acc (queue q) {
747
745
bool passed = true ;
748
746
749
747
constexpr const bool UseMask = true ;
750
748
constexpr const bool UseAcc = true ;
751
749
752
- passed &= test_with_mask<UseMask, UsePVCFeatures , UseAcc>(q);
753
- passed &= test_with_mask<!UseMask, UsePVCFeatures , UseAcc>(q);
750
+ passed &= test_with_mask<UseMask, Features , UseAcc>(q);
751
+ passed &= test_with_mask<!UseMask, Features , UseAcc>(q);
754
752
755
753
return passed;
756
754
}
0 commit comments