FindCUDAToolkit¶
在 3.17 版本中添加。
此脚本用于定位 NVIDIA CUDA 工具包和相关库,但不要求为给定项目启用 CUDA
语言。此模块不搜索 NVIDIA CUDA 示例。
3.19 版本新增:QNX 支持。
搜索行为¶
CUDA 工具包的搜索行为遵循以下顺序:
如果已启用
CUDA
语言,我们将使用包含编译器的目录作为nvcc
的第一个搜索位置。如果定义了变量
CMAKE_CUDA_COMPILER
或环境变量CUDACXX
,则将其用作nvcc
可执行文件的路径。如果定义了
CUDAToolkit_ROOT
cmake 配置变量(例如,-DCUDAToolkit_ROOT=/some/path
)或环境变量,则会进行搜索。如果同时指定了环境变量和配置变量,则配置变量优先。此处指定的目录必须能够在该指定目录下找到可执行文件
nvcc
或相应的version.txt
或version.json
文件。如果定义了 CUDA_PATH 环境变量,则会在其中搜索
nvcc
。使用
find_program()
在用户路径中搜索nvcc
。如果找到,则不会执行后续搜索尝试。如果安装了多个 CUDA 工具包,用户有责任确保路径中出现的第一个nvcc
是所需的路径。在 Unix 系统上,如果符号链接
/usr/local/cuda
存在,则使用它。不会执行后续搜索尝试。Windows 平台没有默认的符号链接位置。搜索特定于平台的默认安装位置。如果只找到一个候选,则使用它。搜索的默认 CUDA 工具包安装位置是:
平台
搜索模式
macOS
/Developer/NVIDIA/CUDA-X.Y
其他 Unix
/usr/local/cuda-X.Y
Windows
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
其中
X.Y
是 CUDA 工具包的特定版本,例如/usr/local/cuda-9.0
或C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
注意
当系统默认位置安装了多个 CUDA 工具包时(例如,
/usr/local/cuda-9.0
和/usr/local/cuda-10.0
都存在,但/usr/local/cuda
符号链接不存在),此软件包被标记为未找到。在安装了多个 CUDA 工具包的情况下,自动决策涉及的因素太多。在这种情况下,鼓励用户 (1) 设置
CUDAToolkit_ROOT
,或 (2) 确保正确的nvcc
可执行文件出现在$PATH
中以便find_program()
查找。
参数¶
[<version>]
[<version>]
参数请求一个与找到的软件包兼容的版本。有关更多详细信息,请参见find_package 版本格式。
选项¶
REQUIRED
如果指定,如果未找到合适的 CUDA 工具包,配置将出错。
QUIET
如果指定,搜索合适的 CUDA 工具包将不会产生任何消息。
EXACT
如果指定,仅当恢复到指定的精确
VERSION
时,CUDA 工具包才被视为已找到。
导入的目标¶
提供了一个名为 CUDA::toolkit
的导入目标。
此模块为 CUDA 工具包的以下每个库定义了 IMPORTED
目标:
CUDA 运行时库¶
CUDA 运行时库 (cudart) 是大多数应用程序通常需要链接的库,用于进行诸如 cudaMalloc 和 cudaFree 之类的调用。
创建的目标
CUDA::cudart
CUDA::cudart_static
CUDA 驱动库¶
CUDA 驱动库 (cuda) 用于使用诸如 cuMemAlloc 和 cuMemFree 之类调用的应用程序。
创建的目标
CUDA::cuda_driver
cuBLAS¶
创建的目标
CUDA::cublas
CUDA::cublas_static
从 CUDA 10.1 开始,
CUDA::cublasLt
从 CUDA 10.1 开始,
CUDA::cublasLt_static
cuDLA¶
在 3.27 版本中新增。
创建的目标
从 CUDA 11.6 开始,
CUDA::cudla
cuFile¶
在 3.25 版本中新增。
NVIDIA GPUDirect Storage cuFile 库。
创建的目标
从 CUDA 11.4 开始,
CUDA::cuFile
从 CUDA 11.4 开始,
CUDA::cuFile_static
从 CUDA 11.4 开始,
CUDA::cuFile_rdma
从 CUDA 11.4 开始,
CUDA::cuFile_rdma_static
cuFFT¶
创建的目标
CUDA::cufft
CUDA::cufftw
CUDA::cufft_static
从 CUDA 9.2 开始,
CUDA::cufft_static_nocallback
,需要 CMake 3.23+CUDA::cufftw_static
cuRAND¶
创建的目标
CUDA::curand
CUDA::curand_static
cuSOLVER¶
创建的目标
CUDA::cusolver
CUDA::cusolver_static
cuSPARSE¶
创建的目标
CUDA::cusparse
CUDA::cusparse_static
cupti¶
创建的目标
CUDA::cupti
CUDA::cupti_static
3.27 版本新增
从 CUDA 10.2 开始,
CUDA::nvperf_host
从 CUDA 10.2 开始,
CUDA::nvperf_host_static
从 CUDA 10.2 开始,
CUDA::nvperf_target
从 CUDA 11.3 开始,
CUDA::pcsamplingutil
NPP¶
创建的目标
nppc:
CUDA::nppc
CUDA::nppc_static
nppial:nppi_arithmetic_and_logical_operations.h 中的算术和逻辑操作函数
CUDA::nppial
CUDA::nppial_static
nppicc:nppi_color_conversion.h 中的颜色转换和采样函数
CUDA::nppicc
CUDA::nppicc_static
nppicom:nppi_compression_functions.h 中的 JPEG 压缩和解压缩函数。从 CUDA 11.0 开始移除,请改用nvJPEG。
CUDA::nppicom
CUDA::nppicom_static
nppidei:nppi_data_exchange_and_initialization.h 中的数据交换和初始化函数
CUDA::nppidei
CUDA::nppidei_static
nppif:nppi_filter_functions.h 中的过滤和计算机视觉函数
CUDA::nppif
CUDA::nppif_static
nppig:nppi_geometry_transforms.h 中找到的几何变换函数
CUDA::nppig
CUDA::nppig_static
nppim:nppi_morphological_operations.h 中找到的形态学操作函数
CUDA::nppim
CUDA::nppim_static
nppist:nppi_statistics_functions.h 和 nppi_linear_transforms.h 中的统计和线性变换
CUDA::nppist
CUDA::nppist_static
nppisu:nppi_support_functions.h 中的内存支持函数
CUDA::nppisu
CUDA::nppisu_static
nppitc:nppi_threshold_and_compare_operations.h 中的阈值和比较操作函数
CUDA::nppitc
CUDA::nppitc_static
npps:
CUDA::npps
CUDA::npps_static
nvBLAS¶
GPU 加速的即插即用 BLAS 库。这是一个仅共享库。
创建的目标
CUDA::nvblas
nvGRAPH¶
GPU 加速的图分析库。从 CUDA 11.0 开始移除
创建的目标
CUDA::nvgraph
CUDA::nvgraph_static
nvJPEG¶
GPU 加速的 JPEG 编解码器库。在 CUDA 10 中引入。
创建的目标
CUDA::nvjpeg
CUDA::nvjpeg_static
nvPTX Compiler¶
在 3.25 版本中新增。
PTX 编译器 API。这是一组可用于将 PTX 程序编译为 GPU 汇编代码的 API。在 CUDA 11.1 中引入。这是一个仅静态库。
创建的目标
从 CUDA 11.1 开始,
CUDA::nvptxcompiler_static
nvRTC¶
创建的目标
CUDA::nvrtc
3.26 版新增
CUDA::nvrtc_builtins
从 CUDA 11.5 开始,
CUDA::nvrtc_static
从 CUDA 11.5 开始,
CUDA::nvrtc_builtins_static
nvJitLink¶
创建的目标
从 CUDA 12.0 开始,
CUDA::nvJitLink
从 CUDA 12.0 开始,
CUDA::nvJitLink_static
nvFatBin¶
3.30 版本新增。
创建的目标
从 CUDA 12.4 开始,
CUDA::nvfatbin
从 CUDA 12.4 开始,
CUDA::nvfatbin_static
nvidia-ML¶
创建的目标
CUDA::nvml
从 CUDA 12.4 开始,
CUDA::nvml_static
3.31 版本新增:新增 CUDA::nvml_static
。
nvToolsExt¶
自 3.25 版本弃用:对于 CUDA 10.0+,请使用nvtx3。从 CUDA 12.9 开始,nvToolsExt 库不再存在
旧版 NVIDIA 工具扩展。这是一个仅共享库。
创建的目标
CUDA::nvToolsExt
nvtx3¶
在 3.25 版本中新增。
仅头文件的NVIDIA 工具扩展库。在 CUDA 10.0 中引入。
创建的目标
CUDA::nvtx3
CUDA::nvtx3_interop
在 4.1 版本中新增。
此功能由 CUDA 12.9 及更高版本提供,供无法使用 C++ 仅头文件库的语言(例如
Fortran
)使用。
OpenCL¶
NVIDIA Open Computing Language 库。这是一个仅共享库。
创建的目标
CUDA::OpenCL
cuLIBOS¶
cuLIBOS 库是一个后端线程抽象层库,仅为静态库。CUDA::cublas_static
、CUDA::cusparse_static
、CUDA::cufft_static
、CUDA::curand_static
和 (如果实现) NPP 库都自动链接此依赖项。
创建的目标
CUDA::culibos
注意:消费者通常不需要直接使用此目标。
结果变量¶
CUDAToolkit_FOUND
一个布尔值,指定是否找到 CUDA 工具包。
CUDAToolkit_VERSION
找到的 CUDA 工具包的精确版本(由
nvcc --version
、version.txt
或version.json
报告)。CUDAToolkit_VERSION_MAJOR
CUDA 工具包的主版本。
CUDAToolkit_VERSION_MINOR
CUDA 工具包的次版本。
CUDAToolkit_VERSION_PATCH
CUDA 工具包的补丁版本。
CUDAToolkit_BIN_DIR
包含 CUDA 可执行文件
nvcc
的 CUDA 工具包库目录的路径。CUDAToolkit_INCLUDE_DIRS
所有包含编译链接 CUDA 项目所需头文件的 CUDA 工具包文件夹的路径列表。
CUDAToolkit_LIBRARY_DIR
包含 CUDA 运行时库
cudart
的 CUDA 工具包库目录的路径。CUDAToolkit_LIBRARY_ROOT
在 3.18 版本中新增。
包含 nvvm 目录以及 version.txt 或 version.json 的 CUDA 工具包目录的路径。
CUDAToolkit_TARGET_DIR
CUDA 工具包目录的路径,包括交叉编译时的目标架构。在非交叉编译时,这将等同于
CUDAToolkit_BIN_DIR
的父目录。CUDAToolkit_NVCC_EXECUTABLE
NVIDIA CUDA 编译器
nvcc
的路径。请注意,此路径可能不与CMAKE_CUDA_COMPILER
相同。nvcc
必须被找到才能确定 CUDA 工具包版本以及工具包的其他特性。此变量的设置是为了方便依赖此模块的模块。