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
。如果找到,则不会执行后续搜索尝试。用户有责任确保路径中出现的第一个nvcc
是所需路径,以防安装了多个 CUDA 工具包。在 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
的 导入目标。
此模块为 CUDAToolkit 的每个以下库定义了 IMPORTED
目标
CUDA 运行时库¶
CUDA 运行时库 (cudart) 是大多数应用程序通常需要链接的库,以便进行诸如 cudaMalloc 和 cudaFree 之类的调用。
创建的目标
CUDA::cudart
CUDA::cudart_static
CUDA 驱动库¶
CUDA 驱动库 (cuda) 供使用诸如 cuMemAlloc 和 cuMemFree 之类调用的应用程序使用。
创建的目标
CUDA::cuda_driver
cuBLAS¶
cuBLAS 库。
创建的目标
CUDA::cublas
CUDA::cublas_static
CUDA::cublasLt
从 CUDA 10.1 开始CUDA::cublasLt_static
从 CUDA 10.1 开始
cuDLA¶
在 3.27 版本中添加。
NVIDIA Tegra 深度学习加速器 cuDLA 库。
创建的目标
CUDA::cudla
从 CUDA 11.6 开始
cuFile¶
在 3.25 版本中添加。
NVIDIA GPUDirect Storage cuFile 库。
创建的目标
CUDA::cuFile
从 CUDA 11.4 开始CUDA::cuFile_static
从 CUDA 11.4 开始CUDA::cuFile_rdma
从 CUDA 11.4 开始CUDA::cuFile_rdma_static
从 CUDA 11.4 开始
cuFFT¶
cuFFT 库。
创建的目标
CUDA::cufft
CUDA::cufftw
CUDA::cufft_static
CUDA::cufft_static_nocallback
从 CUDA 9.2 开始,需要 CMake 3.23+CUDA::cufftw_static
cuRAND¶
cuRAND 库。
创建的目标
CUDA::curand
CUDA::curand_static
cuSOLVER¶
cuSOLVER 库。
创建的目标
CUDA::cusolver
CUDA::cusolver_static
cuSPARSE¶
cuSPARSE 库。
创建的目标
CUDA::cusparse
CUDA::cusparse_static
cupti¶
创建的目标
CUDA::cupti
CUDA::cupti_static
在 3.27 版本中添加
CUDA::nvperf_host
从 CUDA 10.2 开始CUDA::nvperf_host_static
从 CUDA 10.2 开始CUDA::nvperf_target
从 CUDA 10.2 开始CUDA::pcsamplingutil
从 CUDA 11.3 开始
NPP¶
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¶
nvBLAS 库。这只是一个共享库。
创建的目标
CUDA::nvblas
nvGRAPH¶
nvGRAPH 库。从 CUDA 11.0 开始移除
创建的目标
CUDA::nvgraph
CUDA::nvgraph_static
nvJPEG¶
nvJPEG 库。在 CUDA 10 中引入。
创建的目标
CUDA::nvjpeg
CUDA::nvjpeg_static
nvPTX Compiler¶
在 3.25 版本中添加。
nvPTX (PTX 编译) 库。PTX 编译器 API 是一组 API,可用于将 PTX 程序编译为 GPU 汇编代码。在 CUDA 11.1 中引入。这只是一个静态库。
创建的目标
CUDA::nvptxcompiler_static
从 CUDA 11.1 开始
nvRTC¶
nvRTC (运行时编译) 库。
创建的目标
CUDA::nvrtc
在 3.26 版本中添加
CUDA::nvrtc_builtins
CUDA::nvrtc_static
从 CUDA 11.5 开始CUDA::nvrtc_builtins_static
从 CUDA 11.5 开始
nvJitLink¶
nvJItLink (运行时 LTO 链接) 库。
创建的目标
CUDA::nvJitLink
从 CUDA 12.0 开始CUDA::nvJitLink_static
从 CUDA 12.0 开始
nvFatBin¶
在 3.30 版本中添加。
nvFatBin (运行时 fatbin 创建) 库。
创建的目标
CUDA::nvfatbin
从 CUDA 12.4 开始CUDA::nvfatbin_static
从 CUDA 12.4 开始
nvidia-ML¶
创建的目标
CUDA::nvml
CUDA::nvml_static
从 CUDA 12.4 开始
在 3.31 版本中添加: 添加了 CUDA::nvml_static
。
nvToolsExt¶
在 3.25 版本中已弃用: 对于 CUDA 10.0+,请使用 nvtx3。
NVIDIA 工具扩展。这只是一个共享库。
创建的目标
CUDA::nvToolsExt
nvtx3¶
在 3.25 版本中添加。
仅头文件的 NVIDIA 工具扩展库。在 CUDA 10.0 中引入。
创建的目标
CUDA::nvtx3
OpenCL¶
NVIDIA OpenCL 库。这只是一个共享库。
创建的目标
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 工具包版本以及确定工具包的其他功能。设置此变量是为了方便依赖于此模块的模块。