FindCUDAToolkit

在 3.17 版本中添加。

此脚本定位 NVIDIA CUDA 工具包和相关的库,但不要求为给定项目启用 CUDA 语言。此模块不搜索 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。如果找到,则不会执行后续搜索尝试。用户有责任确保路径中出现的第一个 nvcc 是所需路径,以防安装了多个 CUDA 工具包。

  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 的每个以下库定义了 IMPORTED 目标

CUDA 运行时库

CUDA 运行时库 (cudart) 是大多数应用程序通常需要链接的库,以便进行诸如 cudaMalloccudaFree 之类的调用。

创建的目标

  • CUDA::cudart

  • CUDA::cudart_static

CUDA 驱动库

CUDA 驱动库 (cuda) 供使用诸如 cuMemAlloccuMemFree 之类调用的应用程序使用。

创建的目标

  • 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

NVIDIA CUDA 性能分析工具接口

创建的目标

  • 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

  • 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

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 开始

nvFatBin

在 3.30 版本中添加。

nvFatBin (运行时 fatbin 创建) 库。

创建的目标

  • CUDA::nvfatbin 从 CUDA 12.4 开始

  • CUDA::nvfatbin_static 从 CUDA 12.4 开始

nvidia-ML

NVIDIA 管理库

创建的目标

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

创建的目标

  • CUDA::culibos

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

结果变量

CUDAToolkit_FOUND

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

CUDAToolkit_VERSION

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