clang  15.0.0git
Cuda.h
Go to the documentation of this file.
1 //===--- Cuda.h - Utilities for compiling CUDA code ------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_CLANG_BASIC_CUDA_H
10 #define LLVM_CLANG_BASIC_CUDA_H
11 
12 namespace llvm {
13 class StringRef;
14 class Twine;
15 class VersionTuple;
16 } // namespace llvm
17 
18 namespace clang {
19 
20 enum class CudaVersion {
21  UNKNOWN,
22  CUDA_70,
23  CUDA_75,
24  CUDA_80,
25  CUDA_90,
26  CUDA_91,
27  CUDA_92,
28  CUDA_100,
29  CUDA_101,
30  CUDA_102,
31  CUDA_110,
32  CUDA_111,
33  CUDA_112,
34  CUDA_113,
35  CUDA_114,
36  CUDA_115,
39  CUDA_115, // Partially supported. Proceed with a warning.
40  NEW = 10000, // Too new. Issue a warning, but allow using it.
41 };
42 const char *CudaVersionToString(CudaVersion V);
43 // Input is "Major.Minor"
44 CudaVersion CudaStringToVersion(const llvm::Twine &S);
45 
46 enum class CudaArch {
47  UNUSED,
48  UNKNOWN,
49  SM_20,
50  SM_21,
51  SM_30,
52  SM_32,
53  SM_35,
54  SM_37,
55  SM_50,
56  SM_52,
57  SM_53,
58  SM_60,
59  SM_61,
60  SM_62,
61  SM_70,
62  SM_72,
63  SM_75,
64  SM_80,
65  SM_86,
66  GFX600,
67  GFX601,
68  GFX602,
69  GFX700,
70  GFX701,
71  GFX702,
72  GFX703,
73  GFX704,
74  GFX705,
75  GFX801,
76  GFX802,
77  GFX803,
78  GFX805,
79  GFX810,
80  GFX900,
81  GFX902,
82  GFX904,
83  GFX906,
84  GFX908,
85  GFX909,
86  GFX90a,
87  GFX90c,
88  GFX940,
89  GFX1010,
90  GFX1011,
91  GFX1012,
92  GFX1013,
93  GFX1030,
94  GFX1031,
95  GFX1032,
96  GFX1033,
97  GFX1034,
98  GFX1035,
99  GFX1036,
100  GFX1100,
101  GFX1101,
102  GFX1102,
103  GFX1103,
104  Generic, // A processor model named 'generic' if the target backend defines a
105  // public one.
106  LAST,
107 
110 };
111 
112 static inline bool IsNVIDIAGpuArch(CudaArch A) {
113  return A >= CudaArch::SM_20 && A < CudaArch::GFX600;
114 }
115 
116 static inline bool IsAMDGpuArch(CudaArch A) {
117  // Generic processor model is for testing only.
118  return A >= CudaArch::GFX600 && A < CudaArch::Generic;
119 }
120 
121 const char *CudaArchToString(CudaArch A);
123 
124 // The input should have the form "sm_20".
125 CudaArch StringToCudaArch(llvm::StringRef S);
126 
127 /// Get the earliest CudaVersion that supports the given CudaArch.
129 
130 /// Get the latest CudaVersion that supports the given CudaArch.
132 
133 // Various SDK-dependent features that affect CUDA compilation
134 enum class CudaFeature {
135  // CUDA-9.2+ uses a new API for launching kernels.
137  // CUDA-10.1+ needs explicit end of GPU binary registration.
139 };
140 
141 CudaVersion ToCudaVersion(llvm::VersionTuple);
142 bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
144 
145 } // namespace clang
146 
147 #endif
clang::CudaArch::SM_35
@ SM_35
clang::CudaArch::GFX805
@ GFX805
clang::CudaVersion::CUDA_91
@ CUDA_91
clang::CudaArch::SM_70
@ SM_70
clang::CudaArch::GFX704
@ GFX704
clang::CudaVersion::CUDA_114
@ CUDA_114
llvm
YAML serialization mapping.
Definition: Dominators.h:30
clang::CudaVersion::CUDA_100
@ CUDA_100
clang::CudaArch::GFX1035
@ GFX1035
clang::CudaArchToVirtualArchString
const char * CudaArchToVirtualArchString(CudaArch A)
Definition: Cuda.cpp:148
clang::CudaVersion::NEW
@ NEW
clang::CudaFeature
CudaFeature
Definition: Cuda.h:134
clang::CudaArch::GFX601
@ GFX601
clang::CudaVersion::CUDA_70
@ CUDA_70
clang::CudaArch::GFX908
@ GFX908
clang::IsAMDGpuArch
static bool IsAMDGpuArch(CudaArch A)
Definition: Cuda.h:116
clang::CudaArch::GFX906
@ GFX906
clang::CudaArch::GFX802
@ GFX802
clang::CudaArch::GFX940
@ GFX940
clang::CudaArch::SM_53
@ SM_53
clang::CudaArch::GFX1034
@ GFX1034
clang::CudaArch::GFX1102
@ GFX1102
clang::CudaVersion::CUDA_101
@ CUDA_101
clang::MinVersionForCudaArch
CudaVersion MinVersionForCudaArch(CudaArch A)
Get the earliest CudaVersion that supports the given CudaArch.
Definition: Cuda.cpp:166
clang::StringToCudaArch
CudaArch StringToCudaArch(llvm::StringRef S)
Definition: Cuda.cpp:157
clang::CudaArch::GFX1010
@ GFX1010
clang::CudaArch::SM_60
@ SM_60
clang::CudaArch::GFX1100
@ GFX1100
clang::CudaArch::GFX1011
@ GFX1011
clang::CudaArch::SM_20
@ SM_20
V
#define V(N, I)
Definition: ASTContext.h:3176
clang::CudaVersion::CUDA_90
@ CUDA_90
clang::CudaArch::SM_86
@ SM_86
clang::CudaArch::GFX702
@ GFX702
clang::CudaFeature::CUDA_USES_FATBIN_REGISTER_END
@ CUDA_USES_FATBIN_REGISTER_END
clang::CudaArch::SM_72
@ SM_72
clang::CudaVersion::CUDA_102
@ CUDA_102
clang::CudaArch::GFX90c
@ GFX90c
clang::CudaVersion::CUDA_110
@ CUDA_110
clang::CudaArch::GFX1012
@ GFX1012
clang::CudaVersion
CudaVersion
Definition: Cuda.h:20
clang::CudaArch::GFX1103
@ GFX1103
clang::CudaArch::GFX1033
@ GFX1033
clang::CudaArch::GFX1031
@ GFX1031
clang::CudaArch::GFX90a
@ GFX90a
clang::CudaArch::SM_21
@ SM_21
clang::CudaFeatureEnabled
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition: Cuda.cpp:261
clang::CudaArch::GFX1032
@ GFX1032
clang::CudaFeature::CUDA_USES_NEW_LAUNCH
@ CUDA_USES_NEW_LAUNCH
clang::CudaArch::GFX904
@ GFX904
clang::CudaVersion::CUDA_75
@ CUDA_75
clang::CudaArch::SM_52
@ SM_52
clang::CudaVersion::FULLY_SUPPORTED
@ FULLY_SUPPORTED
clang::CudaArch::SM_61
@ SM_61
clang::CudaArch::GFX803
@ GFX803
clang::CudaVersion::CUDA_111
@ CUDA_111
clang::CudaArch::LAST
@ LAST
clang::CudaArch::SM_80
@ SM_80
clang::CudaStringToVersion
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition: Cuda.cpp:51
clang::CudaArch::GFX909
@ GFX909
clang::CudaArch::SM_30
@ SM_30
clang::CudaVersion::PARTIALLY_SUPPORTED
@ PARTIALLY_SUPPORTED
clang::CudaArch::GFX600
@ GFX600
clang::CudaArchToString
const char * CudaArchToString(CudaArch A)
Definition: Cuda.cpp:139
clang::ToCudaVersion
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition: Cuda.cpp:222
clang::CudaArch::UNKNOWN
@ UNKNOWN
clang::CudaVersion::CUDA_92
@ CUDA_92
clang::CudaArch::SM_32
@ SM_32
clang::CudaArch::GFX900
@ GFX900
clang::CudaArch::GFX801
@ GFX801
clang::CudaVersionToString
const char * CudaVersionToString(CudaVersion V)
Definition: Cuda.cpp:11
clang::CudaArch::GFX703
@ GFX703
clang::CudaArch::GFX705
@ GFX705
clang::MaxVersionForCudaArch
CudaVersion MaxVersionForCudaArch(CudaArch A)
Get the latest CudaVersion that supports the given CudaArch.
Definition: Cuda.cpp:204
clang
Definition: CalledOnceCheck.h:17
clang::CudaArch::GFX1036
@ GFX1036
clang::CudaArch::GFX902
@ GFX902
clang::CudaVersion::CUDA_80
@ CUDA_80
clang::CudaArch::GFX1101
@ GFX1101
clang::CudaArch::SM_37
@ SM_37
clang::CudaArch::GFX602
@ GFX602
clang::CudaArch::SM_50
@ SM_50
clang::CudaArch::GFX1013
@ GFX1013
clang::CudaArch
CudaArch
Definition: Cuda.h:46
clang::CudaArch::Generic
@ Generic
clang::CudaArch::GFX810
@ GFX810
clang::CudaArch::UNUSED
@ UNUSED
clang::CudaVersion::CUDA_115
@ CUDA_115
clang::CudaArch::CudaDefault
@ CudaDefault
clang::CudaArch::SM_62
@ SM_62
clang::CudaVersion::CUDA_113
@ CUDA_113
clang::CudaVersion::UNKNOWN
@ UNKNOWN
clang::IsNVIDIAGpuArch
static bool IsNVIDIAGpuArch(CudaArch A)
Definition: Cuda.h:112
clang::CudaArch::HIPDefault
@ HIPDefault
clang::CudaArch::SM_75
@ SM_75
clang::CudaArch::GFX701
@ GFX701
clang::CudaArch::GFX1030
@ GFX1030
clang::CudaArch::GFX700
@ GFX700
clang::CudaVersion::CUDA_112
@ CUDA_112