Skip to content

Commit d14865d

Browse files
Add AMD and NVidia Mapping in SYCL.cpp
1 parent 34002a2 commit d14865d

File tree

4 files changed

+208
-83
lines changed

4 files changed

+208
-83
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,17 +1338,17 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
13381338
Archs.insert(Arch);
13391339
}
13401340
for (StringRef Arch : Archs) {
1341-
if (NVPTXTriple && IsNVIDIAOffloadArch(StringToOffloadArch(
1341+
if (NVPTXTriple && IsSYCLSupportedNVidiaGPUArch(StringToOffloadArchSYCL(
13421342
getProcessorFromTargetID(*NVPTXTriple, Arch)))) {
13431343
DerivedArchs[NVPTXTriple->getTriple()].insert(Arch);
13441344
} else if (AMDTriple &&
1345-
IsAMDOffloadArch(StringToOffloadArch(
1345+
IsSYCLSupportedAMDGPUArch(StringToOffloadArchSYCL(
13461346
getProcessorFromTargetID(*AMDTriple, Arch)))) {
13471347
DerivedArchs[AMDTriple->getTriple()].insert(Arch);
1348-
} else if (IsIntelCPUOffloadArch(StringToOffloadArchIntel(Arch))) {
1348+
} else if (IsSYCLSupportedIntelCPUArch(StringToOffloadArchSYCL(Arch))) {
13491349
DerivedArchs[MakeSYCLDeviceTriple("spir64_x86_64").getTriple()].insert(
13501350
Arch);
1351-
} else if (IsIntelGPUOffloadArch(StringToOffloadArchIntel(Arch))) {
1351+
} else if (IsSYCLSupportedIntelGPUArch(StringToOffloadArchSYCL(Arch))) {
13521352
StringRef IntelGPUArch;
13531353
IntelGPUArch = mapIntelGPUArchName(Arch).data();
13541354
DerivedArchs[MakeSYCLDeviceTriple("spir64_gen").getTriple()].insert(

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 120 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -29,83 +29,138 @@ using namespace llvm::opt;
2929

3030
// Struct that relates an AOT target value with
3131
// Intel CPUs and GPUs.
32-
struct StringToOffloadArchIntelMap {
32+
struct StringToOffloadArchSYCLMap {
3333
const char *ArchName;
34-
OffloadArchIntel IntelArch;
34+
SYCLSupportedOffloadArchs IntelArch;
3535
};
3636

37-
// Mapping of valid --offload-arch values for Intel CPU and GPU
38-
// AOT targets.
39-
static const StringToOffloadArchIntelMap StringToArchNamesMap[] = {
40-
{"skylake-avx512", OffloadArchIntel::SKYLAKEAVX512},
41-
{"core-avx2", OffloadArchIntel::COREAVX2},
42-
{"corei7-avx", OffloadArchIntel::COREI7AVX},
43-
{"corei7", OffloadArchIntel::COREI7},
44-
{"westmere", OffloadArchIntel::WESTMERE},
45-
{"sandybridge", OffloadArchIntel::SANDYBRIDGE},
46-
{"ivybridge", OffloadArchIntel::IVYBRIDGE},
47-
{"broadwell", OffloadArchIntel::BROADWELL},
48-
{"coffeelake", OffloadArchIntel::COFFEELAKE},
49-
{"alderlake", OffloadArchIntel::ALDERLAKE},
50-
{"skylake", OffloadArchIntel::SKYLAKE},
51-
{"skx", OffloadArchIntel::SKX},
52-
{"cascadelake", OffloadArchIntel::CASCADELAKE},
53-
{"icelake-client", OffloadArchIntel::ICELAKECLIENT},
54-
{"icelake-server", OffloadArchIntel::ICELAKESERVER},
55-
{"sapphirerapids", OffloadArchIntel::SAPPHIRERAPIDS},
56-
{"graniterapids", OffloadArchIntel::GRANITERAPIDS},
37+
// Mapping of supported SYCL offloading architectures.
38+
static const StringToOffloadArchSYCLMap StringToArchNamesMap[] = {
39+
// Intel CPU mapping.
40+
{"skylake-avx512", SYCLSupportedOffloadArchs::SKYLAKEAVX512},
41+
{"core-avx2", SYCLSupportedOffloadArchs::COREAVX2},
42+
{"corei7-avx", SYCLSupportedOffloadArchs::COREI7AVX},
43+
{"corei7", SYCLSupportedOffloadArchs::COREI7},
44+
{"westmere", SYCLSupportedOffloadArchs::WESTMERE},
45+
{"sandybridge", SYCLSupportedOffloadArchs::SANDYBRIDGE},
46+
{"ivybridge", SYCLSupportedOffloadArchs::IVYBRIDGE},
47+
{"broadwell", SYCLSupportedOffloadArchs::BROADWELL},
48+
{"coffeelake", SYCLSupportedOffloadArchs::COFFEELAKE},
49+
{"alderlake", SYCLSupportedOffloadArchs::ALDERLAKE},
50+
{"skylake", SYCLSupportedOffloadArchs::SKYLAKE},
51+
{"skx", SYCLSupportedOffloadArchs::SKX},
52+
{"cascadelake", SYCLSupportedOffloadArchs::CASCADELAKE},
53+
{"icelake-client", SYCLSupportedOffloadArchs::ICELAKECLIENT},
54+
{"icelake-server", SYCLSupportedOffloadArchs::ICELAKESERVER},
55+
{"sapphirerapids", SYCLSupportedOffloadArchs::SAPPHIRERAPIDS},
56+
{"graniterapids", SYCLSupportedOffloadArchs::GRANITERAPIDS},
5757
// Intel GPU mapping.
58-
{"bdw", OffloadArchIntel::BDW},
59-
{"skl", OffloadArchIntel::SKL},
60-
{"kbl", OffloadArchIntel::KBL},
61-
{"cfl", OffloadArchIntel::CFL},
62-
{"apl", OffloadArchIntel::APL},
63-
{"bxt", OffloadArchIntel::BXT},
64-
{"glk", OffloadArchIntel::GLK},
65-
{"whl", OffloadArchIntel::WHL},
66-
{"aml", OffloadArchIntel::AML},
67-
{"cml", OffloadArchIntel::CML},
68-
{"icllp", OffloadArchIntel::ICLLP},
69-
{"icl", OffloadArchIntel::ICL},
70-
{"ehl", OffloadArchIntel::EHL},
71-
{"jsl", OffloadArchIntel::JSL},
72-
{"tgllp", OffloadArchIntel::TGLLP},
73-
{"tgl", OffloadArchIntel::TGL},
74-
{"rkl", OffloadArchIntel::RKL},
75-
{"adl_s", OffloadArchIntel::ADL_S},
76-
{"rpl_s", OffloadArchIntel::RPL_S},
77-
{"adl_p", OffloadArchIntel::ADL_P},
78-
{"adl_n", OffloadArchIntel::ADL_N},
79-
{"dg1", OffloadArchIntel::DG1},
80-
{"acm_g10", OffloadArchIntel::ACM_G10},
81-
{"dg2_g10", OffloadArchIntel::DG2_G10},
82-
{"acm_g11", OffloadArchIntel::ACM_G11},
83-
{"dg2_g10", OffloadArchIntel::DG2_G10},
84-
{"dg2_g11", OffloadArchIntel::DG2_G11},
85-
{"acm_g12", OffloadArchIntel::ACM_G12},
86-
{"dg2_g12", OffloadArchIntel::DG2_G12},
87-
{"pvc", OffloadArchIntel::PVC},
88-
{"pvc_vg", OffloadArchIntel::PVC_VG},
89-
{"mtl_u", OffloadArchIntel::MTL_U},
90-
{"mtl_s", OffloadArchIntel::MTL_S},
91-
{"arl_u", OffloadArchIntel::ARL_U},
92-
{"arl_s", OffloadArchIntel::ARL_S},
93-
{"mtl_h", OffloadArchIntel::MTL_H},
94-
{"arl_h", OffloadArchIntel::ARL_H},
95-
{"bmg_g21", OffloadArchIntel::BMG_G21},
96-
{"lnl_m", OffloadArchIntel::LNL_M}};
58+
{"bdw", SYCLSupportedOffloadArchs::BDW},
59+
{"skl", SYCLSupportedOffloadArchs::SKL},
60+
{"kbl", SYCLSupportedOffloadArchs::KBL},
61+
{"cfl", SYCLSupportedOffloadArchs::CFL},
62+
{"apl", SYCLSupportedOffloadArchs::APL},
63+
{"bxt", SYCLSupportedOffloadArchs::BXT},
64+
{"glk", SYCLSupportedOffloadArchs::GLK},
65+
{"whl", SYCLSupportedOffloadArchs::WHL},
66+
{"aml", SYCLSupportedOffloadArchs::AML},
67+
{"cml", SYCLSupportedOffloadArchs::CML},
68+
{"icllp", SYCLSupportedOffloadArchs::ICLLP},
69+
{"icl", SYCLSupportedOffloadArchs::ICL},
70+
{"ehl", SYCLSupportedOffloadArchs::EHL},
71+
{"jsl", SYCLSupportedOffloadArchs::JSL},
72+
{"tgllp", SYCLSupportedOffloadArchs::TGLLP},
73+
{"tgl", SYCLSupportedOffloadArchs::TGL},
74+
{"rkl", SYCLSupportedOffloadArchs::RKL},
75+
{"adl_s", SYCLSupportedOffloadArchs::ADL_S},
76+
{"rpl_s", SYCLSupportedOffloadArchs::RPL_S},
77+
{"adl_p", SYCLSupportedOffloadArchs::ADL_P},
78+
{"adl_n", SYCLSupportedOffloadArchs::ADL_N},
79+
{"dg1", SYCLSupportedOffloadArchs::DG1},
80+
{"acm_g10", SYCLSupportedOffloadArchs::ACM_G10},
81+
{"dg2_g10", SYCLSupportedOffloadArchs::DG2_G10},
82+
{"acm_g11", SYCLSupportedOffloadArchs::ACM_G11},
83+
{"dg2_g10", SYCLSupportedOffloadArchs::DG2_G10},
84+
{"dg2_g11", SYCLSupportedOffloadArchs::DG2_G11},
85+
{"acm_g12", SYCLSupportedOffloadArchs::ACM_G12},
86+
{"dg2_g12", SYCLSupportedOffloadArchs::DG2_G12},
87+
{"pvc", SYCLSupportedOffloadArchs::PVC},
88+
{"pvc_vg", SYCLSupportedOffloadArchs::PVC_VG},
89+
{"mtl_u", SYCLSupportedOffloadArchs::MTL_U},
90+
{"mtl_s", SYCLSupportedOffloadArchs::MTL_S},
91+
{"arl_u", SYCLSupportedOffloadArchs::ARL_U},
92+
{"arl_s", SYCLSupportedOffloadArchs::ARL_S},
93+
{"mtl_h", SYCLSupportedOffloadArchs::MTL_H},
94+
{"arl_h", SYCLSupportedOffloadArchs::ARL_H},
95+
{"bmg_g21", SYCLSupportedOffloadArchs::BMG_G21},
96+
{"lnl_m", SYCLSupportedOffloadArchs::LNL_M},
97+
// AMD GPU Mapping
98+
{"gfx700", SYCLSupportedOffloadArchs::GFX700},
99+
{"gfx701", SYCLSupportedOffloadArchs::GFX701},
100+
{"gfx702", SYCLSupportedOffloadArchs::GFX702},
101+
{"gfx801", SYCLSupportedOffloadArchs::GFX801},
102+
{"gfx802", SYCLSupportedOffloadArchs::GFX802},
103+
{"gfx803", SYCLSupportedOffloadArchs::GFX803},
104+
{"gfx805", SYCLSupportedOffloadArchs::GFX805},
105+
{"gfx810", SYCLSupportedOffloadArchs::GFX810},
106+
{"gfx900", SYCLSupportedOffloadArchs::GFX900},
107+
{"gfx902", SYCLSupportedOffloadArchs::GFX902},
108+
{"gfx904", SYCLSupportedOffloadArchs::GFX904},
109+
{"gfx906", SYCLSupportedOffloadArchs::GFX906},
110+
{"gfx908", SYCLSupportedOffloadArchs::GFX908},
111+
{"gfx909", SYCLSupportedOffloadArchs::GFX909},
112+
{"gfx90a", SYCLSupportedOffloadArchs::GFX90A},
113+
{"gfx90c", SYCLSupportedOffloadArchs::GFX90C},
114+
{"gfx940", SYCLSupportedOffloadArchs::GFX940},
115+
{"gfx941", SYCLSupportedOffloadArchs::GFX941},
116+
{"gfx942", SYCLSupportedOffloadArchs::GFX942},
117+
{"gfx1010", SYCLSupportedOffloadArchs::GFX1010},
118+
{"gfx1011", SYCLSupportedOffloadArchs::GFX1011},
119+
{"gfx1012", SYCLSupportedOffloadArchs::GFX1012},
120+
{"gfx1013", SYCLSupportedOffloadArchs::GFX1013},
121+
{"gfx1030", SYCLSupportedOffloadArchs::GFX1030},
122+
{"gfx1031", SYCLSupportedOffloadArchs::GFX1031},
123+
{"gfx1032", SYCLSupportedOffloadArchs::GFX1032},
124+
{"gfx1033", SYCLSupportedOffloadArchs::GFX1033},
125+
{"gfx1034", SYCLSupportedOffloadArchs::GFX1034},
126+
{"gfx1035", SYCLSupportedOffloadArchs::GFX1035},
127+
{"gfx1036", SYCLSupportedOffloadArchs::GFX1036},
128+
{"gfx1100", SYCLSupportedOffloadArchs::GFX1100},
129+
{"gfx1101", SYCLSupportedOffloadArchs::GFX1101},
130+
{"gfx1102", SYCLSupportedOffloadArchs::GFX1102},
131+
{"gfx1103", SYCLSupportedOffloadArchs::GFX1103},
132+
{"gfx1150", SYCLSupportedOffloadArchs::GFX1150},
133+
{"gfx1151", SYCLSupportedOffloadArchs::GFX1151},
134+
{"gfx1200", SYCLSupportedOffloadArchs::GFX1200},
135+
{"gfx1201", SYCLSupportedOffloadArchs::GFX1201},
136+
// NVidia GPU Mapping.
137+
{"sm_50", SYCLSupportedOffloadArchs::SM_50},
138+
{"sm_52", SYCLSupportedOffloadArchs::SM_52},
139+
{"sm_53", SYCLSupportedOffloadArchs::SM_53},
140+
{"sm_60", SYCLSupportedOffloadArchs::SM_60},
141+
{"sm_61", SYCLSupportedOffloadArchs::SM_61},
142+
{"sm_62", SYCLSupportedOffloadArchs::SM_62},
143+
{"sm_70", SYCLSupportedOffloadArchs::SM_70},
144+
{"sm_72", SYCLSupportedOffloadArchs::SM_72},
145+
{"sm_75", SYCLSupportedOffloadArchs::SM_75},
146+
{"sm_80", SYCLSupportedOffloadArchs::SM_80},
147+
{"sm_86", SYCLSupportedOffloadArchs::SM_86},
148+
{"sm_87", SYCLSupportedOffloadArchs::SM_87},
149+
{"sm_89", SYCLSupportedOffloadArchs::SM_89},
150+
{"sm_90", SYCLSupportedOffloadArchs::SM_90},
151+
{"sm_90a", SYCLSupportedOffloadArchs::SM_90A}};
97152

98153
// Check if the user provided value for --offload-arch is a valid
99154
// Intel CPU or Intel GPU target.
100-
OffloadArchIntel
101-
clang::driver::StringToOffloadArchIntel(llvm::StringRef ArchNameAsString) {
155+
SYCLSupportedOffloadArchs
156+
clang::driver::StringToOffloadArchSYCL(llvm::StringRef ArchNameAsString) {
102157
auto result = std::find_if(
103158
std::begin(StringToArchNamesMap), std::end(StringToArchNamesMap),
104-
[ArchNameAsString](const StringToOffloadArchIntelMap &map) {
159+
[ArchNameAsString](const StringToOffloadArchSYCLMap &map) {
105160
return ArchNameAsString == map.ArchName;
106161
});
107162
if (result == std::end(StringToArchNamesMap))
108-
return OffloadArchIntel::UNKNOWN;
163+
return SYCLSupportedOffloadArchs::UNKNOWN;
109164
return result->IntelArch;
110165
}
111166

clang/lib/Driver/ToolChains/SYCL.h

Lines changed: 84 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
namespace clang {
1717
namespace driver {
1818

19-
// List of supported Intel values for CPUs
20-
// and GPUs.
21-
enum class OffloadArchIntel {
22-
// CPUs
19+
// List of architectures (Intel CPU, Intel GPU, AMD GPU, NVidia GPU)
20+
// that support SYCL offloading.
21+
enum class SYCLSupportedOffloadArchs {
22+
// Intel CPUs
2323
UNKNOWN,
2424
SKYLAKEAVX512,
2525
COREAVX2,
@@ -38,7 +38,7 @@ enum class OffloadArchIntel {
3838
ICELAKESERVER,
3939
SAPPHIRERAPIDS,
4040
GRANITERAPIDS,
41-
// GPUs
41+
// Intel GPUs
4242
BDW,
4343
SKL,
4444
KBL,
@@ -76,23 +76,93 @@ enum class OffloadArchIntel {
7676
MTL_H,
7777
ARL_H,
7878
BMG_G21,
79-
LNL_M
79+
LNL_M,
80+
// AMD GPUs
81+
GFX700,
82+
GFX701,
83+
GFX702,
84+
GFX801,
85+
GFX802,
86+
GFX803,
87+
GFX805,
88+
GFX810,
89+
GFX900,
90+
GFX902,
91+
GFX904,
92+
GFX906,
93+
GFX908,
94+
GFX909,
95+
GFX90A,
96+
GFX90C,
97+
GFX940,
98+
GFX941,
99+
GFX942,
100+
GFX1010,
101+
GFX1011,
102+
GFX1012,
103+
GFX1013,
104+
GFX1030,
105+
GFX1031,
106+
GFX1032,
107+
GFX1033,
108+
GFX1034,
109+
GFX1035,
110+
GFX1036,
111+
GFX1100,
112+
GFX1101,
113+
GFX1102,
114+
GFX1103,
115+
GFX1150,
116+
GFX1151,
117+
GFX1200,
118+
GFX1201,
119+
// NVidia GPUs.
120+
SM_50,
121+
SM_52,
122+
SM_53,
123+
SM_60,
124+
SM_61,
125+
SM_62,
126+
SM_70,
127+
SM_72,
128+
SM_75,
129+
SM_80,
130+
SM_86,
131+
SM_87,
132+
SM_89,
133+
SM_90,
134+
SM_90A
80135
};
81136

137+
// Check if the given Arch value is a valid SYCL supported AMD GPU.
138+
static inline bool IsSYCLSupportedAMDGPUArch(SYCLSupportedOffloadArchs Arch) {
139+
return Arch >= SYCLSupportedOffloadArchs::GFX700 &&
140+
Arch <= SYCLSupportedOffloadArchs::GFX1201;
141+
}
142+
143+
// Check if the given Arch value is a valid SYCL supported NVidia GPU.
144+
static inline bool
145+
IsSYCLSupportedNVidiaGPUArch(SYCLSupportedOffloadArchs Arch) {
146+
return Arch >= SYCLSupportedOffloadArchs::SM_50 &&
147+
Arch <= SYCLSupportedOffloadArchs::SM_90A;
148+
}
149+
82150
// Check if the given Arch value is a valid Intel CPU.
83-
static inline bool IsIntelCPUOffloadArch(OffloadArchIntel Arch) {
84-
return Arch >= OffloadArchIntel::SKYLAKEAVX512 &&
85-
Arch < OffloadArchIntel::BDW;
151+
static inline bool IsSYCLSupportedIntelCPUArch(SYCLSupportedOffloadArchs Arch) {
152+
return Arch >= SYCLSupportedOffloadArchs::SKYLAKEAVX512 &&
153+
Arch < SYCLSupportedOffloadArchs::BDW;
86154
}
87155

88156
// Check if the given Arch value is a valid Intel GPU.
89-
static inline bool IsIntelGPUOffloadArch(OffloadArchIntel Arch) {
90-
return Arch >= OffloadArchIntel::BDW && Arch <= OffloadArchIntel::LNL_M;
157+
static inline bool IsSYCLSupportedIntelGPUArch(SYCLSupportedOffloadArchs Arch) {
158+
return Arch >= SYCLSupportedOffloadArchs::BDW &&
159+
Arch <= SYCLSupportedOffloadArchs::LNL_M;
91160
}
92161

93-
// Mapping of valid --offload-arch values for Intel CPU and GPU
94-
// AOT targets.
95-
OffloadArchIntel StringToOffloadArchIntel(llvm::StringRef ArchNameAsString);
162+
// Check if the user provided value for --offload-arch is a valid
163+
// Intel CPU or Intel GPU target.
164+
SYCLSupportedOffloadArchs
165+
StringToOffloadArchSYCL(llvm::StringRef ArchNameAsString);
96166

97167
// This is a mapping between the user provided --offload-arch value for Intel
98168
// GPU targets and the spir64_gen device name accepted by OCLOC (the Intel GPU

0 commit comments

Comments
 (0)