如何让cmake找到CUDA

cls*_*udt 36 c++ cuda build cmake

我正在尝试构建这个项目,它将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)
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试将其添加为环境变量.bashrc,但没有效果:

export CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5
Run Code Online (Sandbox Code Playgroud)

我怎么做对的Specify CUDA_TOOLKIT_ROOT_DIR

Sla*_*ica 51

cmake提到CUDA_TOOLKIT_ROOT_DIR了cmake变量,而不是环境变量.这就是为什么当你把它放入.bashrc时它不起作用的原因.如果你研究FindCUDA.cmake它清楚地说:

如果前缀不能由系统路径中的nvcc位置确定,并且指定了find_package(),则脚本将提示用户指定CUDA_TOOLKIT_ROOT_DIR.要使用不同的已安装版本的工具包,请在运行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或指定CUDA_TOOLKIT_ROOT_DIRcmake:

cmake -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-5.5 ..
Run Code Online (Sandbox Code Playgroud)

  • 你能指定如何为cmake指定`CUDA_TOOLKIT_ROOT_DIR`吗?我通常不是 cmake 用户。 (3认同)
  • @cls 看起来需要可执行的 nvcc。也很可能出于完全相同的原因它无法找到 CUDA 的位置。正确安装 CUDA 后,我敢打赌您将不必手动指定 CUDA_TOOLKIT_ROOT_DIR。 (2认同)

Ash*_*ppa 14

FindCMake.cmake寻找/usr/local/cuda.在您的情况下,该目录可能不在那里.只需在您的实际CUDA安装目录中创建该名称的符号链接:

$ sudo ln -s /usr/local/cuda-5.5 /usr/local/cuda
Run Code Online (Sandbox Code Playgroud)

您的CMake现在应该能够为您的项目生成Makefile.

  • 经过两天的挖掘后,我就把它固定好了.出于某种原因,从apt-get安装cuda没有symlink/cuda和/cuda-8.0 (2认同)

Kje*_*ell 12

也许 CUDA 是从源代码安装的(并且nvcc不在路径中)。然后脚本CUDA_TOOLKIT_ROOT_DIR因为nvcc丢失而无法设置。对我来说,运行后效果很好:

sudo apt install nvidia-cuda-toolkit
Run Code Online (Sandbox Code Playgroud)

(这个包可能需要几个 GiB 空间)


Hop*_*bcn 6

从 CMake 3.8 开始,不推荐使用 FindCUDA,在 CMake 项目中使用 CUDA 的正确方法是通过project()enable_language()

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

  • 这对解决最初的问题没有帮助:如何让 CMake 知道在哪里可以找到 CUDA?使用新方法时这仍然适用。如果说有什么不同的话,那就是新版本在自动查找 CUDA 方面似乎比 FindCUDA 差得多! (3认同)