Windows上的CUDA编译问题,Cmake错误:未找到CUDA工具集

时间:2019-06-17 18:09:36

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

因此,我已经在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_library等也不再正确链接。因此,基于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添加以下变量: 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})

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

看看这个。它可以解决您的问题。 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

答案 2 :(得分:0)

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

为我解决的问题如下:

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

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

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

答案 3 :(得分:0)

对于 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 集成安装(并重新安装)CUDA,但 CMake 无法找到 CUDA 安装(即使定义了 CUDA_PATH 和 CMAKE_CUDA_COMPILER)。