clang  10.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  LATEST = CUDA_101,
31 };
32 const char *CudaVersionToString(CudaVersion V);
33 // Input is "Major.Minor"
34 CudaVersion CudaStringToVersion(const llvm::Twine &S);
35 
36 enum class CudaArch {
37  UNKNOWN,
38  SM_20,
39  SM_21,
40  SM_30,
41  SM_32,
42  SM_35,
43  SM_37,
44  SM_50,
45  SM_52,
46  SM_53,
47  SM_60,
48  SM_61,
49  SM_62,
50  SM_70,
51  SM_72,
52  SM_75,
53  GFX600,
54  GFX601,
55  GFX700,
56  GFX701,
57  GFX702,
58  GFX703,
59  GFX704,
60  GFX801,
61  GFX802,
62  GFX803,
63  GFX810,
64  GFX900,
65  GFX902,
66  GFX904,
67  GFX906,
68  GFX908,
69  GFX909,
70  GFX1010,
71  GFX1011,
72  GFX1012,
73  LAST,
74 };
75 const char *CudaArchToString(CudaArch A);
76 
77 // The input should have the form "sm_20".
78 CudaArch StringToCudaArch(llvm::StringRef S);
79 
80 enum class CudaVirtualArch {
81  UNKNOWN,
82  COMPUTE_20,
83  COMPUTE_30,
84  COMPUTE_32,
85  COMPUTE_35,
86  COMPUTE_37,
87  COMPUTE_50,
88  COMPUTE_52,
89  COMPUTE_53,
90  COMPUTE_60,
91  COMPUTE_61,
92  COMPUTE_62,
93  COMPUTE_70,
94  COMPUTE_72,
95  COMPUTE_75,
97 };
99 
100 // The input should have the form "compute_20".
101 CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S);
102 
103 /// Get the compute_xx corresponding to an sm_yy.
105 
106 /// Get the earliest CudaVersion that supports the given CudaArch.
108 
109 /// Get the latest CudaVersion that supports the given CudaArch.
111 
112 // Various SDK-dependent features that affect CUDA compilation
113 enum class CudaFeature {
114  // CUDA-9.2+ uses a new API for launching kernels.
116  // CUDA-10.1+ needs explicit end of GPU binary registration.
118 };
119 
120 bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
122 
123 } // namespace clang
124 
125 #endif
CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S)
Definition: Cuda.cpp:206
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition: Cuda.cpp:35
CudaArch
Definition: Cuda.h:36
const char * CudaArchToString(CudaArch A)
Definition: Cuda.cpp:48
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
Definition: Dominators.h:30
CudaArch StringToCudaArch(llvm::StringRef S)
Definition: Cuda.cpp:128
const char * CudaVersionToString(CudaVersion V)
Definition: Cuda.cpp:11
#define V(N, I)
Definition: ASTContext.h:2941
const char * CudaVirtualArchToString(CudaVirtualArch A)
Definition: Cuda.cpp:168
CudaFeature
Definition: Cuda.h:113
CudaVersion MaxVersionForCudaArch(CudaArch A)
Get the latest CudaVersion that supports the given CudaArch.
Definition: Cuda.cpp:337
CudaVersion
Definition: Cuda.h:20
CudaVirtualArch
Definition: Cuda.h:80
CudaVersion MinVersionForCudaArch(CudaArch A)
Get the earliest CudaVersion that supports the given CudaArch.
Definition: Cuda.cpp:286
Dataflow Directional Tag Classes.
CudaVirtualArch VirtualArchForCudaArch(CudaArch A)
Get the compute_xx corresponding to an sm_yy.
Definition: Cuda.cpp:226
bool CudaFeatureEnabled(CudaVersion, CudaFeature)
Definition: Cuda.cpp:394