| 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 | #include "clang/Basic/OffloadArch.h" |
| 13 | |
| 14 | namespace llvm { |
| 15 | class StringRef; |
| 16 | class Twine; |
| 17 | class VersionTuple; |
| 18 | } // namespace llvm |
| 19 | |
| 20 | namespace clang { |
| 21 | |
| 22 | enum class CudaVersion { |
| 23 | UNKNOWN, |
| 24 | CUDA_70, |
| 25 | CUDA_75, |
| 26 | CUDA_80, |
| 27 | CUDA_90, |
| 28 | CUDA_91, |
| 29 | CUDA_92, |
| 30 | CUDA_100, |
| 31 | CUDA_101, |
| 32 | CUDA_102, |
| 33 | CUDA_110, |
| 34 | CUDA_111, |
| 35 | CUDA_112, |
| 36 | CUDA_113, |
| 37 | CUDA_114, |
| 38 | CUDA_115, |
| 39 | CUDA_116, |
| 40 | CUDA_117, |
| 41 | CUDA_118, |
| 42 | CUDA_120, |
| 43 | CUDA_121, |
| 44 | CUDA_122, |
| 45 | CUDA_123, |
| 46 | CUDA_124, |
| 47 | CUDA_125, |
| 48 | CUDA_126, |
| 49 | CUDA_128, |
| 50 | FULLY_SUPPORTED = CUDA_123, |
| 51 | PARTIALLY_SUPPORTED = |
| 52 | CUDA_128, // Partially supported. Proceed with a warning. |
| 53 | NEW = 10000, // Too new. Issue a warning, but allow using it. |
| 54 | }; |
| 55 | const char *CudaVersionToString(CudaVersion V); |
| 56 | // Input is "Major.Minor" |
| 57 | CudaVersion CudaStringToVersion(const llvm::Twine &S); |
| 58 | |
| 59 | enum class CUDAFunctionTarget { |
| 60 | Device, |
| 61 | Global, |
| 62 | Host, |
| 63 | HostDevice, |
| 64 | InvalidTarget |
| 65 | }; |
| 66 | |
| 67 | /// Get the earliest CudaVersion that supports the given OffloadArch. |
| 68 | CudaVersion MinVersionForOffloadArch(OffloadArch A); |
| 69 | |
| 70 | /// Get the latest CudaVersion that supports the given OffloadArch. |
| 71 | CudaVersion MaxVersionForOffloadArch(OffloadArch A); |
| 72 | |
| 73 | // Various SDK-dependent features that affect CUDA compilation |
| 74 | enum class CudaFeature { |
| 75 | // CUDA-9.2+ uses a new API for launching kernels. |
| 76 | CUDA_USES_NEW_LAUNCH, |
| 77 | // CUDA-10.1+ needs explicit end of GPU binary registration. |
| 78 | CUDA_USES_FATBIN_REGISTER_END, |
| 79 | }; |
| 80 | |
| 81 | CudaVersion ToCudaVersion(llvm::VersionTuple); |
| 82 | bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature); |
| 83 | bool CudaFeatureEnabled(CudaVersion, CudaFeature); |
| 84 | |
| 85 | } // namespace clang |
| 86 | |
| 87 | #endif |
| 88 | |