如何让cmake找到CUDA

How to let cmake find CUDA

本文关键字:找到 CUDA cmake      更新时间:2023-10-16

我正在尝试构建这个项目,该项目将 CUDA 作为依赖项。但是 cmake 脚本在系统上找不到 CUDA 安装:

cls ~/workspace/gpucluster/cluster/build $ cmake ..
-- The C compiler identification is GNU 4.7.1
-- The CXX compiler identification is GNU 4.7.1
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at /usr/share/cmake/Modules/FindCUDA.cmake:488 (message):
  Specify CUDA_TOOLKIT_ROOT_DIR
Call Stack (most recent call first):
  CMakeLists.txt:20 (find_package)

-- 配置不完整,发生错误!

我尝试将其作为环境变量添加到.bashrc,但无效:

export CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5

如何正确Specify CUDA_TOOLKIT_ROOT_DIR

cmake提到CUDA_TOOLKIT_ROOT_DIR作为cmake变量,而不是环境变量。这就是为什么当你把它放到 .bashrc 中时它不起作用的原因。如果你查看FindCUDA.cmake,它清楚地表明:

该脚本将提示用户指定前缀CUDA_TOOLKIT_ROOT_DIR 无法由 NVCC 在系统路径中的位置确定,并且是必需的 指定为 find_package()。要使用其他已安装版本的 工具包在运行 CMAKE 之前设置环境变量CUDA_BIN_PATH (例如 CUDA_BIN_PATH=/usr/local/cuda1.0 而不是默认的/usr/local/cuda) 或在配置后设置CUDA_TOOLKIT_ROOT_DIR。 如果更改 CUDA_TOOLKIT_ROOT_DIR,依赖于路径的各种组件将是 搬迁。

因此,CUDA_BIN_PATH放入 .bashrc 或指定要 cmake CUDA_TOOLKIT_ROOT_DIR

cmake -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5 ..

FindCMake.cmake查找/usr/local/cuda 。在您的情况下,该目录可能不存在。只需创建一个该名称的符号链接到您的实际 CUDA 安装目录:

$ sudo ln -s /usr/local/cuda-5.5 /usr/local/cuda

您的 CMake 现在应该能够为您的项目生成生成文件。

也许 CUDA 是从源代码安装的(并且nvcc不在路径中)。然后脚本无法设置CUDA_TOOLKIT_ROOT_DIR因为缺少nvcc。对我来说,运行后工作正常:

sudo apt install nvidia-cuda-toolkit

(此包可能需要几 GiB 的空间)

从 CMake 3.8 开始,FindCUDA 已被弃用,在 CMake 项目中使用 CUDA 的正确方法是通过 project()enable_language()启用它

https://cmake.org/cmake/help/v3.8/release/3.8.html#cuda

在终端中,键入 nano ~/.bashrc 。然后将以下行添加到文件中:

export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/lib
export CPLUS_INCLUDE_PATH=/usr/local/cuda/include

保存文件,然后在终端中键入source ~/.bashrc

您可以通过在终端中键入 nvcc --version 来验证是否已设置 CUDA 路径。

就我而言,我必须使 /usr/lib/cuda 指向实际的 CUDA 安装。所以我做到了:

ln -s /usr/lib/cuda /home/nvidia_libraries/cuda_10.2

我在我的主文件夹中本地安装了 cuda_10.2,而不是系统范围。

设置project后,您可以按照@Hopobcn建议使用enable_language(CUDA)。然后,您可以将 env 变量CUDACXX设置为指向要使用的版本的 nvcc(f.e. export CUDACXX=/usr/local/cuda-11.8/bin/nvcc