当前位置: 首页 > news >正文

(二)CUDA在Windows系统上的编译运行方法

前言

本文记录cuda库在windows系统上的编译运行的3种方式,主要包括命令行编译、VisualStudio2017编译、VSCode上编译等。

一、windows环境下CUDA环境配置

1.下载MinGW以使用GCC编译器

下载MinGW链接:https://github.com/msys2/msys2-installer/releases
选择下如下版本:

居中图片

下载后的安装程序:

居中图片

msys2安装完成后,启动弹出终端后,安装MinGW-w64工具链:
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

居中图片

直接回车确认安装所有的工具链。

居中图片
  安装完成后,打开安装MSYS2目录,找到bin目录,并添加到系统环境变量中Path。
居中图片
居中图片

打开cmd中确认编译环境是否安装好:
 gcc --version  g++ --version  gdb --version

居中图片

2.安装NIVIDIA显卡驱动和CUDA ToolKit

参考文档:CUDA和cudnn库安装
安装完成后,这里把bin目录(E:\Program Files\NVIDACUDA\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin)加到环境变量中,cmd打开测试安装环境。

居中图片
居中图片
我的电脑GPU型号:nvidia GEFORCE GT 640M  CUDA驱动版本:CUDA10.1 (版本号425.31) CUDA Toolkit版本:10.0 (算力3.0)

3.命令行测试自己的编译环境

创建hello.cpp文件,测试安装的g++编译器:

#include <cstdlib>
#include <stdio.h>int main(void)
{printf("Hello World!\n");system("pause");return 0;
}

命令行:g++ hello.cpp -o hellocpp

生成hellocpp.exe,点开输出:

创建hellocuda.cu文件,测试cuda的nvcc编译器:

#include <cstdlib>
#include <stdio.h>
#include "cuda_runtime.h"__global__ void hello_from_gpu()
{printf("Hello World from the GPU!\n");
}int main()
{hello_from_gpu<<<2, 4>>>();cudaDeviceSynchronize();system("pause");return 0;
}

命令行:nvcc hellocuda.cu -o hellocuda

生成:hellocuda.exe文件,点开程序运行结果如下:

居中图片

至此,在windows下的cuda编译环境已没有问题。如果在linux上编译就不需要另外下载MinGw,可在linux上单独安装cuda toolkit,由于电脑GPU限制只能安装较低版本,实际安装时会“CUDA10.0已停止主流支持”问题,所以本文主要是windows系统下编译。

二、在VS2017上配置编译cuda代码

1.在VS2017上新建项目

visual Studio C++下载地址:免费的开发人员软件和服务 - Visual Studio费的开发人员软件和服务 - Visual Studio

我使用的是Visual Studio Community 2017版本,下载安装后,新建项目:
文件-->新建项目 -->选择CUDA10.0-->输入名称,选择位置-->点击确定

居中图片

注意:我这里使用vs2017,是因为cuda10.1最高只支持2017版本,如果你的cuda版本高可以选择更新的VS版本。可以参考:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#compiling-sample-projects

点击确定后,工程项目中会自动生成一个kernel.cu源文件。

居中图片

2.添加自己的文件

有以下几种方式处理kernel.cu
a.直接在kernel.cu文件中修改,删除或增加代码,编译将其作为唯一核函数运行
b.将kernel.cu重命名为其它文件,可清除内容,写自己的代码
c.项目中移除kernel.cu文件,并将另一个文件imfipG.cu添加到项目中

这里使用第3种。提前把imfipG.cu放入到项目中,在项目中移除kernel.cu文件,并添加文件,选择现有项。(imflipG.cu也可以换成前面的hellocuda.cu文件)

居中图片

3.配置项目环境属性

第一步:右建项目,打开属性页,这里选择编译配置release x64;

居中图片

第二步:设置包含目录include目录。

居中图片

第三步:设置cuda的包含链接库路径和lib库
设置cuda代码链接库目录,链接器->常规->附加库目录(添加安装路径:E:\Program Files\NVIDACUDA\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64, 这里也可以使用相对路径)

居中图片
 输入->附加依赖项   添加lib库:cudart_static.lib kernel32.lib  (需要其他的库可后续添加)
居中图片

第四步:修改计算能力,如下图中默认值是35,暂时不做修改,我使用的cuda10.1计算能力为3.0,这里需要改成30(如果设置为35计算会出错)。

居中图片

4.生成可执行文件并测试
回到项目,鼠标右键点击项目,点击“生成”,可以发现编译成功:

居中图片

