CUDA compile problems on Windows, Cmake error: No CUDA toolset found
CUDA compile problems on Windows, Cmake error: No CUDA toolset found
所以我已经在我的 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
etc 不再正确支持 link。所以我根据 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})
我现在已经在另一台 PC 上试过了,效果很好。所以我完全不知道为什么它对这个不起作用。由于 CUDA_PATH 在我的系统变量中设置正确。
然后进一步调查,通过卸载 Visual Studio 的 'Build Tools' 并仅安装社区 IDE,CMake 使用 IDE 而不是构建工具然后它开始正常工作。
看看这个。它可能会解决您的问题。
https://gitlab.kitware.com/cmake/cmake/issues/19029
似乎 Nvidia cuda 安装程序在安装 VS 与 vs 2017 的集成时遇到了一些问题。
检查你的vs安装路径下是否能找到这个文件
C:/Program Files (x86)/Microsoft Visual
Studio/2017/Professional/Common7/IDE/VC/VCTargets/BuildCustomizations/CUDA
10.1.xml
我试图从源代码构建暗网并遇到了这个问题。
为我解决的问题如下:
- 确保没有安装除 VS2019 之外的其他 Visual Studio 或 Visual Studio 构建工具。 (我使用 ~1 mb vs_community.exe 安装程序的卸载功能配置了它)
- 重新安装 CUDA 10.1,使用 2.5 gb 安装程序,并在该过程中确保安装了 'VS Integration'(对我来说...这是一个 'reinstall',因为我已经安装了它,但是在安装过程中一次安装了一堆 VS2019,VS2017 + 构建工具!!)。
那时,我的 cudnn 文件还在 10.1 安装的 bin/lib/include 文件夹中,我再次在 CMake 中点击“配置”。
成功!没有错误。 (CMake 3.18, VS2019, CUDA 10.1.243, cudnn 7.6.5)
对于 Windows10、VS2019 社区和 CUDA 11.3,以下对我有用:
- 使用 7-zip 或 WinZip 解压完整安装包
- 从这个提取的目录中复制四个文件
.\visual_studio_integration\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions
进入 VS2019 安装的 MSBuild 文件夹 C:\Program Files (x86)\Microsoft Visual Studio19\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)。
我只是遇到了同样的问题,No CUDA toolset found with different versions,我的系统:
-Windows 11
-CMake 3.20.0
-Visual Studio 2019
-CUDA 工具包 11.6
有网友说在安装CUDA之前先安装Visual Studio就会出现这种情况。所以,我尝试重新安装 CUDA,现在终于可以使用了。你也可以试试。祝你好运。
enter image description here
所以我已经在我的 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
etc 不再正确支持 link。所以我根据 this:
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})
我现在已经在另一台 PC 上试过了,效果很好。所以我完全不知道为什么它对这个不起作用。由于 CUDA_PATH 在我的系统变量中设置正确。
然后进一步调查,通过卸载 Visual Studio 的 'Build Tools' 并仅安装社区 IDE,CMake 使用 IDE 而不是构建工具然后它开始正常工作。
看看这个。它可能会解决您的问题。 https://gitlab.kitware.com/cmake/cmake/issues/19029
似乎 Nvidia cuda 安装程序在安装 VS 与 vs 2017 的集成时遇到了一些问题。 检查你的vs安装路径下是否能找到这个文件
C:/Program Files (x86)/Microsoft Visual
Studio/2017/Professional/Common7/IDE/VC/VCTargets/BuildCustomizations/CUDA
10.1.xml
我试图从源代码构建暗网并遇到了这个问题。
为我解决的问题如下:
- 确保没有安装除 VS2019 之外的其他 Visual Studio 或 Visual Studio 构建工具。 (我使用 ~1 mb vs_community.exe 安装程序的卸载功能配置了它)
- 重新安装 CUDA 10.1,使用 2.5 gb 安装程序,并在该过程中确保安装了 'VS Integration'(对我来说...这是一个 'reinstall',因为我已经安装了它,但是在安装过程中一次安装了一堆 VS2019,VS2017 + 构建工具!!)。
那时,我的 cudnn 文件还在 10.1 安装的 bin/lib/include 文件夹中,我再次在 CMake 中点击“配置”。
成功!没有错误。 (CMake 3.18, VS2019, CUDA 10.1.243, cudnn 7.6.5)
对于 Windows10、VS2019 社区和 CUDA 11.3,以下对我有用:
- 使用 7-zip 或 WinZip 解压完整安装包
- 从这个提取的目录中复制四个文件
.\visual_studio_integration\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions
进入 VS2019 安装的 MSBuild 文件夹C:\Program Files (x86)\Microsoft Visual Studio19\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)。
我只是遇到了同样的问题,No CUDA toolset found with different versions,我的系统:
-Windows 11 -CMake 3.20.0 -Visual Studio 2019 -CUDA 工具包 11.6
有网友说在安装CUDA之前先安装Visual Studio就会出现这种情况。所以,我尝试重新安装 CUDA,现在终于可以使用了。你也可以试试。祝你好运。
enter image description here