FindCUDAToolkit¶
在 3.17 版本中添加。
查找 NVIDIA CUDA 工具包和相关库,但不需要为给定项目启用 CUDA 语言
find_package(CUDAToolkit [<version>] [QUIET] [REQUIRED] [EXACT] [...])
此模块不搜索 NVIDIA CUDA 示例。
版本 3.19 中已添加: QNX 支持。
搜索行为¶
CUDA 工具包搜索行为按以下顺序进行
如果已启用
CUDA语言,我们将使用包含编译器的目录作为查找nvcc的第一个搜索位置。如果定义了变量
CMAKE_CUDA_COMPILER或环境变量CUDACXX,则它将被用作nvcc可执行文件的路径。如果定义了 cmake 配置变量
CUDAToolkit_ROOT(例如,-DCUDAToolkit_ROOT=/some/path)**或**环境变量,则会进行搜索。如果同时指定了环境变量 **和** 配置变量,则**配置**变量具有优先权。此处指定的目录必须能够在此目录下方找到
nvcc可执行文件或相应的version.txt或version.json文件。如果定义了 CUDA_PATH 环境变量,则会搜索它以查找
nvcc。使用
find_program()在用户的 PATH 中搜索nvcc。如果找到,则不再执行后续搜索。如果系统中安装了多个 CUDA 工具包,用户有责任确保 PATH 中出现的第一个nvcc是所需的路径。在 Unix 系统上,如果存在符号链接
/usr/local/cuda,则使用它。不再执行后续搜索。Windows 平台没有默认符号链接位置。搜索平台特定的默认安装位置。如果找到且仅找到一个候选者,则使用它。搜索的默认 CUDA 工具包安装位置为
平台
搜索模式
macOS
/Developer/NVIDIA/CUDA-X.Y其他 Unix
/usr/local/cuda-X.YWindows
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y其中
X.Y是 CUDA 工具包的具体版本,例如/usr/local/cuda-9.0或C:\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) 是大多数应用程序需要链接以调用 cudaMalloc、cudaFree 等函数所需的部分。
创建的目标
CUDA::cudartCUDA::cudart_static
CUDA 驱动库¶
CUDA 驱动库 (cuda) 用于使用 cuMemAlloc、cuMemFree 等函数的应用程序。
创建的目标
CUDA::cuda_driver
cuBLAS¶
该库是 CUDA 基本线性代数子程序。
创建的目标
CUDA::cublasCUDA::cublas_staticCUDA::cublasLt从 CUDA 10.1 开始提供CUDA::cublasLt_static从 CUDA 10.1 开始提供
cuDLA¶
在 3.27 版本中新增。
该库是 NVIDIA Tegra 深度学习加速器。
创建的目标
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¶
该库是 CUDA 快速傅里叶变换。
创建的目标
CUDA::cufftCUDA::cufftwCUDA::cufft_staticCUDA::cufft_static_nocallback从 CUDA 9.2 开始提供,需要 CMake 3.23+CUDA::cufftw_static
cuRAND¶
该库是 CUDA 随机数生成。
创建的目标
CUDA::curandCUDA::curand_static
cuSOLVER¶
这是一个 GPU 加速线性系统求解器 库。
创建的目标
CUDA::cusolverCUDA::cusolver_static
cuSPARSE¶
该库是 CUDA 稀疏矩阵。
创建的目标
CUDA::cusparseCUDA::cusparse_static
cupti¶
创建的目标
CUDA::cuptiCUDA::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¶
创建的目标
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¶
该库是 GPU 加速的即插即用 BLAS 库。它仅为共享库。
创建的目标
CUDA::nvblas
nvGRAPH¶
这是一个 GPU 加速图分析 库。从 CUDA 11.0 开始已移除
创建的目标
CUDA::nvgraphCUDA::nvgraph_static
nvJPEG¶
这是一个 GPU 加速 JPEG 编解码器 库。于 CUDA 10 中引入。
创建的目标
CUDA::nvjpegCUDA::nvjpeg_static
nvPTX 编译器¶
在 3.25 版本中新增。
这是 PTX 编译器 API。它们是一组 API,可用于将 PTX 程序编译为 GPU 汇编代码。于 CUDA 11.1 中引入。它仅为静态库。
创建的目标
CUDA::nvptxcompiler_static从 CUDA 11.1 开始提供
nvRTC¶
这是一个 用于 CUDA 的运行时编译库。
创建的目标
CUDA::nvrtc
3.26 版新增
CUDA::nvrtc_builtinsCUDA::nvrtc_static从 CUDA 11.5 开始提供CUDA::nvrtc_builtins_static从 CUDA 11.5 开始提供
nvJitLink¶
这是 JIT 链接 API。
创建的目标
CUDA::nvJitLink从 CUDA 12.0 开始提供CUDA::nvJitLink_static从 CUDA 12.0 开始提供
nvFatBin¶
3.30 版本新增。
这是 Fatbin 创建者 API。
创建的目标
CUDA::nvfatbin从 CUDA 12.4 开始提供CUDA::nvfatbin_static从 CUDA 12.4 开始提供
nvidia-ML¶
这是 NVIDIA 管理库。
创建的目标
CUDA::nvmlCUDA::nvml_static从 CUDA 12.4 开始提供
版本 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::nvtx3CUDA::nvtx3_interop在 4.1 版本中新增。
此项由 CUDA 12.9 及更高版本提供,供无法使用 C++ 头文件库的语言(如
Fortran)使用。
OpenCL¶
这是 NVIDIA 开放计算语言 库。它仅为共享库。
创建的目标
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_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_EXECUTABLENVIDIA CUDA 编译器
nvcc的路径。请注意,此路径可能与CMAKE_CUDA_COMPILER**不**相同。必须找到nvcc才能确定 CUDA 工具包的版本以及确定工具包的其他功能。此变量是为了方便依赖此模块的其他模块而设置的。