生成文件如下:

居中图片

在VS2017中直接F5启动项目,可得到结果:

居中图片

注意,这里使用的imflipG文件中main函数是带有形参传入的,需要在属性页面设置命令行输入的参数,如下图是输入了4个参数。如果是使用hellocuda.cu文件,main函数参数列表是空,这里可忽略。

居中图片

三、在VSCode中配置编译cuda代码

1.在vscode中安装插件

基于Windows系统,需要在cuda中下载C/C++和 Nsight Visual Studio Code Edition这两个插件。参考官方文档说明:  https://marketplace.visualstudio.com/items?itemName=NVIDIA.nsight-vscode-edition

直接在VScode左侧栏中搜索以下两个插件下载。

居中图片居中图片
插件官方说明:https://marketplace.visualstudio.com/items?itemName=NVIDIA.nsight-vscode-edition

2.  在VScode中调试CUDA程序

第一步:重启VSCode软件,打开带有.cu文件的文件夹,可以右下角状态栏自动识别为cuda程序,且在编写程序时可以自动链接相关cuda函数库补全代码

第二步:添加task.json、launch.json文件,如果是初始启动或调试会自动生成,修改这两个文件如下:
task.json:
image

launch.json:
image
第三步:点击左边三角形编译运行:
成功运行结果:

居中图片

这里存在的问题:打端点调试的话,程序并不会停在断点处?可能有更好的方法来解决。另外运行过程中如果报错,按照错误提示修改即可,比如报错:nvcc fatal : Cannot find compiler 'cl.exe' in PATH!,添加对应的路径到系统变量中就好。
image

解决方法:查询cl.exe的路径添加到环境变量中:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64!
检查环境变量设置成功:

居中图片

3.我踩的坑:

问题1:Nsight VSCE插件版本问题
需要避坑的是这里下载的Nsight VSCE插件默认最新版本,所以需要点进去下载与你cuda对应的版本。
此处提供最老的版本是2021版本,存在的问题是,虽然下载了nsight组件,但和我的cuda toolkit 10.0并不匹配,需要下一个6.0版本的nsight组件。然而官网没有低版本的VSIX插件文件下载。
官网下载nsight链接:https://developer.nvidia.com/tools-downloads#?dn=nsight-visual-studio-edition-6-0-0

问题2:launch.json中配置“cuda-gdb”调试方法,启动时实际上会报错

居中图片
再次打断点调试显示如下错误:(报错原因:cuda-gdb调试器仅支持Linux平台)
居中图片

遇到这个问题时,因我gpu硬件限制和nsight插件版本不对应,所以不知道是我nsIght版本问题导致还是nsight插件调试只支持linux平台上使用,上一步能编译成功主要是设置"cppvsdbg"编译器而非“cuda-gdb”的原因。

http://www.hskmm.com/?act=detail&tid=32675

相关文章:

  • 关于价值原语与AI元人文构想的对话全记录——DeepSeek研究
  • 关于价值原语与AI元人文构想的对话全记录
  • 升鲜宝生鲜配送供应链管理系统,辅助开发工具,《多语言自动翻译与导出工具(WinForms版)》开发文档 及 阿里云机器翻译,数据库Mysql .net 全部源代码
  • MySQL学习
  • 植物大战僵尸全系列下载 PVZ植物大战僵尸全集版分享下载 原版民间修改版含安卓手机+电脑+ios各平台
  • 10.17
  • Pytorch66页实验题
  • Excel学习
  • 记一次激活Jetbrains全家桶流程
  • uni-app x开发商城系统,商品列表
  • PySimpleGUI 中有没有类似VB的timer组件
  • 【填坑】电脑用户名有中文字符,如何与github建立SSH连接
  • 数据采集第一次作业
  • 向量空间与子空间
  • 西工大开源 Easy Turn:全双工轮次转换检测模型;百度 MuseSteamer 引入开放世界生成能力丨日报
  • 10/16
  • 2025.10.16总结
  • 日常生活中的AI应用记录-2
  • containerd二进制安装
  • 维修笔记 | 一例滤波电容老化引发开关电源异常现象
  • (一)GPU与CUDA概述
  • 实验1 面向对象程序设计C++
  • 练习篇:第一次markdown成果展示
  • 微软已停止对 Windows 10 系统的支持
  • DirectX RayTracing (3) 程序图元及复杂光照
  • NiN模型
  • 2025秋_13
  • 2023 ICPC Hefei
  • 斑马日记2025.10.16
  • 可能是 ICPC2025 西安站游记