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
为所需路径。如果存在符号链接
/usr/local/cuda
,则在 Unix 系统上使用此链接。不执行后续搜索尝试。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
可执行文件出现在find_program()
的$PATH
中以供find()
查找。
Optional¶
[<version>]
[<version>]
参数请求一个版本与之兼容的包找到。有关更多详细信息,请参阅 find_package 版本格式。
一些方法¶
REQUIRED
如果指定,则在未找到合适的 CUDA 工具包时,配置将会出错。
QUIET
如果指定,则搜索合适的 CUDA 工具包不会产生任何消息。
EXACT
如果指定,仅在恢复指定的 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
starting in CUDA 10.1CUDA::cublasLt_static
starting in CUDA 10.1
cuDLA¶
在版本 3.27 中添加。
NVIDIA Tegra Deep Learning Accelerator cuDLA 库。
创建的目标
CUDA::cudla
starting in CUDA 11.6
cuFile¶
在版本 3.25 中添加。
NVIDIA GPUDirect Storage cuFile 库。
创建的目标
CUDA::cuFile
starting in CUDA 11.4CUDA::cuFile_static
starting in CUDA 11.4CUDA::cuFile_rdma
starting in CUDA 11.4CUDA::cuFile_rdma_static
starting in CUDA 11.4
cuFFT¶
cuFFT 库。
创建的目标
CUDA::cufft
CUDA::cufftw
CUDA::cufft_static
CUDA::cufft_static_nocallback
starting in CUDA 9.2, requires 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¶
NVIDIA CUDA Profiling Tools Interface。 NVIDIA CUDA Profiling Tools Interface。
创建的目标
CUDA::cupti
CUDA::cupti_static
在版本 3.27 中添加
CUDA::nvperf_host
starting in CUDA 10.2CUDA::nvperf_host_static
starting in CUDA 10.2CUDA::nvperf_target
starting in CUDA 10.2CUDA::pcsamplingutil
starting in CUDA 11.3
NPP¶
NPP 库。
创建的目标
nppc:
CUDA::nppc
CUDA::nppc_static
nppial:算术和逻辑运算功能在 nppi_arithmetic_and_logical_operations.h 已删除,从 CUDA 11.0 开始使用 nvJPEG。
CUDA::nppial
CUDA::nppial_static
nppicc:颜色转换和采样功能在 nppi_color_conversion.h
CUDA::nppicc
CUDA::nppicc_static
nppicom:JPEG 压缩和解压缩功能在 nppi_compression_functions.h 已删除,从 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 编译)库。从 CUDA 11.1 开始引入 PTX 编译器 API 是可以用以将 PTX 程序编译成 GPU 汇编代码的一组 API。这是一个只静态的库。
创建的目标
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 Toolkit。
CUDAToolkit_VERSION
找到的确切的 CUDA Toolkit 版本(由
nvcc --version
、version.txt
或version.json
报告)。CUDAToolkit_VERSION_MAJOR
CUDA Toolkit 的主要版本。
CUDAToolkit_VERSION_MINOR
CUDA Toolkit 的次要版本。
CUDAToolkit_VERSION_PATCH
CUDA Toolkit 的补丁版本。
CUDAToolkit_BIN_DIR
包含 CUDA 可执行文件
nvcc
的 CUDA Toolkit 库目录路径。CUDAToolkit_INCLUDE_DIRS
包含所有 CUDA Toolkit 文件夹路径的列表,其中包含编译链接至 CUDA 项目所需的头文件。
CUDAToolkit_LIBRARY_DIR
包含 CUDA 运行时库
cudart
的 CUDA Toolkit 库目录路径。CUDAToolkit_LIBRARY_ROOT
在 3.18 版本中添加。
包含 nvvm 目录以及 version.txt 或 version.json 的 CUDA Toolkit 目录路径。
CUDAToolkit_TARGET_DIR
交叉编译时包含目标体系结构的 CUDA Toolkit 目录路径。如果不交叉编译,这将等效于
CUDAToolkit_BIN_DIR
的父目录。CUDAToolkit_NVCC_EXECUTABLE
NVIDIA CUDA 编译器
nvcc
的路径。请注意,此路径可能与CMAKE_CUDA_COMPILER
不同。必须找到nvcc
以确定 CUDA Toolkit 版本,以及确定 Toolkit 的其他特性。此变量的设置是为了方便依赖于此变量的模块。