Windows系统下,在Visual Studio 里配置CUDA环境网上已经有很多资料了,而在轻量级IDE VScode上编译CUDA的材料不是很多,本篇博文将简要介绍在Windows 系统下配置CUDA环境的方法。
一、VScode插件 code-runner法
在VScode里安装插件——coder-runner,在settings.json里添加(win10下的)
"code-runner.executorMap": {
"cu": "cd $dir; nvcc $fileName -o $fileNameWithoutExt.exe -I'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.0\\include' && $dir$fileNameWithoutExt"
}, // 右键
win7下的(注意win7 和win 10 下的不太一样,之前的博文里有提到过)
"code-runner.executorMap": {
"cu": "cd $dir && nvcc $fileName -o $fileNameWithoutExt.exe -I'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.0\\include' && $dir$fileNameWithoutExt"
}, // 右键
注意:这里的settings.json 是当前工作目录 .vscode 目录下(没有自己创建,自己写也可以)的设置文件,是局部的,如果需要全局通用的话,则转到全局settings.json 文件里修改。
上面的命令里比较关键的地方在于 nvcc——指定编译器(这里直接使用是因为已经在系统环境变量里添加了nvcc的地址了,否则这里需要把nvcc所在的路径写全),其次 -I (大写的i)为指定include文件路径,用 ' 而不是 " 是因为语句已经被 " "包含了。此外如果还需要使用链接库的话,还需要加
-l 和 -L
来分别指定需要的库名称,和库所在的位置。具体参考博文:https://www.cnblogs.com/shrimp-can/p/5567518.html
按照上面的方法应该是可以在win下编译cuda文件为可执行文件并运行,不过也有可能在编译的时候 会以gcc/g++的方式进行编译,这时候需要看一下 在系统settigns.json 文件里 是否将. c/.cpp 与.cu 进行关联了,如果是的话,要么取消关联,但是这个时候,就无法享用.c/.cpp 带来的的语法高亮的便利,还用一种办法就是把上面"code-runner.executorMap" 中关于c或者cpp的执行命令语句全部 注销掉。这里给出我使用的settings.json,仅供参考。
{
"files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言
"editor.formatOnType": false, // 输入分号(C/C++的语句结束标识)后自动格式化当前这一行的代码
"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了
"editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense
// "editor.snippetSuggestions": "top", // (可选)snippets显示在补全列表顶端,默认是inline
"code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,无法输入
"code-runner.executorMap": {
// "c": "cd $dir && gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'",
//"cpp": "cd $dir && g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'"
//"c": "cd $dir ; gcc $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt",
//"cpp": "cd $dir; g++ $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && $dir$fileNameWithoutExt",
"c": "cd $dir; nvcc $fileName -o $fileNameWithoutExt.exe -I'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.0\\include' && $dir$fileNameWithoutExt"
}, // 右键run code时运行的命令;未注释的仅适用于PowerShell(Win10默认),文件名中有空格也可以编译运行;注释掉的适用于cmd(win7默认),PS和bash也能用,但文件名中有空格时无法运行
"code-runner.saveFileBeforeRun": true, // run code前保存
"code-runner.preserveFocus": true, // 若为false,run code后光标会聚焦到终端上。如果需要频繁输入数据可设为false
"code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false
"code-runner.ignoreSelection": true, // 默认为false,效果是鼠标选中一块代码后可以单独执行,但C是编译型语言,不适合这样用
// "terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
//"terminal.integrated.shell.windows": "powershell.exe",
"C_Cpp.clang_format_sortIncludes": true, // 格式化时调整include的顺序(按字母排序)
}
二、手动输入命令的方法
这种方法更接近在linux系统下的使用方法,要在环境变量中增加cl.exe的路径,不然会报错,具体的
1.在vscode里打开终端
2.输入命令
nvcc -o main -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include" main.cu
3.输入 ./main 即可执行
这里的nvcc ,-I 与前面的解释类似。
其实,不一定非要在vscode终端里执行,也可以在cmd或者powershell里执行 类似的命令,具体可以自己探索一下。
windows在vscode里配置环境稍微麻烦一点,linux下比较方便是因为在 .bashrc 文件里已经配置好了 PATH 和LD_LIBRARY_PATH 。
参考链接:
1.https://blog.csdn.net/u012435142/article/details/102651892
2.https://www.cnblogs.com/shrimp-can/p/5567518.html
额外补充一点,可以直接使用 MS VS工具切换到指定目录下执行,
参考 https://www.cnblogs.com/kileyi/p/5492253.html 打开, 本机工具命令提示符,然后cd 到cu文件所在目录
,直接执行 nvcc -o test test.cu也行,因为这个VS自带的工具已经提前配置好了环境。