FindCUDAToolkit
This script locates the NVIDIA CUDA toolkit and the associated libraries, but does not require the CUDA
language be enabled for a given project. This module does not search for the NVIDIA CUDA Samples.
Search Behavior
Finding the CUDA Toolkit requires finding the nvcc
executable, which is searched for in the following order:
- If the
CUDA
language has been enabled we will use the directory containing the compiler as the first search location fornvcc
. -
If the
CUDAToolkit_ROOT
cmake configuration variable (e.g.,-DCUDAToolkit_ROOT=/some/path
) or environment variable is defined, it will be searched. If both an environment variable and a configuration variable are specified, the configuration variable takes precedence.The directory specified here must be such that the executable
nvcc
can be found underneath the directory specified byCUDAToolkit_ROOT
. IfCUDAToolkit_ROOT
is specified, but nonvcc
is found underneath, this package is marked as not found. No subsequent search attempts are performed. - If the CUDA_PATH environment variable is defined, it will be searched.
- The user’s path is searched for
nvcc
usingfind_program()
. If this is found, no subsequent search attempts are performed. Users are responsible for ensuring that the firstnvcc
to show up in the path is the desired path in the event that multiple CUDA Toolkits are installed. - On Unix systems, if the symbolic link
/usr/local/cuda
exists, this is used. No subsequent search attempts are performed. No default symbolic link location exists for the Windows platform. -
The platform specific default install locations are searched. If exactly one candidate is found, this is used. The default CUDA Toolkit install locations searched are:
Platform
Search Pattern
macOS
/Developer/NVIDIA/CUDA-X.Y
Other Unix
/usr/local/cuda-X.Y
Windows
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
Where
X.Y
would be a specific version of the CUDA Toolkit, such as/usr/local/cuda-9.0
orC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
Note
When multiple CUDA Toolkits are installed in the default location of a system (e.g., both
/usr/local/cuda-9.0
and/usr/local/cuda-10.0
exist but the/usr/local/cuda
symbolic link does not exist), this package is marked as not found.There are too many factors involved in making an automatic decision in the presence of multiple CUDA Toolkits being installed. In this situation, users are encouraged to either (1) set
CUDAToolkit_ROOT
or (2) ensure that the correctnvcc
executable shows up in$PATH
forfind_program()
to find.
Options
-
VERSION
-
If specified, describes the version of the CUDA Toolkit to search for.
-
REQUIRED
-
If specified, configuration will error if a suitable CUDA Toolkit is not found.
-
QUIET
-
If specified, the search for a suitable CUDA Toolkit will not produce any messages.
-
EXACT
-
If specified, the CUDA Toolkit is considered found only if the exact
VERSION
specified is recovered.
Imported targets
An imported target named CUDA::toolkit
is provided.
This module defines IMPORTED
targets for each of the following libraries that are part of the CUDAToolkit:
- CUDA Runtime Library
- CUDA Driver Library
- cuBLAS
- cuFFT
- cuRAND
- cuSOLVER
- cuSPARSE
- cuPTI
- NPP
- nvBLAS
- nvGRAPH
- nvJPEG
- nvidia-ML
- nvRTC
- nvToolsExt
- OpenCL
- cuLIBOS
CUDA Runtime Library
The CUDA Runtime library (cudart) are what most applications will typically need to link against to make any calls such as cudaMalloc
, and cudaFree
.
Targets Created:
CUDA::cudart
CUDA::cudart_static
CUDA Driver Library
The CUDA Driver library (cuda) are used by applications that use calls such as cuMemAlloc
, and cuMemFree
. This is generally used by advanced
Targets Created:
CUDA::cuda_driver
CUDA::cuda_driver
cuBLAS
The cuBLAS library.
Targets Created:
CUDA::cublas
CUDA::cublas_static
cuFFT
The cuFFT library.
Targets Created:
CUDA::cufft
CUDA::cufftw
CUDA::cufft_static
CUDA::cufftw_static
cuRAND
The cuRAND library.
Targets Created:
CUDA::curand
CUDA::curand_static
cuSOLVER
The cuSOLVER library.
Targets Created:
CUDA::cusolver
CUDA::cusolver_static
cuSPARSE
The cuSPARSE library.
Targets Created:
CUDA::cusparse
CUDA::cusparse_static
cupti
The NVIDIA CUDA Profiling Tools Interface.
Targets Created:
CUDA::cupti
CUDA::cupti_static
NPP
The NPP libraries.
Targets Created:
-
nppc
:CUDA::nppc
CUDA::nppc_static
-
nppial
: Arithmetic and logical operation functions innppi_arithmetic_and_logical_operations.h
CUDA::nppial
CUDA::nppial_static
-
nppicc
: Color conversion and sampling functions innppi_color_conversion.h
CUDA::nppicc
CUDA::nppicc_static
-
nppicom
: JPEG compression and decompression functions innppi_compression_functions.h
CUDA::nppicom
CUDA::nppicom_static
-
nppidei
: Data exchange and initialization functions innppi_data_exchange_and_initialization.h
CUDA::nppidei
CUDA::nppidei_static
-
nppif
: Filtering and computer vision functions innppi_filter_functions.h
CUDA::nppif
CUDA::nppif_static
-
nppig
: Geometry transformation functions found innppi_geometry_transforms.h
CUDA::nppig
CUDA::nppig_static
-
nppim
: Morphological operation functions found innppi_morphological_operations.h
CUDA::nppim
CUDA::nppim_static
-
nppist
: Statistics and linear transform innppi_statistics_functions.h
andnppi_linear_transforms.h
CUDA::nppist
CUDA::nppist_static
-
nppisu
: Memory support functions innppi_support_functions.h
CUDA::nppisu
CUDA::nppisu_static
-
nppitc
: Threshold and compare operation functions innppi_threshold_and_compare_operations.h
CUDA::nppitc
CUDA::nppitc_static
-
npps
:CUDA::npps
CUDA::npps_static
nvBLAS
The nvBLAS libraries. This is a shared library only.
Targets Created:
CUDA::nvblas
nvGRAPH
The nvGRAPH library.
Targets Created:
CUDA::nvgraph
CUDA::nvgraph_static
nvJPEG
The nvJPEG library. Introduced in CUDA 10.
Targets Created:
CUDA::nvjpeg
CUDA::nvjpeg_static
nvRTC
The nvRTC (Runtime Compilation) library. This is a shared library only.
Targets Created:
CUDA::nvrtc
nvidia-ML
The NVIDIA Management Library. This is a shared library only.
Targets Created:
CUDA::nvml
nvToolsExt
The NVIDIA Tools Extension. This is a shared library only.
Targets Created:
CUDA::nvToolsExt
OpenCL
The NVIDIA OpenCL Library. This is a shared library only.
Targets Created:
CUDA::OpenCL
cuLIBOS
The cuLIBOS library is a backend thread abstraction layer library which is static only. The CUDA::cublas_static
, CUDA::cusparse_static
, CUDA::cufft_static
, CUDA::curand_static
, and (when implemented) NPP libraries all automatically have this dependency linked.
Target Created:
CUDA::culibos
Note: direct usage of this target by consumers should not be necessary.
Result variables
-
CUDAToolkit_FOUND
-
A boolean specifying whether or not the CUDA Toolkit was found.
-
CUDAToolkit_VERSION
-
The exact version of the CUDA Toolkit found (as reported by
nvcc --version
). -
CUDAToolkit_VERSION_MAJOR
-
The major version of the CUDA Toolkit.
-
CUDAToolkit_VERSION_MAJOR
-
The minor version of the CUDA Toolkit.
-
CUDAToolkit_VERSION_PATCH
-
The patch version of the CUDA Toolkit.
-
CUDAToolkit_BIN_DIR
-
The path to the CUDA Toolkit library directory that contains the CUDA executable
nvcc
. -
CUDAToolkit_INCLUDE_DIRS
-
The path to the CUDA Toolkit
include
folder containing the header files required to compile a project linking against CUDA. -
CUDAToolkit_LIBRARY_DIR
-
The path to the CUDA Toolkit library directory that contains the CUDA Runtime library
cudart
. -
CUDAToolkit_TARGET_DIR
-
The path to the CUDA Toolkit directory including the target architecture when cross-compiling. When not cross-compiling this will be equivalant to
CUDAToolkit_ROOT_DIR
. -
CUDAToolkit_NVCC_EXECUTABLE
-
The path to the NVIDIA CUDA compiler
nvcc
. Note that this path may not be the same asCMAKE_CUDA_COMPILER
.nvcc
must be found to determine the CUDA Toolkit version as well as determining other features of the Toolkit. This variable is set for the convenience of modules that depend on this one.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/module/FindCUDAToolkit.html