引子
我这几天使用GeForce Experience
更新显卡驱动到最新版本,发现cuda版本也随之自动从12.2更新到最新的12.6版本。
为了验证cuda是否能正常工作,我打开了之前写的cuda程序打算编译测试一下,发现无法编译,主要报错
1 |
|
搜索了以下网页后确定了问题
- nerfstudio#3171
- nerfstudio#3157
- CUDA compatibility with Visual Studio 2022 version 17.10 - Stack Overflow
锁定到了问题所在。
问题所在
在我的Microsoft Visual Studio Community 2022 (64 位) 版本 17.11.0
(下简称VS2022
)中,_MSC_VER
宏的值被设置为1941
,在12.6版本的cuda中,限制了_MSC_VER
的版本号在[1910,1940)
中才能正常编译,这导致最顶版本的VS2022
其实是不能搭配最新版的cuda使用的太新了。似乎没有在12.6的release notes中发现相关问题描述。
而根据此Issue,在12.5版本中此版本允许的范围是[1910,1950)
,放宽了宏检查,虽然不知道这是为了什么才在新版本限制一个较小的范围的。总之我的VS2022
能通过宏检查,经过测试后所以可以正常编译运行cuda程序。
解决方案
将cuda降级版本到12.5.1即可。
注意
卸载重装后原有cuda项目可能无法识别,可能需要重新创建一个新版本的cuda项目重新配置。