找到CUDA工具包¶
在 3.17 版本加入.
此脚本定位 NVIDIA CUDA 工具包和相关库,但不需要为给定项目启用 CUDA 语言。此模块不搜索 NVIDIA CUDA 示例。
在 3.19 版本加入: QNX 支持。
搜索行为¶
CUDA 工具包搜索行为使用以下顺序:
如果启用了
CUDA语言,我们将使用包含编译器的目录作为nvcc的第一个搜索位置。如果定义了
CUDAToolkit_ROOTcmake 配置变量(例如,-DCUDAToolkit_ROOT=/some/path)*或*环境变量,它将被搜索。如果同时指定了环境变量 ** 和 ** 配置变量,则 configuration 变量优先。此处指定的目录必须能够在指定目录下找到可执行的
nvcc或适当的version.txt或version.json文件。如果定义了 CUDA_PATH 环境变量,则会搜索“nvcc”。
使用
find_program()在用户路径中搜索nvcc。如果找到,则不会执行后续搜索尝试。如果安装了多个 CUDA 工具包,用户有责任确保出现在路径中的第一个nvcc是所需的路径。在 Unix 系统上,如果符号链接“/usr/local/cuda”存在,则使用它。不会执行后续搜索尝试。 Windows 平台不存在默认符号链接位置。
搜索特定于平台的默认安装位置。如果恰好找到一个候选者,则使用它。搜索的默认 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::toolkit 的 imported target。
该模块为以下属于 CUDAToolkit 的每个库定义 IMPORTED 目标:
CUDA 运行库¶
大多数应用程序通常需要链接 CUDA 运行时库 (cudart) 以进行任何调用,例如 cudaMalloc 和 cudaFree。
目标创建:
CUDA::cudartCUDA::cudart_static
CUDA 驱动程序库¶
CUDA 驱动程序库 (cuda) 由使用“cuMemAlloc”和“cuMemFree”等调用的应用程序使用。
目标创建:
CUDA::cuda_driver
立方体¶
cuBLAS 库。
目标创建:
CUDA::cublasCUDA::cublas_staticCUDA::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::cufftCUDA::cufftwCUDA::cufft_staticCUDA::cufft_static_nocallback从 CUDA 9.2 开始,需要 CMake 3.23+CUDA::cufftw_static
curRAND¶
cuRAND 库。
目标创建:
CUDA::curandCUDA::curand_static
求解器¶
cuSOLVER 库。
目标创建:
CUDA::cusolverCUDA::cusolver_static
cuSPARSE¶
cuSPARSE 库。
目标创建:
CUDA::cusparseCUDA::cusparse_static
杯子¶
目标创建:
CUDA::cuptiCUDA::cupti_static
核电厂¶
NPP 库。
目标创建:
nppc:
CUDA::nppcCUDA::nppc_static
nppial:`nppi_arithmetic_and_logical_operations.h`中的算术和逻辑运算函数
CUDA::nppialCUDA::nppial_static
nppicc:`nppi_color_conversion.h`中的颜色转换和采样函数
CUDA::nppiccCUDA::nppicc_static
nppicom:nppi_compression_functions.h 中的 JPEG 压缩和解压缩函数从 CUDA 11.0 开始删除,改用 nvJPEG。
CUDA::nppicomCUDA::nppicom_static
nppidei:nppi_data_exchange_and_initialization.h 中的数据交换和初始化函数
CUDA::nppideiCUDA::nppidei_static
nppif:nppi_filter_functions.h 中的过滤和计算机视觉功能
CUDA::nppifCUDA::nppif_static
nppig:在 nppi_geometry_transforms.h 中找到的几何变换函数
CUDA::nppigCUDA::nppig_static
nppim:在 nppi_morphological_operations.h 中找到的形态学操作函数
CUDA::nppimCUDA::nppim_static
nppist:nppi_statistics_functions.h 和 nppi_linear_transforms.h 中的统计和线性变换
CUDA::nppistCUDA::nppist_static
nppisu:nppi_support_functions.h 中的内存支持函数
CUDA::nppisuCUDA::nppisu_static
nppitc:`nppi_threshold_and_compare_operations.h`中的阈值和比较操作函数
CUDA::nppitcCUDA::nppitc_static
npps:
CUDA::nppsCUDA::npps_static
nvBLAS¶
nvBLAS 库。这只是一个共享库。
目标创建:
CUDA::nvblas
图表¶
nvGRAPH 库。从 CUDA 11.0 开始删除
目标创建:
CUDA::nvgraphCUDA::nvgraph_static
nvJPEG格式¶
nvJPEG 库。在 CUDA 10 中引入。
目标创建:
CUDA::nvjpegCUDA::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_builtinsCUDA::nvrtc_static从 CUDA 11.5 开始CUDA::nvrtc_builtins_static从 CUDA 11.5 开始
nvJitLink¶
`nvJItLink <https://docs.nvidia.com/cuda/>`_(运行时 LTO 链接)库。
目标创建:
CUDA::nvJitLink从 CUDA 12.0 开始CUDA::nvJitLink_static从 CUDA 12.0 开始
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_static、CUDA::cusparse_static、CUDA::cufft_static、CUDA::curand_static 和(在实现时)NPP 库都会自动链接此依赖项.
目标创建:
CUDA::culibos
注意:消费者没有必要直接使用这个目标。
结果变量¶
CUDAToolkit_FOUND指定是否找到 CUDA 工具包的布尔值。
CUDAToolkit_VERSION找到的 CUDA 工具包的确切版本(由
nvcc --version、version.txt或version.json报告)。CUDAToolkit _VERSION_ MAJORCUDA 工具包的主要版本。
CUDAToolkit _VERSION_ MINORCUDA 工具包的次要版本。
CUDAToolkit _VERSION_ PATCHCUDA 工具包的补丁版本。
CUDAToolkit_BIN_DIR包含 CUDA 可执行文件“nvcc”的 CUDA 工具包库目录的路径。
CUDAToolkit_INCLUDE_DIRSCUDA Toolkit
include文件夹的路径,其中包含编译链接到 CUDA 的项目所需的头文件。CUDAToolkit_LIBRARY_DIR包含 CUDA 运行时库“cudart”的 CUDA 工具包库目录的路径。
CUDAToolkit_LIBRARY_ROOT在 3.18 版本加入.
包含 nvvm 目录和 version.txt 或 version.json 的 CUDA 工具包目录的路径。
CUDAToolkit_TARGET_DIRCUDA 工具包目录的路径,包括交叉编译时的目标体系结构。当不交叉编译时,这将等同于
CUDAToolkit_BIN_DIR的父目录。CUDAToolkit_NVCC_EXECUTABLENVIDIA CUDA 编译器“nvcc”的路径。请注意,此路径可能**不**与
CMAKE_CUDA_COMPILER相同。必须找到nvcc以确定 CUDA 工具包版本以及确定工具包的其他功能。设置此变量是为了方便依赖于此变量的模块。