Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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,
40
  FULLY_SUPPORTED = CUDA_115,
41
  PARTIALLY_SUPPORTED =
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
 
114
  CudaDefault = CudaArch::SM_35,
115
  HIPDefault = CudaArch::GFX803,
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);
128
const char *CudaArchToVirtualArchString(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.
134
CudaVersion MinVersionForCudaArch(CudaArch A);
135
 
136
/// Get the latest CudaVersion that supports the given CudaArch.
137
CudaVersion MaxVersionForCudaArch(CudaArch A);
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.
142
  CUDA_USES_NEW_LAUNCH,
143
  // CUDA-10.1+ needs explicit end of GPU binary registration.
144
  CUDA_USES_FATBIN_REGISTER_END,
145
};
146
 
147
CudaVersion ToCudaVersion(llvm::VersionTuple);
148
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
149
bool CudaFeatureEnabled(CudaVersion, CudaFeature);
150
 
151
} // namespace clang
152
 
153
#endif