【问题标题】:CUDA compile problems on Windows, Cmake error: No CUDA toolset foundWindows 上的 CUDA 编译问题,Cmake 错误:未找到 CUDA 工具集
【发布时间】:2022-01-25 18:27:15
【问题描述】:

所以我已经在我的 Linux 上成功地开发了我的 CUDA 程序,但我也想支持 Windows 平台。但是,我一直在努力正确编译它。我用:

  • Windows 10
  • Cmake 3.15
  • Visual Studio 2017
  • CUDA 工具包 10.1

当使用旧的已弃用 Cmake CUDA 支持 find_package(CUDA 10.1 REQUIRED) 时,它会在使用工具包时正确报告工具包的正确路径。但是,据我了解,最新的 Cmake 不再正确支持旧方法,cuda_add_libraryetc 不再正确链接。所以我根据this 将我的“CMakeLists.txt”文件重新格式化为以下格式:

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(myproject LANGUAGES CXX CUDA)

add_library(mylib SHARED mycudalib.cu)

# My code requires C++ 11 for the CUDA library, not sure which ones of these 
# will do the trick correctly. Never got the compiler this far.
target_compile_features(mylib PUBLIC cxx_std_11)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CUDA_STANDARD 11)    


set_target_properties( mylib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)

add_executable(test_mylib test.cpp)

target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})

但是,我从第 2 行收到以下错误:

CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:345 (message):
  No CUDA toolset found.
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:32 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
  C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCUDACompiler.cmake:72 (CMAKE_DETERMINE_COMPILER_ID)
  CMakeLists.txt:2 (project)

我尝试了各种在线建议,例如将以下内容添加到“CMakeLists.txt”:

set(CMAKE_CUDA_COMPILER "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc")

或将以下变量添加到 Cmake:

这是我在 Linux 上成功编译的“CMakeLists.txt”文件。不同之处在于我使用 Cmake 3.5 和 CUDA Toolkit 9.0:

cmake_minimum_required(VERSION 3.5)
project( myproject)
find_package(CUDA 9.0 REQUIRED)
if(CUDA_FOUND)  
        list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
endif(CUDA_FOUND)

cuda_add_library(mylib SHARED mycudalib.cu)
cuda_add_executable(test_mylib test.cpp)
target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})

【问题讨论】:

    标签: c++ cmake compiler-errors cuda nvcc


    【解决方案1】:

    我现在在另一台 PC 上尝试过它,它工作正常。所以我完全不知道为什么它不适用于这个。由于 CUDA_PATH 在我的系统变量中正确设置。

    然后进一步研究,通过卸载 Visual Studio 的“构建工具”并仅安装社区 IDE,CMake 使用 IDE 而不是构建工具,然后它开始正常工作。

    【讨论】:

    • 我刚刚在构建工具中遇到了同样的问题。如果您想继续安装构建工具,您只需将所有内容从:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\extras\visual_studio_integration\MSBuildExtensions 复制到:C:\Program Files (x86) \Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\BuildCustomizations 根据需要更改这些路径中的 CUDA 和 VS 版本。由于某种原因,CUDA 工具包安装程序在选择添加集成的位置时不会考虑安装构建工具。
    【解决方案2】:

    对于 Windows 10、VS2019 社区和 CUDA 11.3,以下内容对我有用:

    1. 用 7-zip 或 WinZip 解压完整的安装包
    2. 从这个解压目录中复制四个文件.\visual_studio_integration\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions 进入 VS2019 安装的 MSBuild 文件夹C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations

    四个文件分别是:

    • CUDA 11.3.props
    • CUDA 11.3.targets
    • CUDA 11.3.xml
    • Nvda.Build.CudaTasks.v11.3.dll

    我曾尝试使用 Visual Studio Integration 安装(和重新安装)CUDA,但 CMake 无法找到 CUDA 安装(即使定义了 CUDA_PATH 和 CMAKE_CUDA_COMPILER)。

    【讨论】:

    • 请注意,您实际上是从可执行文件(而不是从 7-zip 中提取)安装 CUDA 工具包。然后,在您列出的 CUDA 子文件夹中(例如,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\visual_studio_integration\MSBuildExtensions 用于 CUDA 10.2,您将找到您列出的 4 个文件。您将这些文件复制到您列出的 MS Visual Studio 文件夹中。
    • 哇,这就像一个魅力。你刚刚拯救了我的理智
    【解决方案3】:

    看看这个。它可能会解决您的问题。 https://gitlab.kitware.com/cmake/cmake/issues/19029

    似乎 Nvidia cuda 安装程序在安装 VS 与 2017 的集成时存在一些问题。 检查是否可以在您的 vs 安装路径中找到此文件。

    C:/Program Files (x86)/Microsoft Visual 
    Studio/2017/Professional/Common7/IDE/VC/VCTargets/BuildCustomizations/CUDA 
    10.1.xml
    

    【讨论】:

    • 我的系统上缺少这个文件(好吧,我使用的是 2019,所以它在 C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC\VCTargets 中丢失了)。是否有安装该文件的安装程序选项?
    • 我不知道。最后,我决定改用 VS 2015。到目前为止它运行良好。
    【解决方案4】:

    我试图从源代码构建暗网并遇到了这个问题。

    为我解决了以下问题:

    • 确保没有安装除 VS2019 之外的其他 Visual Studio 或 Visual Studio 构建工具。 (我使用 ~1 mb vs_community.exe 安装程序的卸载功能进行了配置)
    • 使用 2.5 gb 安装程序重新安装 CUDA 10.1,并在此过程中确保安装了“VS 集成”(对我来说……这是一个“重新安装”,因为我已经安装了它,但有一堆VS2019、VS2017 + Build Tools 全部安装一次!!)在安装过程中。

    那时,我的 cudnn 文件仍在 10.1 安装的 bin/lib/include 文件夹中,我再次在 CMake 中点击“配置”。

    成功!没有错误。 (CMake 3.18、VS2019、CUDA 10.1.243、cudnn 7.6.5)

    【讨论】:

      【解决方案5】:

      我只是遇到了相同的问题,即没有发现不同版本的 CUDA 工具集和我的系统:

      -Windows 11 -Cmake 3.20.0 -Visual Studio 2019 -CUDA 工具包 11.6

      有网友说,如果你在安装CUDA之前安装了Visual Studio,就会出现这种情况。所以,我尝试并重新安装了 CUDA,终于它现在可以工作了。你也可以试试。祝你好运。

      enter image description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 2015-09-26
        • 1970-01-01
        • 2017-11-27
        • 2019-11-29
        • 2016-03-06
        相关资源
        最近更新 更多