【问题标题】:CMake cannot find newer CUDA package?CMake 找不到更新的 CUDA 包?
【发布时间】:2017-10-01 17:16:37
【问题描述】:

我同时安装了 CUDA 7.5 和 8.0 版本,但 cmake 似乎只能找到 7.5 版本。运行此代码:

find_package(CUDA 8.0 REQUIRED)

给出这个错误:

CMake Error at P:/Program Files/CMake/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find CUDA: Found unsuitable version "7.5", but required is at
  least "8.0" (found C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5)

即使 v8.0 与 v7.5 位于同一目录中。这是cmake的问题,还是我在这里做错了什么?

【问题讨论】:

    标签: compilation cmake cuda


    【解决方案1】:
    1. 无论您安装了多少个 CUDA 工具包,find_package(CUDA) 都会在环境变量 $PATH 中找到具有 nvcc(通常位于 <CUDA root dir>/bin)的工具包。如果$PATH 中有多个nvcc,它将拾取第一个。在 Windows 上,安装程序通常会自动添加相关的环境变量,因此找到的版本取决于安装顺序。

    2. 您不应该再使用find_package(CUDA),因为 CMake 现在对 CUDA 具有一流的支持。

    详情查看:

    【讨论】:

      【解决方案2】:

      您可以通过在 CMake 命令行中设置 CUDA_TOOLKIT_ROOT_DIR 标志来显式地为 CMake 提供 CUDA 的路径:

      cmake -DCUDA_TOOLKIT_ROOT_DIR=<path-to-cuda-8.0>.

      CUDA 版本检测由 CMake 的 findCUDA 函数完成: https://cmake.org/cmake/help/v3.0/module/FindCUDA.html

      可能由于某种原因,findCUDA 搜索无法找到您已安装的 CUDA 8.0。
      可能是 CUDA_BIN_PATH 设置为 7.5,因此 CMake 选择了它。

      【讨论】:

      • 你的意思是我必须使用 CMakelists 中的“set”命令来设置它吗?我是 CMake 的新手,但我认为使用它的全部意义在于避免手动设置内容?
      • 您可以在 CMake 的命令行中设置 CUDA 标志 - 我编辑了答案以澄清。是的,理想情况下,CMake 应该会自动为您找到包,但在这种情况下,当安装了多个 CUDA 版本时,CMake 的 CUDA 搜索可能会出现一些问题。
      • 看来,CMake 会选择它找到的第一个 CUDA 版本,然后检查该版本是否与 CMakeLists.txt 中指定的版本匹配(而不是继续搜索指定的版本)。
      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 2015-11-27
      • 1970-01-01
      • 2013-11-27
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多