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 {"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
50 {"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
51};
52#undef CUDA_ENTRY
53
55 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
56 if (I->Version == V)
57 return I->Name;
58
60}
61
62CudaVersion CudaStringToVersion(const llvm::Twine &S) {
63 std::string VS = S.str();
64 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
65 if (I->Name == VS)
66 return I->Version;
68}
69
70CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
71 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
72 if (I->TVersion == Version)
73 return I->Version;
75}
76
78 if (A == OffloadArch::UNKNOWN)
80
81 // AMD GPUs do not depend on CUDA versions.
82 if (IsAMDOffloadArch(A))
84
85 switch (A) {
133 default:
134 llvm_unreachable("invalid enum");
135 }
136}
137
139 // AMD GPUs do not depend on CUDA versions.
140 if (IsAMDOffloadArch(A))
141 return CudaVersion::NEW;
142
143 switch (A) {
158 default:
159 return CudaVersion::NEW;
160 }
161}
162
163bool CudaFeatureEnabled(llvm::VersionTuple Version, CudaFeature Feature) {
164 return CudaFeatureEnabled(ToCudaVersion(Version), Feature);
165}
166
168 switch (Feature) {
170 return Version >= CudaVersion::CUDA_92;
172 return Version >= CudaVersion::CUDA_101;
173 }
174 llvm_unreachable("Unknown CUDA feature.");
175}
176
178 switch (Arch) {
180 return 200;
182 return 210;
184 return 300;
186 return 320;
188 return 350;
190 return 370;
192 return 500;
194 return 520;
196 return 530;
198 return 600;
200 return 610;
202 return 620;
204 return 700;
206 return 720;
208 return 750;
210 return 800;
212 return 860;
214 return 870;
216 return 880;
218 return 890;
221 return 900;
224 return 1000;
227 return 1010;
230 return 1030;
233 return 1100;
236 return 1200;
239 return 1210;
240 default:
241 break;
242 }
243 llvm_unreachable("invalid NVIDIA GPU architecture");
244}
245
247 switch (Arch) {
255 return true;
256 default:
257 return false;
258 }
259}
260} // 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:138
unsigned CudaArchToID(OffloadArch Arch)
Get the numeric ID (e.g. 700) of a CUDA architecture.
Definition Cuda.cpp:177
static bool IsAMDOffloadArch(OffloadArch A)
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition Cuda.cpp:70
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition Cuda.cpp:62
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition Cuda.cpp:163
const char * CudaVersionToString(CudaVersion V)
Definition Cuda.cpp:54
bool IsNVIDIAAcceleratedOffloadArch(OffloadArch Arch)
Check if the CUDA architecture is an accelerated variant (e.g. sm_90a).
Definition Cuda.cpp:246
static const CudaVersionMapEntry CudaNameVersionMap[]
Definition Cuda.cpp:20
CudaVersion
Definition Cuda.h:22
CudaFeature
Definition Cuda.h:76
@ CUDA_USES_NEW_LAUNCH
Definition Cuda.h:78
@ CUDA_USES_FATBIN_REGISTER_END
Definition Cuda.h:80
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition Cuda.cpp:77
llvm::VersionTuple TVersion
Definition Cuda.cpp:12