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. 在 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() 能夠找到。

引數

[<版本>]

[<版本>] 引數會要求找到的套件應相容的版本。請參閱 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 編譯器

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 工具組函式庫目錄的路徑,其中包含 CUDA 可執行檔 nvcc

CUDAToolkit_INCLUDE_DIRS

所有包含編譯連結 CUDA 專案所需標頭檔的 CUDA 工具組資料夾的路徑清單。

CUDAToolkit_LIBRARY_DIR

CUDA 工具組函式庫目錄的路徑,其中包含 CUDA 執行期函式庫 cudart

CUDAToolkit_LIBRARY_ROOT

於 3.18 版本新增。

CUDA 工具組目錄的路徑,其中包含 nvvm 目錄以及 version.txt 或 version.json。

CUDAToolkit_TARGET_DIR

當進行跨編譯時,包含目標架構的 CUDA 工具組目錄路徑。當不進行跨編譯時,這將等同於 CUDAToolkit_BIN_DIR 的父目錄。

CUDAToolkit_NVCC_EXECUTABLE

NVIDIA CUDA 編譯器 nvcc 的路徑。請注意,此路徑可能與 CMAKE_CUDA_COMPILER **不同** 。必須找到 nvcc 才能判斷 CUDA 工具組版本以及判斷工具組的其他功能。設定此變數是為了方便依賴此變數的模組。