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

Windows系统中在VSCode上配置CUDA环境

前置步骤

  • 安装符合GPU型号的CUDA Toolkit
    • 配置好 nvcc 环境变量
  • 安装 Visual Studio
    • 参考https://blog.csdn.net/Cony_14/article/details/137510909
  • VSCode 安装插件
    • Nsight Visual Studio Code Edition
    • vscode-cudacpp
  • 安装 cmake 并配置好环境变量

:Windows 端笔者暂时没找到直接在VSCode中直接调试的方法,不过在Visual Studio中可以。

方法一:配置tasks和launch文件

  • 文件-打开文件夹-选择.cu文件所在目录
  • 点开侧边栏运行与调试按钮,点击创建launch.json文件,选择环境为CUDA C++(CUDA-GDB)
  • 文件夹根目录下生成了一个.vscode目录,里面生成了一个launch.json文件
  • 手动在.vscode目录下创建tasks.json文件

tasks.json文件内容如下:

{"version": "2.0.0","tasks": [{"label": "mynvcc","type": "shell","command": "nvcc","args": ["-o","${fileDirname}\\${fileBasenameNoExtension}",//VSCode里的宏,如果不了解可用直接copy,以工作区为默认路径"${file}"//源文件]//等同于nvcc -o /CodeDir/test test.cu}]
}

launch.json文件内容如下:

{"version": "0.2.0","configurations": [{"name": "CUDA C++: Launch","type": "cppvsdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","console": "externalTerminal", //使用外部终端,如果是vscode的终端会似乎会根据type设置的调用调试导致闪退"preLaunchTask": "mynvcc",},{"name": "CUDA C++: Attach","type": "cuda-gdb","request": "attach"}]
}
  • 我们只需要第一个CUDA C++: Launch
  • type
    • 需要选择cppvsdbg。默认是cuda-gdb在Windows上貌似不适配。
  • program
    • 注意:需要.exe后缀
  • preLaunchTask
    • 在执行前先编译
    • 填写tasks.json中label的名称

配置好后,即可直接在VSCode中运行CUDA代码。

方法二、配置CMake文件

  • 文件-打开文件夹-选择.cu文件所在目录
  • 根目录新建 CMakeLists.txt 文件

CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.20)
project(cuda_test CUDA)
set(CMAKE_CUDA_STANDARD 17)
link_directories(${LIB_DIR})
add_executable(cuda_test test.cu)
set_target_properties(cuda_test PROPERTIESCUDA_SEPARABLE_COMPILATION ON)
  • projectadd_executable 中的cuda_test
    • 自定义的项目名称
  • add_executable 中的test.cu
    • 即:需要编译的CUDA代码(需修改成自己的)

查询编译器

  • terminal中运行 cmake -B build -G
    • 会列出一系列生成器,复制自己安装的版本,如"Visual Studio 16 2019"

编译运行

  • 依次运行
    • cmake -B build -G "Visual Studio 16 2019"
    • cmake --build build
    • cd build\Debug
    • .\cuda_test.exe

步骤自动化

  • 在项目根目录下创建文件build_and_run.bat
setlocal  REM 清理 build 目录  
if exist build (  rmdir /s /q build  echo Cleaned up build directory.  
)  REM 创建 build 目录  
mkdir build  
echo Created build directory.  REM 使用 CMake 进行配置  
cmake -B build -G "Visual Studio 16 2019"   
if ERRORLEVEL 1 (  echo CMake configuration failed.  exit /b %ERRORLEVEL%  
)  REM 构建项目  
cmake --build build  
if ERRORLEVEL 1 (  echo Build failed.  exit /b %ERRORLEVEL%  
)  REM 进入 Debug 目录并运行测试  
cd build\Debug  
if ERRORLEVEL 1 (  echo Failed to enter Debug directory.  exit /b %ERRORLEVEL%  
)  REM 运行  
.\cuda_test.exe  endlocal  
  • 终端-运行任务-CMake生成
    • 自动在根目录创建.vscode目录及tasks.json文件
{  // See https://go.microsoft.com/fwlink/?LinkId=733558  // for the documentation about the tasks.json format  "version": "2.0.0",  "tasks": [  {  "label": "Build, Run and Clean CUDA Test",  "type": "shell",  "options": {  "cwd": "${workspaceFolder}"  // 确保命令在当前工作目录中执行  },  "command": "cmd",  "args": [  "/c",  "build_and_run.bat"  // 调用合并的批处理脚本  ],  "problemMatcher": [],  "group": {  "kind": "build",  "isDefault": true  }  }  ]  
}  
  • 编译并运行
    • 终端-运行任务-Build, Run and Clean CUDA Test
      • Build, Run and Clean CUDA Testtasks.json文件中的lable

参考文献:
[1] windows下用vscode编译并运行cuda程序 https://zhuanlan.zhihu.com/p/567996994
[2] CUDA 番外篇 | Visual Studio Code的CUDA环境https://zhuanlan.zhihu.com/p/508810115
[3] windows下使用vccode+cmake编译cuda程序https://blog.csdn.net/threestooegs/article/details/135173376
[4] CUDA Programming in VS Code with CMake https://levelup.gitconnected.com/debugging-cuda-in-cmake-applications-on-vscode-with-ease-4a1990d77b18
[5] 如何应用 VS Code,CMake 和 Make 编译 C ++ 代码?https://zhuanlan.zhihu.com/p/354070726
[6] Debugging CUDA in CMake applications on VSCODE with easehttps://levelup.gitconnected.com/debugging-cuda-in-cmake-applications-on-vscode-with-ease-4a1990d77b18

相关文章:

Windows系统中在VSCode上配置CUDA环境

前置步骤 安装符合GPU型号的CUDA Toolkit 配置好 nvcc 环境变量 安装 Visual Studio 参考https://blog.csdn.net/Cony_14/article/details/137510909 VSCode 安装插件 Nsight Visual Studio Code Editionvscode-cudacpp 安装 cmake 并配置好环境变量 注:Windows 端…...

React Native 0.76 升级后 APK 体积增大的原因及优化方案

在将 React Native 从 0.71 升级到 0.76 后,打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化,最终找到了解决方案,并将优化过程整理如下。 1. React Native 0.76 体积增大的可能原因 (1) 新架构默认启用 React Native 0.76 默认启用了 New Architecture(新架…...

pycharm找不到conda可执行文件

conda 24.9.2 在pycharm的右下角就可以切换python解释器了...

定时任务框架

常用定时任务框架 JDK 自带的 ScheduledExecutorService 适用于轻量级定时任务,基于线程池实现。API 简单,适用于小规模任务调度。 Quartz 强大的 Java 任务调度框架,支持 Cron 表达式、分布式集群、持久化等。适用于复杂调度场景&#xff0…...

ESP32S3读取数字麦克风INMP441的音频数据

ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framew…...

利用后缀表达式构造表达式二叉树的方法

后缀表达式(逆波兰表达式)是一种将运算符放在操作数之后的表达式表示法。利用后缀表达式构造表达式二叉树的方法主要依赖于栈结构。 转换步骤 初始化 创建一个空栈。 遍历后缀表达式 对后缀表达式的每个符号依次处理: 遇到操作数 如果当前符…...

使用express创建服务器保存数据到mysql

创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…...

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及

YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…...

SQLAlchemy系列教程:如何防止SQL注入

SQL注入是一种常见的安全漏洞,它允许攻击者通过应用程序的SQL查询操纵数据库。使用ORM工具(如SQLAlchemy)提供的内置功能可以帮助减轻这些风险。本教程将指导您完成保护SQLAlchemy查询的实践。 了解SQL注入 当攻击者能够通过用户输入插入或操…...

1. 树莓派上配置机器人环境(具身智能机器人套件)

1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...

基于SpringBoot的智慧停车场小程序(源码+论文+部署教程)

运行环境 • 前端:小程序 Vue • 后端:Java • IDE工具:IDEA(可自行选择) HBuilderX 微信开发者工具 • 技术栈:小程序 SpringBoot Vue MySQL 主要功能 智慧停车场微信小程序主要包含小程序端和…...

【从零开始学习计算机科学】数字逻辑(九)有限状态机

【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…...

HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践

HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...

AI大模型概念知多少

什么是大模型?什么是模型参数 1)现在的大模型要解决的问题,就是一个序列数据转换的问题: 输入序列 X X[x1 ,x2 ,...,xm ], 输出序列Y[y1 ,y2 ,…,yn ],X和Y之间的关系是:YWX。 “大模型”这个词…...

powermock,mock使用笔记

介于日本的形式主义junit4单体测试,特记笔记,以下纯用手机打出来,因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1,测试类头部打注解 RunWith(PowerMockRunner.class…...

基于置换对称性的模型融合:实现凸盆地单盆地理论

【摘要】 一种合并神经网络模型的新方法,通过置换对称性来合并模型。即使在大规模的非凸优化问题中,神经网络损失景观似乎通常只有一个(几乎)封闭的盆地,这在很大程度上归因于隐藏层单元置换对称性。作者介绍了三种算法,用于将一个模型的单元置换为与参考模型对齐,从而…...

把握好自己的节奏, 别让世界成为你的发条匠

我见过凌晨两点还在回复工作群消息的职场妈妈,也见过凌晨三点抱着手机刷短视频的年轻人。 地铁站台的上班族永远在狂奔,连刚会走路的小孩都被早教班塞满了日程表。 现如今生活节奏快,像一只巨大的发条,每个人都被拧得紧紧的&#…...

linux awk命令和awk语言

linux awk和awk语言 通常大家说的awk几乎都是在linux/unix中使用的awk命令,见下, https://www.geeksforgeeks.org/awk-command-unixlinux-examples/ 作为命令使用的话,存在下内容 Awk 是一个工具,使程序员能够编写小巧但有效的…...

电脑网络出现问题!简单的几种方法解除电脑飞行模式

在某些情况下,您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一:点击屏幕右下角的通知…...

ASP.NET Core 6 MVC 文件上传

概述 应用程序中的文件上传是一项功能,用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件,然后根据需要对文件进行一些验证,最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...