如何让cmake找到CUDA
How to let cmake find CUDA
我正在尝试构建这个项目,该项目将 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
)
- 编译时未启用intel oneApi CUDA支持
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 在Linux中哪里可以找到互斥、未来等的源代码
- cmake如何在fedora工作站中找到boost静态库包
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 无法找到/读取配置文件.conf-FileIOException
- 在cuda线程之间共享大量常量数据
- 如何找到锁定Linux futex的C++行
- 如何找到大小'x'数组是否完全填充,在C++?
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- CUDA nvlink 警告:未找到 SM 拱门("sm_35")
- 如何让cmake找到CUDA
- 无法在 CUDA 中找到 1 到 100 个数字的简单总和
- 如何找到检测到 Cuda API 错误时程序崩溃的位置:cudaMemcpy 返回 (0xb)
- 在哪里可以找到 cuda 4.1 的 cuda.rule 文件
- CMake 无法正确找到 CUDA 库
- 编译OpenCV时没有找到CUDA库
- CUDA NPP -图像还原-找到所有图像像素的总和/平均值
- CUDA与cmake.没有找到配置文件