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。如果找到此文件,则不执行后续搜索尝试。在已安装多个 CUDA 工具包的情况下,用户负责确保在路径中显示的第一个 nvcc 为所需路径。

  6. 如果存在符号链接 /usr/local/cuda,则在 Unix 系统上使用此链接。不执行后续搜索尝试。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 可执行文件出现在 find_program()$PATH 中以供 find() 查找。

Optional

[<version>]

[<version>] 参数请求一个版本与之兼容的包找到。有关更多详细信息,请参阅 find_package 版本格式

一些方法

REQUIRED

如果指定,则在未找到合适的 CUDA 工具包时,配置将会出错。

QUIET

如果指定,则搜索合适的 CUDA 工具包不会产生任何消息。

EXACT

如果指定,仅在恢复指定的 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 starting in CUDA 10.1

  • CUDA::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.4

  • CUDA::cuFile_static starting in CUDA 11.4

  • CUDA::cuFile_rdma starting in CUDA 11.4

  • CUDA::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.2

  • CUDA::nvperf_host_static starting in CUDA 10.2

  • CUDA::nvperf_target starting in CUDA 10.2

  • CUDA::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.hnppi_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 开始

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 Toolkit。

CUDAToolkit_VERSION

找到的确切的 CUDA Toolkit 版本(由 nvcc --versionversion.txtversion.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 的其他特性。此变量的设置是为了方便依赖于此变量的模块。