本文讨论配置VSCode CUDA C/C++的远程开发环境。官方的英文文档对于刚接触CUDA的新人十分劝退,网上没有找到很好的文档,在连续踩了好几天坑的情况下,决定自己写一篇文档记录一下踩坑过程(已经浪费很多时间了,就索性再花点时间记录)最终配置好的环境支持intellisense, 一键编译/调试
为什么选择在Linux开发CUDA?
https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index....
https://docs.nvidia.com/cuda/cuda-installation-guide-microsof...
- 一些调试工具/库,例如CUDA Nsight Eclipse Plugin,⭐CUDA GDB,CUDA cuDLA,仅支持linux
- NVCC 的说明文档中只明确提到支持MSVC(MinGW没有明确说不支持,我也没有尝试,有时间可以试一下),有尝试过安装MSBuildtool,毕竟是商业化的compiler driver,发现配置过程异常繁琐,官方文档语焉不详(MS:我们知道配置过程很麻烦,所以下Visual Studio就好了,233),想要在非VS的环境中调用CL编译命令是一个很痛苦的过程, 官方配置好环境的Powershell也是各种花样报错。
- Visual Studio 太傻瓜,有时候出问题不好判断是IDE的问题还是CUDAToolkit的问题,新手更倾向于自己配置环境
开发环境
本机(host): Win11 i5-1340P 无N卡 VSCode version: 1.86
远程(remote): Ubuntu 22.04 虚拟机
步骤
- 远程机安装CudaToolkit
https://developer.nvidia.com/cuda-downloads
按照自己的处理器架构/系统选择对应包,这里installer type选runfile/deb,为了偷懒节约时间,选runfile
wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda_12.3.2_545.23.08_linux.run
&& sudo sh cuda_12.3.2_545.23.08_linux.run
这一步直到EULA签名没有任何输出,Fail了好几次发现原来是虚拟机磁盘空间不够,解压失败,又去问GPT怎么扩容虚拟磁盘
环境变量设置
这个时候输入nvcc -V提示找不到命令,并不是安装失败了,需要去设置PATH环境变量。在home目录下打开.bashrc,加入下面这两条(需要根据自己环境更改路径)export PATH=/usr/local/cuda-12.3/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH
或者直接用cat追加到.bashrc
这个时候输入nvcc -V$nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on xxx Cuda compilation tools, release 12.3, V12.3.107 Build cuda_12.3.r12.3/compiler.33567101_0
大功告成
- vscode配置
打开vscode插件商店搜索cuda,找到有两个插件
一定一定不要下载第一个,当然下载了也没事,像我一样disable就好了,它会覆盖NVIDIA官方插件的intellisense,也不支持<<<>>>核函数语法,enable之后会影响微软官方的c++插件,甚至vscode本身的逻辑(写cpp文件debug按钮居然消失了),可以说是很坑的一个插件
打开.cu文件,正确识别到文件类型, intellisense开启:
发现只能识别一般的c++语法,不支持cuda的c++ extention,遇到<<<>>>提示error。没错,安装好了官方插件之后还是要去设置.cu文件的property,这里贴出我的配置 (修改自官方SDK https://github.com/NVIDIA/cuda-samples), 需要修改成自己的文件路径,文件名
c_cpp_properties.json,放在项目目录.vscode文件夹下
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/cuda-12.3/include"
],
"defines": [],
"compilerPath": "/usr/local/cuda-12.3/bin/nvcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}
点击编译
已经自动检测到NVCC,选择nvcc配置
如果这一步只显示(gdb)launch, 就需要自己写launch.json和tasks.json