clang
22.0.0git
lib
Basic
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
7
namespace
clang
{
8
9
struct
CudaVersionMapEntry
{
10
const
char
*
Name
;
11
CudaVersion
Version
;
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
20
static
const
CudaVersionMapEntry
CudaNameVersionMap
[] = {
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
{
""
,
CudaVersion::NEW
, llvm::VersionTuple(std::numeric_limits<int>::max())},
49
{
"unknown"
,
CudaVersion::UNKNOWN
, {}}
// End of list tombstone.
50
};
51
#undef CUDA_ENTRY
52
53
const
char
*
CudaVersionToString
(
CudaVersion
V
) {
54
for
(
auto
*I =
CudaNameVersionMap
; I->Version !=
CudaVersion::UNKNOWN
; ++I)
55
if
(I->Version ==
V
)
56
return
I->Name;
57
58
return
CudaVersionToString
(
CudaVersion::UNKNOWN
);
59
}
60
61
CudaVersion
CudaStringToVersion
(
const
llvm::Twine &S) {
62
std::string VS = S.str();
63
for
(
auto
*I =
CudaNameVersionMap
; I->Version !=
CudaVersion::UNKNOWN
; ++I)
64
if
(I->Name == VS)
65
return
I->Version;
66
return
CudaVersion::UNKNOWN
;
67
}
68
69
CudaVersion
ToCudaVersion
(llvm::VersionTuple Version) {
70
for
(
auto
*I =
CudaNameVersionMap
; I->Version !=
CudaVersion::UNKNOWN
; ++I)
71
if
(I->TVersion == Version)
72
return
I->Version;
73
return
CudaVersion::UNKNOWN
;
74
}
75
76
CudaVersion
MinVersionForOffloadArch
(
OffloadArch
A) {
77
if
(A ==
OffloadArch::UNKNOWN
)
78
return
CudaVersion::UNKNOWN
;
79
80
// AMD GPUs do not depend on CUDA versions.
81
if
(
IsAMDOffloadArch
(A))
82
return
CudaVersion::CUDA_70
;
83
84
switch
(A) {
85
case
OffloadArch::SM_20
:
86
case
OffloadArch::SM_21
:
87
case
OffloadArch::SM_30
:
88
case
OffloadArch::SM_32_
:
89
case
OffloadArch::SM_35
:
90
case
OffloadArch::SM_37
:
91
case
OffloadArch::SM_50
:
92
case
OffloadArch::SM_52
:
93
case
OffloadArch::SM_53
:
94
return
CudaVersion::CUDA_70
;
95
case
OffloadArch::SM_60
:
96
case
OffloadArch::SM_61
:
97
case
OffloadArch::SM_62
:
98
return
CudaVersion::CUDA_80
;
99
case
OffloadArch::SM_70
:
100
return
CudaVersion::CUDA_90
;
101
case
OffloadArch::SM_72
:
102
return
CudaVersion::CUDA_91
;
103
case
OffloadArch::SM_75
:
104
return
CudaVersion::CUDA_100
;
105
case
OffloadArch::SM_80
:
106
return
CudaVersion::CUDA_110
;
107
case
OffloadArch::SM_86
:
108
return
CudaVersion::CUDA_111
;
109
case
OffloadArch::SM_87
:
110
return
CudaVersion::CUDA_114
;
111
case
OffloadArch::SM_89
:
112
case
OffloadArch::SM_90
:
113
return
CudaVersion::CUDA_118
;
114
case
OffloadArch::SM_90a
:
115
return
CudaVersion::CUDA_120
;
116
case
OffloadArch::SM_100
:
117
case
OffloadArch::SM_100a
:
118
case
OffloadArch::SM_101
:
119
case
OffloadArch::SM_101a
:
120
case
OffloadArch::SM_120
:
121
case
OffloadArch::SM_120a
:
122
return
CudaVersion::CUDA_128
;
123
case
OffloadArch::SM_103
:
124
case
OffloadArch::SM_103a
:
125
case
OffloadArch::SM_121
:
126
case
OffloadArch::SM_121a
:
127
return
CudaVersion::CUDA_129
;
128
default
:
129
llvm_unreachable(
"invalid enum"
);
130
}
131
}
132
133
CudaVersion
MaxVersionForOffloadArch
(
OffloadArch
A) {
134
// AMD GPUs do not depend on CUDA versions.
135
if
(
IsAMDOffloadArch
(A))
136
return
CudaVersion::NEW
;
137
138
switch
(A) {
139
case
OffloadArch::UNKNOWN
:
140
return
CudaVersion::UNKNOWN
;
141
case
OffloadArch::SM_20
:
142
case
OffloadArch::SM_21
:
143
return
CudaVersion::CUDA_80
;
144
case
OffloadArch::SM_30
:
145
case
OffloadArch::SM_32_
:
146
return
CudaVersion::CUDA_102
;
147
case
OffloadArch::SM_35
:
148
case
OffloadArch::SM_37
:
149
return
CudaVersion::CUDA_118
;
150
default
:
151
return
CudaVersion::NEW
;
152
}
153
}
154
155
bool
CudaFeatureEnabled
(llvm::VersionTuple Version,
CudaFeature
Feature
) {
156
return
CudaFeatureEnabled
(
ToCudaVersion
(Version),
Feature
);
157
}
158
159
bool
CudaFeatureEnabled
(
CudaVersion
Version,
CudaFeature
Feature
) {
160
switch
(
Feature
) {
161
case
CudaFeature::CUDA_USES_NEW_LAUNCH
:
162
return
Version >=
CudaVersion::CUDA_92
;
163
case
CudaFeature::CUDA_USES_FATBIN_REGISTER_END
:
164
return
Version >=
CudaVersion::CUDA_101
;
165
}
166
llvm_unreachable(
"Unknown CUDA feature."
);
167
}
168
}
// namespace clang
V
#define V(N, I)
Definition
ASTContext.h:3584
CUDA_ENTRY
#define CUDA_ENTRY(major, minor)
Definition
Cuda.cpp:14
AttrFeatureKind::Feature
@ Feature
Definition
LoongArch.cpp:403
Cuda.h
clang
The JSON file list parser is used to communicate input to InstallAPI.
Definition
CalledOnceCheck.h:17
clang::MaxVersionForOffloadArch
CudaVersion MaxVersionForOffloadArch(OffloadArch A)
Get the latest CudaVersion that supports the given OffloadArch.
Definition
Cuda.cpp:133
clang::IsAMDOffloadArch
static bool IsAMDOffloadArch(OffloadArch A)
Definition
OffloadArch.h:124
clang::OffloadArch
OffloadArch
Definition
OffloadArch.h:18
clang::OffloadArch::SM_120
@ SM_120
Definition
OffloadArch.h:50
clang::OffloadArch::SM_21
@ SM_21
Definition
OffloadArch.h:23
clang::OffloadArch::SM_72
@ SM_72
Definition
OffloadArch.h:36
clang::OffloadArch::SM_61
@ SM_61
Definition
OffloadArch.h:33
clang::OffloadArch::SM_101
@ SM_101
Definition
OffloadArch.h:46
clang::OffloadArch::UNKNOWN
@ UNKNOWN
Definition
OffloadArch.h:20
clang::OffloadArch::SM_52
@ SM_52
Definition
OffloadArch.h:30
clang::OffloadArch::SM_50
@ SM_50
Definition
OffloadArch.h:29
clang::OffloadArch::SM_75
@ SM_75
Definition
OffloadArch.h:37
clang::OffloadArch::SM_89
@ SM_89
Definition
OffloadArch.h:41
clang::OffloadArch::SM_53
@ SM_53
Definition
OffloadArch.h:31
clang::OffloadArch::SM_101a
@ SM_101a
Definition
OffloadArch.h:47
clang::OffloadArch::SM_35
@ SM_35
Definition
OffloadArch.h:27
clang::OffloadArch::SM_60
@ SM_60
Definition
OffloadArch.h:32
clang::OffloadArch::SM_20
@ SM_20
Definition
OffloadArch.h:22
clang::OffloadArch::SM_121a
@ SM_121a
Definition
OffloadArch.h:53
clang::OffloadArch::SM_86
@ SM_86
Definition
OffloadArch.h:39
clang::OffloadArch::SM_87
@ SM_87
Definition
OffloadArch.h:40
clang::OffloadArch::SM_62
@ SM_62
Definition
OffloadArch.h:34
clang::OffloadArch::SM_80
@ SM_80
Definition
OffloadArch.h:38
clang::OffloadArch::SM_100
@ SM_100
Definition
OffloadArch.h:44
clang::OffloadArch::SM_100a
@ SM_100a
Definition
OffloadArch.h:45
clang::OffloadArch::SM_103
@ SM_103
Definition
OffloadArch.h:48
clang::OffloadArch::SM_90
@ SM_90
Definition
OffloadArch.h:42
clang::OffloadArch::SM_30
@ SM_30
Definition
OffloadArch.h:24
clang::OffloadArch::SM_70
@ SM_70
Definition
OffloadArch.h:35
clang::OffloadArch::SM_90a
@ SM_90a
Definition
OffloadArch.h:43
clang::OffloadArch::SM_103a
@ SM_103a
Definition
OffloadArch.h:49
clang::OffloadArch::SM_121
@ SM_121
Definition
OffloadArch.h:52
clang::OffloadArch::SM_37
@ SM_37
Definition
OffloadArch.h:28
clang::OffloadArch::SM_120a
@ SM_120a
Definition
OffloadArch.h:51
clang::OffloadArch::SM_32_
@ SM_32_
Definition
OffloadArch.h:26
clang::ToCudaVersion
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition
Cuda.cpp:69
clang::CudaStringToVersion
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition
Cuda.cpp:61
clang::CudaFeatureEnabled
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition
Cuda.cpp:155
clang::CudaVersionToString
const char * CudaVersionToString(CudaVersion V)
Definition
Cuda.cpp:53
clang::CudaNameVersionMap
static const CudaVersionMapEntry CudaNameVersionMap[]
Definition
Cuda.cpp:20
clang::CudaVersion
CudaVersion
Definition
Cuda.h:22
clang::CudaVersion::CUDA_100
@ CUDA_100
Definition
Cuda.h:30
clang::CudaVersion::CUDA_129
@ CUDA_129
Definition
Cuda.h:50
clang::CudaVersion::NEW
@ NEW
Definition
Cuda.h:54
clang::CudaVersion::CUDA_90
@ CUDA_90
Definition
Cuda.h:27
clang::CudaVersion::CUDA_91
@ CUDA_91
Definition
Cuda.h:28
clang::CudaVersion::UNKNOWN
@ UNKNOWN
Definition
Cuda.h:23
clang::CudaVersion::CUDA_80
@ CUDA_80
Definition
Cuda.h:26
clang::CudaVersion::CUDA_120
@ CUDA_120
Definition
Cuda.h:42
clang::CudaVersion::CUDA_102
@ CUDA_102
Definition
Cuda.h:32
clang::CudaVersion::CUDA_70
@ CUDA_70
Definition
Cuda.h:24
clang::CudaVersion::CUDA_128
@ CUDA_128
Definition
Cuda.h:49
clang::CudaVersion::CUDA_110
@ CUDA_110
Definition
Cuda.h:33
clang::CudaVersion::CUDA_114
@ CUDA_114
Definition
Cuda.h:37
clang::CudaVersion::CUDA_111
@ CUDA_111
Definition
Cuda.h:34
clang::CudaVersion::CUDA_101
@ CUDA_101
Definition
Cuda.h:31
clang::CudaVersion::CUDA_118
@ CUDA_118
Definition
Cuda.h:41
clang::CudaVersion::CUDA_92
@ CUDA_92
Definition
Cuda.h:29
clang::CudaFeature
CudaFeature
Definition
Cuda.h:75
clang::CudaFeature::CUDA_USES_NEW_LAUNCH
@ CUDA_USES_NEW_LAUNCH
Definition
Cuda.h:77
clang::CudaFeature::CUDA_USES_FATBIN_REGISTER_END
@ CUDA_USES_FATBIN_REGISTER_END
Definition
Cuda.h:79
clang::MinVersionForOffloadArch
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition
Cuda.cpp:76
clang::CudaVersionMapEntry
Definition
Cuda.cpp:9
clang::CudaVersionMapEntry::TVersion
llvm::VersionTuple TVersion
Definition
Cuda.cpp:12
clang::CudaVersionMapEntry::Name
const char * Name
Definition
Cuda.cpp:10
clang::CudaVersionMapEntry::Version
CudaVersion Version
Definition
Cuda.cpp:11
Generated on
for clang by
1.14.0