Clang Project

clang_source_code/include/clang/Basic/Cuda.h
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
12namespace llvm {
13class StringRef;
14class VersionTuple;
15// namespace llvm
16
17namespace clang {
18
19enum class CudaVersion {
20  UNKNOWN,
21  CUDA_70,
22  CUDA_75,
23  CUDA_80,
24  CUDA_90,
25  CUDA_91,
26  CUDA_92,
27  CUDA_100,
28  CUDA_101,
29  LATEST = CUDA_101,
30};
31const char *CudaVersionToString(CudaVersion V);
32// Input is "Major.Minor"
33CudaVersion CudaStringToVersion(llvm::StringRef S);
34
35enum class CudaArch {
36  UNKNOWN,
37  SM_20,
38  SM_21,
39  SM_30,
40  SM_32,
41  SM_35,
42  SM_37,
43  SM_50,
44  SM_52,
45  SM_53,
46  SM_60,
47  SM_61,
48  SM_62,
49  SM_70,
50  SM_72,
51  SM_75,
52  GFX600,
53  GFX601,
54  GFX700,
55  GFX701,
56  GFX702,
57  GFX703,
58  GFX704,
59  GFX801,
60  GFX802,
61  GFX803,
62  GFX810,
63  GFX900,
64  GFX902,
65  GFX904,
66  GFX906,
67  GFX909,
68  LAST,
69};
70const char *CudaArchToString(CudaArch A);
71
72// The input should have the form "sm_20".
73CudaArch StringToCudaArch(llvm::StringRef S);
74
75enum class CudaVirtualArch {
76  UNKNOWN,
77  COMPUTE_20,
78  COMPUTE_30,
79  COMPUTE_32,
80  COMPUTE_35,
81  COMPUTE_37,
82  COMPUTE_50,
83  COMPUTE_52,
84  COMPUTE_53,
85  COMPUTE_60,
86  COMPUTE_61,
87  COMPUTE_62,
88  COMPUTE_70,
89  COMPUTE_72,
90  COMPUTE_75,
91  COMPUTE_AMDGCN,
92};
93const char *CudaVirtualArchToString(CudaVirtualArch A);
94
95// The input should have the form "compute_20".
96CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S);
97
98/// Get the compute_xx corresponding to an sm_yy.
99CudaVirtualArch VirtualArchForCudaArch(CudaArch A);
100
101/// Get the earliest CudaVersion that supports the given CudaArch.
102CudaVersion MinVersionForCudaArch(CudaArch A);
103
104/// Get the latest CudaVersion that supports the given CudaArch.
105CudaVersion MaxVersionForCudaArch(CudaArch A);
106
107//  Various SDK-dependent features that affect CUDA compilation
108enum class CudaFeature {
109  // CUDA-9.2+ uses a new API for launching kernels.
110  CUDA_USES_NEW_LAUNCH,
111  // CUDA-10.1+ needs explicit end of GPU binary registration.
112  CUDA_USES_FATBIN_REGISTER_END,
113};
114
115bool CudaFeatureEnabled(llvm::VersionTupleCudaFeature);
116bool CudaFeatureEnabled(CudaVersionCudaFeature);
117
118// namespace clang
119
120#endif
121