找到CUDA工具包

在 3.17 版本加入.

此脚本定位 NVIDIA CUDA 工具包和相关库,但不需要为给定项目启用 CUDA 语言。此模块不搜索 NVIDIA CUDA 示例。

在 3.19 版本加入: QNX 支持。

搜索行为

CUDA 工具包搜索行为使用以下顺序:

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

  2. 如果定义了 CUDAToolkit_ROOT cmake 配置变量(例如,-DCUDAToolkit_ROOT=/some/path)*或*环境变量,它将被搜索。如果同时指定了环境变量 ** 和 ** 配置变量,则 configuration 变量优先。

    此处指定的目录必须能够在指定目录下找到可执行的 nvcc 或适当的 version.txtversion.json 文件。

  3. 如果定义了 CUDA_PATH 环境变量,则会搜索“nvcc”。

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

  5. 在 Unix 系统上,如果符号链接“/usr/local/cuda”存在,则使用它。不会执行后续搜索尝试。 Windows 平台不存在默认符号链接位置。

  6. 搜索特定于平台的默认安装位置。如果恰好找到一个候选者,则使用它。搜索的默认 CUDA 工具包安装位置是:

    平台

    搜索模式

    苹果系统

    /Developer/NVIDIA/CUDA-X.Y

    其他Unix

    /usr/local/cuda-X.Y

    视窗

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y

    其中 X.Y 是 CUDA 工具包的特定版本,例如 /usr/local/cuda-9.0``C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.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>] 参数请求找到的包应该兼容的版本。有关详细信息,请参阅 find_package 版本格式

选项

需要

如果指定,如果找不到合适的 CUDA 工具包,配置将出错。

安静

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

精确

如果指定,则只有在恢复指定的确切“VERSION”时,才认为找到了 CUDA 工具包。

导入目标

提供了名为 CUDA::toolkitimported target

该模块为以下属于 CUDAToolkit 的每个库定义 IMPORTED 目标:

CUDA 运行库

大多数应用程序通常需要链接 CUDA 运行时库 (cudart) 以进行任何调用,例如 cudaMalloccudaFree

目标创建:

  • CUDA::cudart

  • CUDA::cudart_static

CUDA 驱动程序库

CUDA 驱动程序库 (cuda) 由使用“cuMemAlloc”和“cuMemFree”等调用的应用程序使用。

目标创建:

  • CUDA::cuda_driver

立方体

cuBLAS 库。

目标创建:

  • CUDA::cublas

  • CUDA::cublas_static

  • CUDA::cublasLt 从 CUDA 10.1 开始

  • CUDA::cublasLt_static 从 CUDA 10.1 开始

文件

在 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 库。

目标创建:

  • CUDA::cufft

  • CUDA::cufftw

  • CUDA::cufft_static

  • CUDA::cufft_static_nocallback 从 CUDA 9.2 开始,需要 CMake 3.23+

  • CUDA::cufftw_static

curRAND

cuRAND 库。

目标创建:

  • CUDA::curand

  • CUDA::curand_static

求解器

cuSOLVER 库。

目标创建:

  • CUDA::cusolver

  • CUDA::cusolver_static

cuSPARSE

cuSPARSE 库。

目标创建:

  • CUDA::cusparse

  • CUDA::cusparse_static

杯子

NVIDIA CUDA 分析工具界面

目标创建:

  • CUDA::cupti

  • CUDA::cupti_static

核电厂

NPP 库。

目标创建:

  • nppc

    • CUDA::nppc

    • CUDA::nppc_static

  • nppial`nppi_arithmetic_and_logical_operations.h`中的算术和逻辑运算函数

    • CUDA::nppial

    • CUDA::nppial_static

  • nppicc`nppi_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

  • nppig:在 nppi_geometry_transforms.h 中找到的几何变换函数

    • CUDA::nppig

    • CUDA::nppig_static

  • nppim:在 nppi_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

  • nppitc`nppi_threshold_and_compare_operations.h`中的阈值和比较操作函数

    • CUDA::nppitc

    • CUDA::nppitc_static

  • npps

    • CUDA::npps

    • CUDA::npps_static

nvBLAS

nvBLAS 库。这只是一个共享库。

目标创建:

  • CUDA::nvblas

图表

nvGRAPH 库。从 CUDA 11.0 开始删除

目标创建:

  • CUDA::nvgraph

  • CUDA::nvgraph_static

nvJPEG格式

nvJPEG 库。在 CUDA 10 中引入。

目标创建:

  • CUDA::nvjpeg

  • CUDA::nvjpeg_static

nvPTX 编译器

在 3.25 版本加入.

`nvPTX <https://docs.nvidia.com/cuda/ptx-compiler-api/index.html>`_(PTX 编译)库。 PTX 编译器 API 是一组 API,可用于将 PTX 程序编译为 GPU 汇编代码。在 CUDA 11.1 中引入 这只是一个静态库。

目标创建:

  • CUDA::nvptxcompiler_static 从 CUDA 11.1 开始

nvRTC

`nvRTC <https://docs.nvidia.com/cuda/nvrtc/index.html>`_(运行时编译)库。这只是一个共享库。

目标创建:

  • CUDA::nvrtc

在 3.26 版本加入:

  • CUDA::nvrtc_builtins

  • CUDA::nvrtc_static 从 CUDA 11.5 开始

  • CUDA::nvrtc_builtins_static 从 CUDA 11.5 开始

nvidia-ML

NVIDIA 管理库。这只是一个共享库。

目标创建:

  • CUDA::nvml

nvToolsExt

自 3.25 版本弃用: 对于 CUDA 10.0+,使用 nvtx3

NVIDIA 工具扩展。这只是一个共享库。

目标创建:

  • CUDA::nvToolsExt

nvtx3

在 3.25 版本加入.

仅标头的`NVIDIA 工具扩展库 <https://nvidia.github.io/NVTX/doxygen/index.html>`_。在 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 Toolkit include 文件夹的路径,其中包含编译链接到 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 工具包版本以及确定工具包的其他功能。设置此变量是为了方便依赖于此变量的模块。