@@ -557,94 +557,92 @@ struct get_device_info_impl<range<Dimensions>,
557
557
}
558
558
};
559
559
560
- // This macro is only for AMD and NVIDIA GPU architectures
561
- #define NVIDIA_AMD_ARCHES (X ) \
562
- X (" 5.0" , oneapi_exp_arch::nvidia_gpu_sm_50) \
563
- X (" 5.2" , oneapi_exp_arch::nvidia_gpu_sm_52) \
564
- X (" 5.3" , oneapi_exp_arch::nvidia_gpu_sm_53) \
565
- X (" 6.0" , oneapi_exp_arch::nvidia_gpu_sm_60) \
566
- X (" 6.1" , oneapi_exp_arch::nvidia_gpu_sm_61) \
567
- X (" 6.2" , oneapi_exp_arch::nvidia_gpu_sm_62) \
568
- X (" 7.0" , oneapi_exp_arch::nvidia_gpu_sm_70) \
569
- X (" 7.2" , oneapi_exp_arch::nvidia_gpu_sm_72) \
570
- X (" 7.5" , oneapi_exp_arch::nvidia_gpu_sm_75) \
571
- X (" 8.0" , oneapi_exp_arch::nvidia_gpu_sm_80) \
572
- X (" 8.6" , oneapi_exp_arch::nvidia_gpu_sm_86) \
573
- X (" 8.7" , oneapi_exp_arch::nvidia_gpu_sm_87) \
574
- X (" 8.9" , oneapi_exp_arch::nvidia_gpu_sm_89) \
575
- X (" 9.0" , oneapi_exp_arch::nvidia_gpu_sm_90) \
576
- X (" gfx701" , oneapi_exp_arch::amd_gpu_gfx701) \
577
- X (" gfx702" , oneapi_exp_arch::amd_gpu_gfx702) \
578
- X (" gfx801" , oneapi_exp_arch::amd_gpu_gfx801) \
579
- X (" gfx802" , oneapi_exp_arch::amd_gpu_gfx802) \
580
- X (" gfx803" , oneapi_exp_arch::amd_gpu_gfx803) \
581
- X (" gfx805" , oneapi_exp_arch::amd_gpu_gfx805) \
582
- X (" gfx810" , oneapi_exp_arch::amd_gpu_gfx810) \
583
- X (" gfx900" , oneapi_exp_arch::amd_gpu_gfx900) \
584
- X (" gfx902" , oneapi_exp_arch::amd_gpu_gfx902) \
585
- X (" gfx904" , oneapi_exp_arch::amd_gpu_gfx904) \
586
- X (" gfx906" , oneapi_exp_arch::amd_gpu_gfx906) \
587
- X (" gfx908" , oneapi_exp_arch::amd_gpu_gfx908) \
588
- X (" gfx90a" , oneapi_exp_arch::amd_gpu_gfx90a) \
589
- X (" gfx1010" , oneapi_exp_arch::amd_gpu_gfx1010) \
590
- X (" gfx1011" , oneapi_exp_arch::amd_gpu_gfx1011) \
591
- X (" gfx1012" , oneapi_exp_arch::amd_gpu_gfx1012) \
592
- X (" gfx1013" , oneapi_exp_arch::amd_gpu_gfx1013) \
593
- X (" gfx1030" , oneapi_exp_arch::amd_gpu_gfx1030) \
594
- X (" gfx1031" , oneapi_exp_arch::amd_gpu_gfx1031) \
595
- X (" gfx1032" , oneapi_exp_arch::amd_gpu_gfx1032) \
596
- X (" gfx1034" , oneapi_exp_arch::amd_gpu_gfx1034)
597
-
598
- // This macro is only for Intel GPU architectures
599
- #define INTEL_GPU_ARCHES (X ) \
600
- X (0x02000000 , oneapi_exp_arch::intel_gpu_bdw) \
601
- X (0x02400009 , oneapi_exp_arch::intel_gpu_skl) \
602
- X (0x02404009 , oneapi_exp_arch::intel_gpu_kbl) \
603
- X (0x02408009 , oneapi_exp_arch::intel_gpu_cfl) \
604
- X (0x0240c000 , oneapi_exp_arch::intel_gpu_apl) \
605
- X (0x02410000 , oneapi_exp_arch::intel_gpu_glk) \
606
- X (0x02414000 , oneapi_exp_arch::intel_gpu_whl) \
607
- X (0x02418000 , oneapi_exp_arch::intel_gpu_aml) \
608
- X (0x0241c000 , oneapi_exp_arch::intel_gpu_cml) \
609
- X (0x02c00000 , oneapi_exp_arch::intel_gpu_icllp) \
610
- X (0x02c08000 , oneapi_exp_arch::intel_gpu_ehl) \
611
- X (0x03000000 , oneapi_exp_arch::intel_gpu_tgllp) \
612
- X (0x03004000 , oneapi_exp_arch::intel_gpu_rkl) \
613
- X (0x03008000 , oneapi_exp_arch::intel_gpu_adl_s) \
614
- X (0x0300c000 , oneapi_exp_arch::intel_gpu_adl_p) \
615
- X (0x03010000 , oneapi_exp_arch::intel_gpu_adl_n) \
616
- X (0x03028000 , oneapi_exp_arch::intel_gpu_dg1) \
617
- X (0x030dc008 , oneapi_exp_arch::intel_gpu_acm_g10) \
618
- X (0x030e0005 , oneapi_exp_arch::intel_gpu_acm_g11) \
619
- X (0x030e4000 , oneapi_exp_arch::intel_gpu_acm_g12) \
620
- X (0x030f0007 , oneapi_exp_arch::intel_gpu_pvc)
621
-
622
- // This macro is only for Intel CPU architectures
623
- // TODO: extend the macro with other CPU architectures when they will be added
624
- // to ext_oneapi_device_architecture
625
- #define INTEL_CPU_ARCHES (X ) \
626
- X (8 , oneapi_exp_arch::intel_cpu_spr) \
627
- X (9 , oneapi_exp_arch::intel_cpu_gnr)
628
-
629
- #define CMP_NVIDIA_AMD (s, i ) \
630
- if (strcmp(s, arch) == 0 ) \
631
- return i;
632
-
633
- #define CMP_INTEL (p, i ) \
634
- if (p == arch) \
635
- return i;
560
+ using oneapi_exp_arch = sycl::ext::oneapi::experimental::architecture;
561
+
562
+ // Only for NVIDIA and AMD GPU architectures
563
+ constexpr std::pair<const char *, oneapi_exp_arch> NvidiaAmdGPUArchitectures[] =
564
+ {
565
+ {" 5.0" , oneapi_exp_arch::nvidia_gpu_sm_50},
566
+ {" 5.2" , oneapi_exp_arch::nvidia_gpu_sm_52},
567
+ {" 5.3" , oneapi_exp_arch::nvidia_gpu_sm_53},
568
+ {" 6.0" , oneapi_exp_arch::nvidia_gpu_sm_60},
569
+ {" 6.1" , oneapi_exp_arch::nvidia_gpu_sm_61},
570
+ {" 6.2" , oneapi_exp_arch::nvidia_gpu_sm_62},
571
+ {" 7.0" , oneapi_exp_arch::nvidia_gpu_sm_70},
572
+ {" 7.2" , oneapi_exp_arch::nvidia_gpu_sm_72},
573
+ {" 7.5" , oneapi_exp_arch::nvidia_gpu_sm_75},
574
+ {" 8.0" , oneapi_exp_arch::nvidia_gpu_sm_80},
575
+ {" 8.6" , oneapi_exp_arch::nvidia_gpu_sm_86},
576
+ {" 8.7" , oneapi_exp_arch::nvidia_gpu_sm_87},
577
+ {" 8.9" , oneapi_exp_arch::nvidia_gpu_sm_89},
578
+ {" 9.0" , oneapi_exp_arch::nvidia_gpu_sm_90},
579
+ {" gfx701" , oneapi_exp_arch::amd_gpu_gfx701},
580
+ {" gfx702" , oneapi_exp_arch::amd_gpu_gfx702},
581
+ {" gfx801" , oneapi_exp_arch::amd_gpu_gfx801},
582
+ {" gfx802" , oneapi_exp_arch::amd_gpu_gfx802},
583
+ {" gfx803" , oneapi_exp_arch::amd_gpu_gfx803},
584
+ {" gfx805" , oneapi_exp_arch::amd_gpu_gfx805},
585
+ {" gfx810" , oneapi_exp_arch::amd_gpu_gfx810},
586
+ {" gfx900" , oneapi_exp_arch::amd_gpu_gfx900},
587
+ {" gfx902" , oneapi_exp_arch::amd_gpu_gfx902},
588
+ {" gfx904" , oneapi_exp_arch::amd_gpu_gfx904},
589
+ {" gfx906" , oneapi_exp_arch::amd_gpu_gfx906},
590
+ {" gfx908" , oneapi_exp_arch::amd_gpu_gfx908},
591
+ {" gfx90a" , oneapi_exp_arch::amd_gpu_gfx90a},
592
+ {" gfx1010" , oneapi_exp_arch::amd_gpu_gfx1010},
593
+ {" gfx1011" , oneapi_exp_arch::amd_gpu_gfx1011},
594
+ {" gfx1012" , oneapi_exp_arch::amd_gpu_gfx1012},
595
+ {" gfx1013" , oneapi_exp_arch::amd_gpu_gfx1013},
596
+ {" gfx1030" , oneapi_exp_arch::amd_gpu_gfx1030},
597
+ {" gfx1031" , oneapi_exp_arch::amd_gpu_gfx1031},
598
+ {" gfx1032" , oneapi_exp_arch::amd_gpu_gfx1032},
599
+ {" gfx1034" , oneapi_exp_arch::amd_gpu_gfx1034},
600
+ };
601
+
602
+ // Only for Intel GPU architectures
603
+ constexpr std::pair<const int , oneapi_exp_arch> IntelGPUArchitectures[] = {
604
+ {0x02000000 , oneapi_exp_arch::intel_gpu_bdw},
605
+ {0x02400009 , oneapi_exp_arch::intel_gpu_skl},
606
+ {0x02404009 , oneapi_exp_arch::intel_gpu_kbl},
607
+ {0x02408009 , oneapi_exp_arch::intel_gpu_cfl},
608
+ {0x0240c000 , oneapi_exp_arch::intel_gpu_apl},
609
+ {0x02410000 , oneapi_exp_arch::intel_gpu_glk},
610
+ {0x02414000 , oneapi_exp_arch::intel_gpu_whl},
611
+ {0x02418000 , oneapi_exp_arch::intel_gpu_aml},
612
+ {0x0241c000 , oneapi_exp_arch::intel_gpu_cml},
613
+ {0x02c00000 , oneapi_exp_arch::intel_gpu_icllp},
614
+ {0x02c08000 , oneapi_exp_arch::intel_gpu_ehl},
615
+ {0x03000000 , oneapi_exp_arch::intel_gpu_tgllp},
616
+ {0x03004000 , oneapi_exp_arch::intel_gpu_rkl},
617
+ {0x03008000 , oneapi_exp_arch::intel_gpu_adl_s},
618
+ {0x0300c000 , oneapi_exp_arch::intel_gpu_adl_p},
619
+ {0x03010000 , oneapi_exp_arch::intel_gpu_adl_n},
620
+ {0x03028000 , oneapi_exp_arch::intel_gpu_dg1},
621
+ {0x030dc008 , oneapi_exp_arch::intel_gpu_acm_g10},
622
+ {0x030e0005 , oneapi_exp_arch::intel_gpu_acm_g11},
623
+ {0x030e4000 , oneapi_exp_arch::intel_gpu_acm_g12},
624
+ {0x030f0007 , oneapi_exp_arch::intel_gpu_pvc},
625
+ };
626
+
627
+ // Only for Intel CPU architectures
628
+ constexpr std::pair<const int , oneapi_exp_arch> IntelCPUArchitectures[] = {
629
+ {8 , oneapi_exp_arch::intel_cpu_spr},
630
+ {9 , oneapi_exp_arch::intel_cpu_gnr},
631
+ };
636
632
637
633
template <>
638
634
struct get_device_info_impl <
639
635
ext::oneapi::experimental::architecture,
640
636
ext::oneapi::experimental::info::device::architecture> {
641
637
static ext::oneapi::experimental::architecture get (const DeviceImplPtr &Dev) {
642
- using oneapi_exp_arch = sycl::ext::oneapi::experimental::architecture;
643
638
backend CurrentBackend = Dev->getBackend ();
644
639
if (Dev->is_gpu () && (backend::ext_oneapi_level_zero == CurrentBackend ||
645
640
backend::opencl == CurrentBackend)) {
646
641
auto MapArchIDToArchName = [](const int arch) {
647
- INTEL_GPU_ARCHES (CMP_INTEL);
642
+ for (const auto &Item : IntelGPUArchitectures) {
643
+ if (Item.first == arch)
644
+ return Item.second ;
645
+ }
648
646
throw sycl::exception (
649
647
make_error_code (errc::runtime),
650
648
" The current device architecture is not supported by "
@@ -660,7 +658,10 @@ struct get_device_info_impl<
660
658
} else if (Dev->is_gpu () && (backend::ext_oneapi_cuda == CurrentBackend ||
661
659
backend::ext_oneapi_hip == CurrentBackend)) {
662
660
auto MapArchIDToArchName = [](const char *arch) {
663
- NVIDIA_AMD_ARCHES (CMP_NVIDIA_AMD);
661
+ for (const auto &Item : NvidiaAmdGPUArchitectures) {
662
+ if (std::string_view (Item.first ) == arch)
663
+ return Item.second ;
664
+ }
664
665
throw sycl::exception (
665
666
make_error_code (errc::runtime),
666
667
" The current device architecture is not supported by "
@@ -680,7 +681,10 @@ struct get_device_info_impl<
680
681
return MapArchIDToArchName (DeviceArchSubstr.data ());
681
682
} else if (Dev->is_cpu () && backend::opencl == CurrentBackend) {
682
683
auto MapArchIDToArchName = [](const int arch) {
683
- INTEL_CPU_ARCHES (CMP_INTEL);
684
+ for (const auto &Item : IntelCPUArchitectures) {
685
+ if (Item.first == arch)
686
+ return Item.second ;
687
+ }
684
688
return sycl::ext::oneapi::experimental::architecture::x86_64;
685
689
};
686
690
uint32_t DeviceIp;
0 commit comments