CUDA 9.1搭配VS2017 15.4.4内核调用语法高亮异常求助
解决VS2017 + CUDA9.1内核调用语法红色下划线问题
我太懂这种烦躁了——明明项目编译完全正常,那碍眼的红色波浪线却总在眼前晃,调试时还容易被误导以为真的有语法错误!这个问题本质是Visual Studio的IntelliSense智能感知对CUDA特有的<<<>>>内核调用语法兼容不佳,尤其是在VS2017早期版本搭配CUDA9.1的组合下。下面是几个亲测有效的解决办法:
1. 切换到Legacy IntelliSense
VS2017的新版IntelliSense对CUDA语法支持不够友好,换回旧版能解决大部分误判问题:
- 打开VS,点击顶部菜单栏的
Tools->Options - 依次展开
Text Editor->C/C++->Advanced - 在右侧找到
IntelliSense区域,把Use Legacy IntelliSense设置为True - 重启VS后,红色下划线大概率会消失
2. 确保CUDA文件被正确识别
如果你的CUDA代码写在.cpp文件里,IntelliSense很容易误判,建议:
- 将包含内核调用或CUDA特有语法的代码移到
.cu文件中 - 右键项目中的
.cu文件,选择Properties,确认Item Type是CUDA C/C++,如果不是手动修改
3. 配置IntelliSense的包含目录
头文件出现类似异常时,大概率是IntelliSense找不到CUDA的标准头文件,导致无法正确解析语法:
- 右键项目 ->
Properties->VC++ Directories - 在
Include Directories中添加CUDA的include路径,比如:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\include - 同样在
Library Directories中添加CUDA的lib路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64(根据你的系统位数选择x86或x64)
4. 用#pragma临时屏蔽IntelliSense警告
如果上面的方法都没解决,还可以针对特定代码行精准屏蔽误报:
在出现红色下划线的代码上下添加:
__pragma(intellisense disable line) kernel<<<gridDim, blockDim>>>(); __pragma(intellisense enable line)
这些方法我在自己的VS2017 15.x版本搭配CUDA9.1时都试过,基本能搞定这个烦人的小问题。
内容的提问来源于stack exchange,提问作者GeekLee
相关产品推荐
相关产品推荐

