Windows下的CUDA编译问题,Cmake错误:找不到CUDA工具集。

11

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

  • Windows 10
  • Cmake 3.15
  • Visual Studio 2017
  • CUDA Toolkit 10.1

当使用旧的弃用Cmake CUDA支持方式 find_package(CUDA 10.1 REQUIRED) 时,它会正确地报告工具包的路径。然而,据我的理解,最新的Cmake不再正确支持旧方法,并且cuda_add_library等方法不能正确链接。因此,我根据这篇文章重格式化了我的'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})

然而,在第二行我遇到了以下错误:
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中添加以下变量:

enter image description here

这是我在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})
8个回答

17
针对 Windows 10、VS2019 Community 和 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
我已尝试(并重新安装)CUDA 和 Visual Studio Integration,但 CMake 无法找到 CUDA 安装(即使定义了 CUDA_PATH 和 CMAKE_CUDA_COMPILER)。

4
请注意,您实际上需要从可执行文件安装CUDA工具包(而不是从7-zip中提取)。然后,在您列出的CUDA子文件夹中(例如,对于CUDA 10.2,C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.2 \ extras \ visual_studio_integration \ MSBuildExtensions),您将找到您列出的4个文件。您需要将这些文件复制到您列出的MS Visual Studio文件夹中。 - A. Hendry

11

我现在已经在另一台电脑上尝试过了,它可以正常工作。因此,我完全不知道为什么它在这台电脑上无法正常工作,因为我的系统变量中已正确设置了CUDA_PATH。

随后,进一步调查发现,通过卸载Visual Studio的'Build Tools'并只安装Community IDE,CMake使用IDE而不是Build Tools,然后它开始正常工作。


12
我遇到了与构建工具相同的问题。如果你想要保留构建工具的安装,只需将以下所有内容复制到: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\BuildCustomizations 来源路径为: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\extras\visual_studio_integration\MSBuildExtensions根据需要更改路径中的 CUDA 和 VS 版本。由于某种原因,CUDA 工具包安装程序在选择添加集成环境的位置时未考虑构建工具的安装。 - Matthew Dixon
复制步骤后,错误仍然存在。有没有人发现了其他的限制条件或解决方法? - ROS

3

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

Nvidia cuda安装程序在使用vs 2017时,与VS集成存在一些问题。 请检查您的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”中不存在)。是否有安装程序选项可以安装该文件? - user2023370
我毫无头绪。最后,我决定只使用VS 2015,到目前为止它运行得非常好。 - Neng Qian

3

我尝试从源代码构建 darknet,并遇到了这个问题。

对我有帮助的是以下内容:

  • 确保除 VS2019 外未安装其他 Visual Studio 或 Visual Studio Build 工具。 (我使用 ~1 mb vs_community.exe 安装程序的卸载功能进行配置)
  • 重新安装 CUDA 10.1,使用 2.5 gb 的安装程序,在该过程中确保安装了“VS Integration”(对我来说...这是一次“重新安装”,因为我已经安装了它,但与一堆 VS2019、VS2017 和构建工具一起安装!)

此时,我的 cudnn 文件仍位于 10.1 安装的 bin/lib/include 文件夹中,然后我再次点击 CMake 中的“Configure”。

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


2

我遇到了与不同版本相同的问题,即找不到CUDA工具集,并且我的系统环境如下:

-Windows 11 -Cmake 3.20.0 -Visual Studio 2019 -CUDA Toolkit 11.6

有些网友说如果您在安装CUDA之前安装了Visual Studio,则会出现此问题。因此,我尝试并重新安装了CUDA,最终它现在可以使用了。您也可以尝试一下。祝好运。

进入图像描述


1
我遇到了类似的问题,可能@James的说法是正确的,只是Visual Studio和CUDA集成不匹配。我按照@bjacobowski的解决方案进行操作。供以后参考,我集成了CUDA 12.1和Visual Studio 2022社区版。
  • 我从C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\visual_studio_integration\MSBuildExtensions复制了四个文件。
  • 然后粘贴到C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations中。

是的,确认复制这四个文件可以解决VS2020的问题。 - undefined

0
对于其他遇到类似问题的人,我终于意识到了我的问题所在!我的cuda工具集是x64的,但是我的cmake构建脚本默认尝试构建x86的。通过在我的cmake命令中添加-A x64来解决了这个问题。在我特定的情况下,我正在构建llama.cpp,我的命令是:
cmake .. -DLLAMA_CUBLAS=ON -A x64

0
对于那些与CMake和CUDA作斗争的人来说,我解决这个问题的方法是在CMake命令中添加以下内容:
-DCMAKE_GENERATOR_TOOLSET="cuda=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2"

除了将4个VS集成文件(从C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2\extras\visual_studio_integration\MSBuildExtensions)复制到以下两个位置:
  • C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\BuildCustomizations
  • C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations
在完成上述步骤后,CMake与CUDA兼容并开始编译。我没有重新安装CUDA或其他任何东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接