clang 23.0.0git
Cuda.cpp
Go to the documentation of this file.
1#include "clang/Basic/Cuda.h"
2
3#include "llvm/ADT/Twine.h"
4#include "llvm/Support/ErrorHandling.h"
5#include "llvm/Support/VersionTuple.h"
6
7namespace clang {
8
10 const char *Name;
12 llvm::VersionTuple TVersion;
13};
14#define CUDA_ENTRY(major, minor) \
15 { \
16 #major "." #minor, CudaVersion::CUDA_##major##minor, \
17 llvm::VersionTuple(major, minor) \
18 }
19
21 CUDA_ENTRY(7, 0),
22 CUDA_ENTRY(7, 5),
23 CUDA_ENTRY(8, 0),
24 CUDA_ENTRY(9, 0),
25 CUDA_ENTRY(9, 1),
26 CUDA_ENTRY(9, 2),
27 CUDA_ENTRY(10, 0),
28 CUDA_ENTRY(10, 1),
29 CUDA_ENTRY(10, 2),
30 CUDA_ENTRY(11, 0),
31 CUDA_ENTRY(11, 1),
32 CUDA_ENTRY(11, 2),
33 CUDA_ENTRY(11, 3),
34 CUDA_ENTRY(11, 4),
35 CUDA_ENTRY(11, 5),
36 CUDA_ENTRY(11, 6),
37 CUDA_ENTRY(11, 7),
38 CUDA_ENTRY(11, 8),
39 CUDA_ENTRY(12, 0),
40 CUDA_ENTRY(12, 1),
41 CUDA_ENTRY(12, 2),
42 CUDA_ENTRY(12, 3),
43 CUDA_ENTRY(12, 4),
44 CUDA_ENTRY(12, 5),
45 CUDA_ENTRY(12, 6),
46 CUDA_ENTRY(12, 8),
47 CUDA_ENTRY(12, 9),
48 CUDA_ENTRY(13, 0),
49 CUDA_ENTRY(13, 1),
50 CUDA_ENTRY(13, 2),
51 {"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
52 {"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
53};
54#undef CUDA_ENTRY
55
57 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
58 if (I->Version == V)
59 return I->Name;
60
62}
63
64CudaVersion CudaStringToVersion(const llvm::Twine &S) {
65 std::string VS = S.str();
66 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
67 if (I->Name == VS)
68 return I->Version;
70}
71
72CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
73 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
74 if (I->TVersion == Version)
75 return I->Version;
77}
78
80 if (A == OffloadArch::Unknown)
82
83 // AMD GPUs do not depend on CUDA versions.
84 if (IsAMDOffloadArch(A))
86
87 switch (A) {
141 default:
142 llvm_unreachable("invalid enum");
143 }
144}
145
147 // AMD GPUs do not depend on CUDA versions.
148 if (IsAMDOffloadArch(A))
149 return CudaVersion::NEW;
150
151 switch (A) {
167 default:
168 return CudaVersion::NEW;
169 }
170}
171
172bool CudaFeatureEnabled(llvm::VersionTuple Version, CudaFeature Feature) {
173 return CudaFeatureEnabled(ToCudaVersion(Version), Feature);
174}
175
177 switch (Feature) {
179 return Version >= CudaVersion::CUDA_92;
181 return Version >= CudaVersion::CUDA_101;
182 }
183 llvm_unreachable("Unknown CUDA feature.");
184}
185
187 switch (Arch) {
189 return 200;
191 return 210;
193 return 300;
195 return 320;
197 return 350;
199 return 370;
201 return 500;
203 return 520;
205 return 530;
207 return 600;
209 return 610;
211 return 620;
213 return 700;
215 return 720;
217 return 750;
219 return 800;
221 return 860;
223 return 870;
225 return 880;
227 return 890;
230 return 900;
234 return 1000;
238 return 1010;
242 return 1030;
246 return 1100;
250 return 1200;
254 return 1210;
255 default:
256 break;
257 }
258 llvm_unreachable("invalid NVIDIA GPU architecture");
259}
260
262 switch (Arch) {
270 return true;
271 default:
272 return false;
273 }
274}
275
278 return true;
279 switch (Arch) {
286 return true;
287 default:
288 return false;
289 }
290}
291} // namespace clang
#define V(N, I)
#define CUDA_ENTRY(major, minor)
Definition Cuda.cpp:14
The JSON file list parser is used to communicate input to InstallAPI.
CudaVersion MaxVersionForOffloadArch(OffloadArch A)
Get the latest CudaVersion that supports the given OffloadArch.
Definition Cuda.cpp:146
unsigned CudaArchToID(OffloadArch Arch)
Get the numeric ID (e.g. 700) of a CUDA architecture.
Definition Cuda.cpp:186
static bool IsAMDOffloadArch(OffloadArch A)
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition Cuda.cpp:72
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition Cuda.cpp:64
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition Cuda.cpp:172
const char * CudaVersionToString(CudaVersion V)
Definition Cuda.cpp:56
bool IsNVIDIAAcceleratedOffloadArch(OffloadArch Arch)
Check if the CUDA architecture is an accelerated variant (e.g. sm_90a).
Definition Cuda.cpp:261
static const CudaVersionMapEntry CudaNameVersionMap[]
Definition Cuda.cpp:20
CudaVersion
Definition Cuda.h:22
CudaFeature
Definition Cuda.h:78
@ CUDA_USES_NEW_LAUNCH
Definition Cuda.h:80
@ CUDA_USES_FATBIN_REGISTER_END
Definition Cuda.h:82
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition Cuda.cpp:79
bool IsNVIDIAFamilySpecificOffloadArch(OffloadArch Arch)
Check if the CUDA architecture is a family-specific variant (e.g. sm_100f).
Definition Cuda.cpp:276
llvm::VersionTuple TVersion
Definition Cuda.cpp:12