clang  16.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,
37  CUDA_116,
38  CUDA_117,
39  CUDA_118,
42  CUDA_118, // Partially supported. Proceed with a warning.
43  NEW = 10000, // Too new. Issue a warning, but allow using it.
44 };
45 const char *CudaVersionToString(CudaVersion V);
46 // Input is "Major.Minor"
47 CudaVersion CudaStringToVersion(const llvm::Twine &S);
48 
49 enum class CudaArch {
50  UNUSED,
51  UNKNOWN,
52  SM_20,
53  SM_21,
54  SM_30,
55  SM_32,
56  SM_35,
57  SM_37,
58  SM_50,
59  SM_52,
60  SM_53,
61  SM_60,
62  SM_61,
63  SM_62,
64  SM_70,
65  SM_72,
66  SM_75,
67  SM_80,
68  SM_86,
69  SM_87,
70  SM_89,
71  SM_90,
72  GFX600,
73  GFX601,
74  GFX602,
75  GFX700,
76  GFX701,
77  GFX702,
78  GFX703,
79  GFX704,
80  GFX705,
81  GFX801,
82  GFX802,
83  GFX803,
84  GFX805,
85  GFX810,
86  GFX900,
87  GFX902,
88  GFX904,
89  GFX906,
90  GFX908,
91  GFX909,
92  GFX90a,
93  GFX90c,
94  GFX940,
95  GFX1010,
96  GFX1011,
97  GFX1012,
98  GFX1013,
99  GFX1030,
100  GFX1031,
101  GFX1032,
102  GFX1033,
103  GFX1034,
104  GFX1035,
105  GFX1036,
106  GFX1100,
107  GFX1101,
108  GFX1102,
109  GFX1103,
110  Generic, // A processor model named 'generic' if the target backend defines a
111  // public one.
112  LAST,
113 
116 };
117 
118 static inline bool IsNVIDIAGpuArch(CudaArch A) {
119  return A >= CudaArch::SM_20 && A < CudaArch::GFX600;
120 }
121 
122 static inline bool IsAMDGpuArch(CudaArch A) {
123  // Generic processor model is for testing only.
124  return A >= CudaArch::GFX600 && A < CudaArch::Generic;
125 }
126 
127 const char *CudaArchToString(CudaArch A);
129 
130 // The input should have the form "sm_20".
131 CudaArch StringToCudaArch(llvm::StringRef S);
132 
133 /// Get the earliest CudaVersion that supports the given CudaArch.
135 
136 /// Get the latest CudaVersion that supports the given CudaArch.
138 
139 // Various SDK-dependent features that affect CUDA compilation
140 enum class CudaFeature {
141  // CUDA-9.2+ uses a new API for launching kernels.
143  // CUDA-10.1+ needs explicit end of GPU binary registration.
145 };
146 
147 CudaVersion ToCudaVersion(llvm::VersionTuple);
148 bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
150 
151 } // namespace clang
152 
153 #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:149
clang::CudaVersion::NEW
@ NEW
clang::CudaFeature
CudaFeature
Definition: Cuda.h:140
clang::CudaArch::GFX601
@ GFX601
clang::CudaVersion::CUDA_70
@ CUDA_70
clang::CudaArch::GFX908
@ GFX908
clang::IsAMDGpuArch
static bool IsAMDGpuArch(CudaArch A)
Definition: Cuda.h:122
clang::CudaArch::GFX906
@ GFX906
clang::CudaArch::SM_90
@ SM_90
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:167
clang::StringToCudaArch
CudaArch StringToCudaArch(llvm::StringRef S)
Definition: Cuda.cpp:158
clang::CudaArch::GFX1010
@ GFX1010
clang::CudaArch::SM_60
@ SM_60
clang::CudaArch::GFX1100
@ GFX1100
clang::CudaVersion::CUDA_117
@ CUDA_117
clang::CudaArch::GFX1011
@ GFX1011
clang::CudaArch::SM_20
@ SM_20
V
#define V(N, I)
Definition: ASTContext.h:3237
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::CudaArch::SM_87
@ SM_87
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:228
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::CUDA_116
@ CUDA_116
clang::CudaVersion::FULLY_SUPPORTED
@ FULLY_SUPPORTED
clang::CudaArch::SM_61
@ SM_61
clang::CudaArch::GFX803
@ GFX803
clang::CudaVersion::CUDA_118
@ CUDA_118
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:54
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:140
clang::ToCudaVersion
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition: Cuda.cpp:62
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:46
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:210
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:49
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:118
clang::CudaArch::HIPDefault
@ HIPDefault
clang::CudaArch::SM_75
@ SM_75
clang::CudaArch::GFX701
@ GFX701
clang::CudaArch::GFX1030
@ GFX1030
clang::CudaArch::GFX700
@ GFX700
clang::CudaArch::SM_89
@ SM_89
clang::CudaVersion::CUDA_112
@ CUDA_112