FindCUDAToolkit

在 3.17 版本中添加。

查找 NVIDIA CUDA 工具包及相关库,不需要为给定项目启用 CUDA 语言

find_package(CUDAToolkit [<version>] [QUIET] [REQUIRED] [EXACT] [...])

本模块不会搜索 NVIDIA CUDA 示例程序。

3.19 版本新增:支持 QNX。

搜索行为

CUDA 工具包的搜索行为遵循以下顺序

  1. 如果已启用 CUDA 语言,我们将优先使用包含编译器的目录作为 nvcc 的搜索位置。

  2. 如果定义了变量 CMAKE_CUDA_COMPILER 或环境变量 CUDACXX,它将被用作 nvcc 可执行文件的路径。

  3. 如果定义了 CUDAToolkit_ROOT CMake 配置变量(例如 -DCUDAToolkit_ROOT=/some/path环境变量,则会搜索该路径。如果同时指定了环境变量配置变量,配置变量优先级更高。

    此处指定的目录必须能从中找到 nvcc 可执行文件,或相应的 version.txtversion.json 文件。

  4. 如果定义了 CUDA_PATH 环境变量,则会搜索其中的 nvcc

  5. 使用 find_program() 在用户的路径中搜索 nvcc。如果找到,则不再执行后续的搜索尝试。如果系统安装了多个 CUDA 工具包,用户有责任确保路径中出现的第一个 nvcc 是所需的版本。

  6. 在 Unix 系统上,如果存在符号链接 /usr/local/cuda,则使用此路径。不再执行后续的搜索尝试。Windows 平台不存在默认的符号链接位置。

  7. 搜索平台特定的默认安装位置。如果仅找到一个候选路径,则使用该路径。搜索的默认 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.0C:\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) 是大多数应用程序通常需要链接的库,以便进行如 cudaMalloccudaFree 等调用。

创建的目标

  • CUDA::cudart

  • CUDA::cudart_static

CUDA 驱动程序库

CUDA 驱动程序库 (cuda) 供使用 cuMemAlloccuMemFree 等调用的应用程序使用。

创建的目标

  • CUDA::cuda_driver

cuBLAS

CUDA 基本线性代数子程序库。

创建的目标

  • CUDA::cublas

  • CUDA::cublas_static

  • 自 CUDA 10.1 起提供 CUDA::cublasLt

  • 自 CUDA 10.1 起提供 CUDA::cublasLt_static

cuDLA

在 3.27 版本中新增。

NVIDIA Tegra 深度学习加速器库。

创建的目标

  • 自 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 快速傅里叶变换库。

创建的目标

  • CUDA::cufft

  • CUDA::cufftw

  • CUDA::cufft_static

  • 自 CUDA 9.2 起提供 CUDA::cufft_static_nocallback,需要 CMake 3.23+

  • CUDA::cufftw_static

cuRAND

CUDA 随机数生成库。

创建的目标

  • CUDA::curand

  • CUDA::curand_static

cuSOLVER

GPU 加速线性系统求解器库。

创建的目标

  • CUDA::cusolver

  • CUDA::cusolver_static

cuSPARSE

CUDA 稀疏矩阵库。

创建的目标

  • CUDA::cusparse

  • CUDA::cusparse_static

cupti

NVIDIA CUDA 分析工具接口

创建的目标

  • 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

NVIDIA 二维图像和信号处理性能原语库。

创建的目标

  • nppc:

    • CUDA::nppc

    • CUDA::nppc_static

  • nppialnppi_arithmetic_and_logical_operations.h 中的算术和逻辑运算函数

    • CUDA::nppial

    • CUDA::nppial_static

  • nppiccnppi_color_conversion.h 中的色彩转换和采样函数

    • CUDA::nppicc

    • CUDA::nppicc_static

  • nppicomnppi_compression_functions.h 中的 JPEG 压缩和解压缩函数。自 CUDA 11.0 起移除,改用 nvJPEG

    • CUDA::nppicom

    • CUDA::nppicom_static

  • nppideinppi_data_exchange_and_initialization.h 中的数据交换和初始化函数

    • CUDA::nppidei

    • CUDA::nppidei_static

  • nppifnppi_filter_functions.h 中的过滤和计算机视觉函数

    • CUDA::nppif

    • CUDA::nppif_static

  • nppignppi_geometry_transforms.h 中的几何变换函数

    • CUDA::nppig

    • CUDA::nppig_static

  • nppimnppi_morphological_operations.h 中的形态学运算函数

    • CUDA::nppim

    • CUDA::nppim_static

  • nppistnppi_statistics_functions.hnppi_linear_transforms.h 中的统计和线性变换函数

    • CUDA::nppist

    • CUDA::nppist_static

  • nppisunppi_support_functions.h 中的内存支持函数

    • CUDA::nppisu

    • CUDA::nppisu_static

  • nppitcnppi_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 编译器

在 3.25 版本中新增。

PTX 编译器 API。这是一组可用于将 PTX 程序编译为 GPU 汇编代码的 API。引入于 CUDA 11.1,仅作为静态库提供。

创建的目标

  • 自 CUDA 11.1 起提供 CUDA::nvptxcompiler_static

nvRTC

用于 CUDA 的运行时编译库

创建的目标

  • CUDA::nvrtc

3.26 版新增

  • CUDA::nvrtc_builtins

  • 自 CUDA 11.5 起提供 CUDA::nvrtc_static

  • 自 CUDA 11.5 起提供 CUDA::nvrtc_builtins_static

nvFatBin

3.30 版本新增。

Fatbin 创建器 API

创建的目标

  • 自 CUDA 12.4 起提供 CUDA::nvfatbin

  • 自 CUDA 12.4 起提供 CUDA::nvfatbin_static

nvidia-ML

NVIDIA 管理库

创建的目标

  • 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_staticCUDA::cusparse_staticCUDA::cufft_staticCUDA::curand_static 以及 NPP 库(如果已实现)都自动链接此依赖项。

创建的目标

  • CUDA::culibos

注意:使用者通常不需要直接使用此目标。

bin2c

Added in version 4.3.

一个将二进制文件转换为包含字节数组的 C 文件的工具。

创建的目标

  • CUDA::bin2c

结果变量

此模块定义了以下变量

CUDAToolkit_FOUND

一个布尔值,指定是否找到了 CUDA 工具包。

CUDAToolkit_VERSION

找到的 CUDA 工具包的确切版本(由 nvcc --version, version.txtversion.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 工具包版本以及工具包的其他功能。此变量的设置是为了方便依赖本模块的其他模块。