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
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
54
const
char
*
CudaVersionToString
(
CudaVersion
V
) {
55
for
(
auto
*I =
CudaNameVersionMap
; I->Version !=
CudaVersion::UNKNOWN
; ++I)
56
if
(I->Version ==
V
)
57
return
I->Name;
58
59
return
CudaVersionToString
(
CudaVersion::UNKNOWN
);
60
}
61
62
CudaVersion
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;
67
return
CudaVersion::UNKNOWN
;
68
}
69
70
CudaVersion
ToCudaVersion
(llvm::VersionTuple Version) {
71
for
(
auto
*I =
CudaNameVersionMap
; I->Version !=
CudaVersion::UNKNOWN
; ++I)
72
if
(I->TVersion == Version)
73
return
I->Version;
74
return
CudaVersion::UNKNOWN
;
75
}
76
77
CudaVersion
MinVersionForOffloadArch
(
OffloadArch
A) {
78
if
(A ==
OffloadArch::UNKNOWN
)
79
return
CudaVersion::UNKNOWN
;
80
81
// AMD GPUs do not depend on CUDA versions.
82
if
(
IsAMDOffloadArch
(A))
83
return
CudaVersion::CUDA_70
;
84
85
switch
(A) {
86
case
OffloadArch::SM_20
:
87
case
OffloadArch::SM_21
:
88
case
OffloadArch::SM_30
:
89
case
OffloadArch::SM_32_
:
90
case
OffloadArch::SM_35
:
91
case
OffloadArch::SM_37
:
92
case
OffloadArch::SM_50
:
93
case
OffloadArch::SM_52
:
94
case
OffloadArch::SM_53
:
95
return
CudaVersion::CUDA_70
;
96
case
OffloadArch::SM_60
:
97
case
OffloadArch::SM_61
:
98
case
OffloadArch::SM_62
:
99
return
CudaVersion::CUDA_80
;
100
case
OffloadArch::SM_70
:
101
return
CudaVersion::CUDA_90
;
102
case
OffloadArch::SM_72
:
103
return
CudaVersion::CUDA_91
;
104
case
OffloadArch::SM_75
:
105
return
CudaVersion::CUDA_100
;
106
case
OffloadArch::SM_80
:
107
return
CudaVersion::CUDA_110
;
108
case
OffloadArch::SM_86
:
109
return
CudaVersion::CUDA_111
;
110
case
OffloadArch::SM_87
:
111
return
CudaVersion::CUDA_114
;
112
case
OffloadArch::SM_89
:
113
case
OffloadArch::SM_90
:
114
return
CudaVersion::CUDA_118
;
115
case
OffloadArch::SM_90a
:
116
return
CudaVersion::CUDA_120
;
117
case
OffloadArch::SM_100
:
118
case
OffloadArch::SM_100a
:
119
case
OffloadArch::SM_101
:
120
case
OffloadArch::SM_101a
:
121
case
OffloadArch::SM_120
:
122
case
OffloadArch::SM_120a
:
123
return
CudaVersion::CUDA_128
;
124
case
OffloadArch::SM_103
:
125
case
OffloadArch::SM_103a
:
126
case
OffloadArch::SM_121
:
127
case
OffloadArch::SM_121a
:
128
return
CudaVersion::CUDA_129
;
129
case
OffloadArch::SM_88
:
130
case
OffloadArch::SM_110
:
131
case
OffloadArch::SM_110a
:
132
return
CudaVersion::CUDA_130
;
133
default
:
134
llvm_unreachable(
"invalid enum"
);
135
}
136
}
137
138
CudaVersion
MaxVersionForOffloadArch
(
OffloadArch
A) {
139
// AMD GPUs do not depend on CUDA versions.
140
if
(
IsAMDOffloadArch
(A))
141
return
CudaVersion::NEW
;
142
143
switch
(A) {
144
case
OffloadArch::UNKNOWN
:
145
return
CudaVersion::UNKNOWN
;
146
case
OffloadArch::SM_20
:
147
case
OffloadArch::SM_21
:
148
return
CudaVersion::CUDA_80
;
149
case
OffloadArch::SM_30
:
150
case
OffloadArch::SM_32_
:
151
return
CudaVersion::CUDA_102
;
152
case
OffloadArch::SM_35
:
153
case
OffloadArch::SM_37
:
154
return
CudaVersion::CUDA_118
;
155
case
OffloadArch::SM_101
:
156
case
OffloadArch::SM_101a
:
157
return
CudaVersion::CUDA_129
;
158
default
:
159
return
CudaVersion::NEW
;
160
}
161
}
162
163
bool
CudaFeatureEnabled
(llvm::VersionTuple Version,
CudaFeature
Feature
) {
164
return
CudaFeatureEnabled
(
ToCudaVersion
(Version),
Feature
);
165
}
166
167
bool
CudaFeatureEnabled
(
CudaVersion
Version,
CudaFeature
Feature
) {
168
switch
(
Feature
) {
169
case
CudaFeature::CUDA_USES_NEW_LAUNCH
:
170
return
Version >=
CudaVersion::CUDA_92
;
171
case
CudaFeature::CUDA_USES_FATBIN_REGISTER_END
:
172
return
Version >=
CudaVersion::CUDA_101
;
173
}
174
llvm_unreachable(
"Unknown CUDA feature."
);
175
}
176
}
// namespace clang
V
#define V(N, I)
Definition
ASTContext.h:3635
CUDA_ENTRY
#define CUDA_ENTRY(major, minor)
Definition
Cuda.cpp:14
AttrFeatureKind::Feature
@ Feature
Definition
LoongArch.cpp:404
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:138
clang::IsAMDOffloadArch
static bool IsAMDOffloadArch(OffloadArch A)
Definition
OffloadArch.h:127
clang::OffloadArch
OffloadArch
Definition
OffloadArch.h:18
clang::OffloadArch::SM_120
@ SM_120
Definition
OffloadArch.h:53
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:47
clang::OffloadArch::SM_110
@ SM_110
Definition
OffloadArch.h:51
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:42
clang::OffloadArch::SM_53
@ SM_53
Definition
OffloadArch.h:31
clang::OffloadArch::SM_101a
@ SM_101a
Definition
OffloadArch.h:48
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:56
clang::OffloadArch::SM_86
@ SM_86
Definition
OffloadArch.h:39
clang::OffloadArch::SM_110a
@ SM_110a
Definition
OffloadArch.h:52
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:45
clang::OffloadArch::SM_100a
@ SM_100a
Definition
OffloadArch.h:46
clang::OffloadArch::SM_103
@ SM_103
Definition
OffloadArch.h:49
clang::OffloadArch::SM_90
@ SM_90
Definition
OffloadArch.h:43
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:44
clang::OffloadArch::SM_103a
@ SM_103a
Definition
OffloadArch.h:50
clang::OffloadArch::SM_121
@ SM_121
Definition
OffloadArch.h:55
clang::OffloadArch::SM_37
@ SM_37
Definition
OffloadArch.h:28
clang::OffloadArch::SM_88
@ SM_88
Definition
OffloadArch.h:41
clang::OffloadArch::SM_120a
@ SM_120a
Definition
OffloadArch.h:54
clang::OffloadArch::SM_32_
@ SM_32_
Definition
OffloadArch.h:26
clang::ToCudaVersion
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition
Cuda.cpp:70
clang::CudaStringToVersion
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition
Cuda.cpp:62
clang::CudaFeatureEnabled
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition
Cuda.cpp:163
clang::CudaVersionToString
const char * CudaVersionToString(CudaVersion V)
Definition
Cuda.cpp:54
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:55
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_130
@ CUDA_130
Definition
Cuda.h:51
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:76
clang::CudaFeature::CUDA_USES_NEW_LAUNCH
@ CUDA_USES_NEW_LAUNCH
Definition
Cuda.h:78
clang::CudaFeature::CUDA_USES_FATBIN_REGISTER_END
@ CUDA_USES_FATBIN_REGISTER_END
Definition
Cuda.h:80
clang::MinVersionForOffloadArch
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition
Cuda.cpp:77
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