FindCUDAToolkit¶
在 3.17 版本中添加。
查找 NVIDIA CUDA 工具包及相关库,不需要为给定项目启用 CUDA 语言
find_package(CUDAToolkit [<version>] [QUIET] [REQUIRED] [EXACT] [...])
本模块不会搜索 NVIDIA CUDA 示例程序。
3.19 版本新增:支持 QNX。
搜索行为¶
CUDA 工具包的搜索行为遵循以下顺序
如果已启用
CUDA语言,我们将优先使用包含编译器的目录作为nvcc的搜索位置。如果定义了变量
CMAKE_CUDA_COMPILER或环境变量CUDACXX,它将被用作nvcc可执行文件的路径。如果定义了
CUDAToolkit_ROOTCMake 配置变量(例如-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.YWindows
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 一部分的以下每个库提供了 导入目标
CUDA 运行时库¶
CUDA 运行时库 (cudart) 是大多数应用程序通常需要链接的库,以便进行如 cudaMalloc 和 cudaFree 等调用。
创建的目标
CUDA::cudartCUDA::cudart_static
CUDA 驱动程序库¶
CUDA 驱动程序库 (cuda) 供使用 cuMemAlloc 和 cuMemFree 等调用的应用程序使用。
创建的目标
CUDA::cuda_driver
cuBLAS¶
创建的目标
CUDA::cublasCUDA::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::cufftCUDA::cufftwCUDA::cufft_static自 CUDA 9.2 起提供
CUDA::cufft_static_nocallback,需要 CMake 3.23+CUDA::cufftw_static
cuRAND¶
创建的目标
CUDA::curandCUDA::curand_static
cuSOLVER¶
创建的目标
CUDA::cusolverCUDA::cusolver_static
cuSPARSE¶
创建的目标
CUDA::cusparseCUDA::cusparse_static
cupti¶
创建的目标
CUDA::cuptiCUDA::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::nppcCUDA::nppc_static
nppial:nppi_arithmetic_and_logical_operations.h 中的算术和逻辑运算函数
CUDA::nppialCUDA::nppial_static
nppicc:nppi_color_conversion.h 中的色彩转换和采样函数
CUDA::nppiccCUDA::nppicc_static
nppicom:nppi_compression_functions.h 中的 JPEG 压缩和解压缩函数。自 CUDA 11.0 起移除,改用 nvJPEG。
CUDA::nppicomCUDA::nppicom_static
nppidei:nppi_data_exchange_and_initialization.h 中的数据交换和初始化函数
CUDA::nppideiCUDA::nppidei_static
nppif:nppi_filter_functions.h 中的过滤和计算机视觉函数
CUDA::nppifCUDA::nppif_static
nppig:nppi_geometry_transforms.h 中的几何变换函数
CUDA::nppigCUDA::nppig_static
nppim:nppi_morphological_operations.h 中的形态学运算函数
CUDA::nppimCUDA::nppim_static
nppist:nppi_statistics_functions.h 和 nppi_linear_transforms.h 中的统计和线性变换函数
CUDA::nppistCUDA::nppist_static
nppisu:nppi_support_functions.h 中的内存支持函数
CUDA::nppisuCUDA::nppisu_static
nppitc:nppi_threshold_and_compare_operations.h 中的阈值和比较运算函数
CUDA::nppitcCUDA::nppitc_static
npps:
CUDA::nppsCUDA::npps_static
nvBLAS¶
GPU 加速的嵌入式 BLAS 库。仅作为共享库提供。
创建的目标
CUDA::nvblas
nvGRAPH¶
GPU 加速的图形分析库。自 CUDA 11.0 起移除。
创建的目标
CUDA::nvgraphCUDA::nvgraph_static
nvJPEG¶
GPU 加速的 JPEG 编解码器库。引入于 CUDA 10。
创建的目标
CUDA::nvjpegCUDA::nvjpeg_static
nvPTX 编译器¶
在 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::nvtx3CUDA::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
注意:使用者通常不需要直接使用此目标。
bin2c¶
Added in version 4.3.
一个将二进制文件转换为包含字节数组的 C 文件的工具。
创建的目标
CUDA::bin2c
结果变量¶
此模块定义了以下变量
CUDAToolkit_FOUND一个布尔值,指定是否找到了 CUDA 工具包。
CUDAToolkit_VERSION找到的 CUDA 工具包的确切版本(由
nvcc --version,version.txt或version.json报告)。CUDAToolkit_VERSION_MAJORCUDA 工具包的主版本号。
CUDAToolkit_VERSION_MINORCUDA 工具包的次版本号。
CUDAToolkit_VERSION_PATCHCUDA 工具包的补丁版本号。
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_EXECUTABLENVIDIA CUDA 编译器
nvcc的路径。请注意,此路径可能与CMAKE_CUDA_COMPILER不同。必须找到nvcc才能确定 CUDA 工具包版本以及工具包的其他功能。此变量的设置是为了方便依赖本模块的其他模块。