此问题的产生是基于这样一个事实:
先有Visual Studio的每一个版本,才有CUDA的sdk的每一个版本,即CUDA的sdk的开发者,要迁就VS的版本,实现 CUDA Toolkits 对 Visual Studio 的支持。也就是说,在本版本CUDA Toolkits出生后才出生的VS的版本,CUDA Toolkits因不知道未来VS版本的特性,故无法预先支持。
当安装了较旧的cuda驱动,相对较新的visual studio 时,可能会出现cuda驱动中的配置文件不能识别Visual Studio的版本,而导致编译不过。
以VS2017为例子,有多个版本号。当cuda驱动发布时间早已其中的某个版本号时,就无法识别VS的版本。只要手动改一下即可。
例如cuda 9.2.148对VS2017的支持,仅仅到 (Visual Studio 2017 version 15.6),而当你安装了
(Visual Studio 2017 version 15.9),cuda的sdk就无法识别到15.9,会导致编译不过。
解决方法:
方法一,安装更新的cuda驱动;
方法二,把host_config.h文件中的VS2017的版本号改大一点:D:\Program Files\NVIDIAGPUComputingToolkit\CUDA\v9.2\include\crt\host_config.h
//Line 131:
#if _MSC_VER < 1600 || _MSC_VER > 1916// 这里的1916本来为1913,那时候1916版本还未发布
#error -- unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!
#elif _MSC_VER == 1600 /* _MSC_VERION == 1600 */
#pragma message("support for Microsoft Visual Studio 2010 has been deprecated!")
Visual Studio的版本号对应的_MSC_VER值:
MSC 1.0 _MSC_VER == 100
MSC 2.0 _MSC_VER == 200
MSC 3.0 _MSC_VER == 300
MSC 4.0 _MSC_VER == 400
MSC 5.0 _MSC_VER == 500
MSC 6.0 _MSC_VER == 600
MSC 7.0 _MSC_VER == 700
MSVC++ 1.0 _MSC_VER == 800
MSVC++ 2.0 _MSC_VER == 900
MSVC++ 4.0 _MSC_VER == 1000 (Developer Studio 4.0)
MSVC++ 4.2 _MSC_VER == 1020 (Developer Studio 4.2)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)
同时会找不到stdio.h文件等,
解决方法,自己手动在属性中配置VC++包含目录为windows Kits的include目录,
例如Win Kits安装在D盘:
D:\Windows Kits\10\Include\10.0.17763.0\ucrt
|