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

VScode编译调试debug,gpu的cuda程序,Nsight

进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。

一、安装Nsight

二、创建launch.json文件

{"version": "0.2.0","configurations": [{"name": "CUDA C++: Launch","type": "cuda-gdb","request": "launch","program": "${fileDirname}/main","preLaunchTask": "mynvcc","args": ["1024"]  // 示例:传递向量大小作为参数}]
}

 

三、创建task.json文件

{"version": "2.0.0","tasks": [{"label": "mynvcc","type": "shell","command": "nvcc","args": ["-g","-G","-o","${fileDirname}/main","${file}","-I", "/usr/local/cuda/include","-L", "/usr/local/cuda/lib64","-l", "cudart","-D_MWAITXINTRIN_H_INCLUDED"],"group": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"]}]
}

 四、创建main.cu

注意:名称一定是main.cu,和上面的json文件中的main对应。

#include <cuda.h> 
#include <iostream> 
#include <vector> 
using namespace std;// Add A and B vector on the GPU. Results stored into C
__global__
void addKernel(int n, float* A, float* B, float* C)
{int i = blockIdx.x*blockDim.x + threadIdx.x;if(i < n) C[i] = A[i] + B[i];
}// Add A and B vector. Results stored into C
int add(int n, float* h_A, float* h_B, float* h_C)
{int size = n*sizeof(float);// Allocate memory on device and copy datafloat* d_A;cudaMalloc((void**)&d_A, size);cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);float* d_B;cudaMalloc((void**)&d_B, size);cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);float* d_C;cudaMalloc((void**)&d_C, size);// launch Kernelcout << "Running 256 threads on " << ceil(n/256.0f) << " blocks -> " << 256*ceil(n/256.0f) << endl;addKernel<<<ceil(n/256.0f),256>>>(n, d_A, d_B, d_C);// Transfer results back to hostcudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);// Free device memorycudaFree(d_A);cudaFree(d_B);cudaFree(d_C);return 0;
}// C = A + B on a GPU, where A is a vector of 1.0f and B a vector of 2.0f
// The main function takes one argument, the size of the vectors
int main(int argc, char* argv[])
{int n = atoi(argv[1]);vector<float> h_A(n, 1.0f);vector<float> h_B(n, 2.0f);vector<float> h_C(n);add(n, h_A.data(), h_B.data(), h_C.data());for(auto& c : h_C) {if(fabs(c-3.0f) > 0.00001f) {cout << "Error!" << endl;return 1;}}cout << "The program completed successfully" << endl;return 0;
}

五、编译main.cu

nvcc -g -G -o main main.cu

 六、开始调试

进入main.cu文件,打上断点,按F5,开始debug调试。

按F5后可能会出现警告,点击 无论如何继续,能调试就行,先别管乱起八糟的。

http://www.lryc.cn/news/2396431.html

相关文章:

  • 中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新
  • qwen-0.5b小模型的用处和显存要求
  • 防范DDoS攻击,服务器稳定性崩溃的根源与高效防御对策
  • 深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
  • C++ —— STL容器——string类
  • 用JS实现植物大战僵尸(前端作业)
  • Rust Mock 工具
  • C++读写锁以及实现方式
  • Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
  • 华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台
  • [git每日一句]Your branch is up to date with ‘origin/master‘
  • 高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
  • 机器人学基础——正运动学(理论推导及c++实现)
  • [网页五子棋][对战模块]处理连接成功,通知玩家就绪,逻辑问题(线程安全,先手判定错误)
  • TensorFlow Extended (TFX) 生产环境模型版本控制与回滚实战指南
  • 【Web应用】若依框架:基础篇11功能详解-系统接口
  • 【Docker项目实战篇】Docker部署PDF查看器PdfDing
  • Redis 常用数据类型和命令使用
  • 【Linux系统】第八节—进程概念(上)—冯诺依曼体系结构+操作系统+进程及进程状态+僵尸进程—详解!
  • WPF 全局加载界面、多界面实现渐变过渡效果
  • WebSocket与实时对话式AI服务的集成
  • 【xmb】】内部文档148344599
  • MobaXterm国内下载与安装使用教程
  • 数据结构——优先级队列(PriorityQueue)
  • 代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程
  • 服务器上用脚本跑python深度学习的注意事项(ubantu系统)
  • 【ARM】【FPGA】【硬件开发】Chapter.1 AXI4总线协议
  • 青少年编程与数学 02-020 C#程序设计基础 10课题、桌面应用开发
  • 把 jar 打包成 exe
  • 【目标检测】检测网络中neck的核心作用