CUDA编程练习(七) CUDA_GDB与VSCode的自带调试器

1 想法

上周被调试整的要死要活,这次,我要全部赢回来

外带,优化的效果和情况都是瞎子,我要全方位多角度的观察

本文以命令实操和解释为主,具体优化与测试的协同,待到下次算法章节再说

2 使用详解

首先,你编译的时候一定要加

-g -G

不然就太小丑了。

2.1 CUDA_GDB

它,是用来debug的,安装什么的网上教程是不少的。不多说了

docker环境弄不好的,ptrace默认被ban,只能docker run的时候释放权限。

然而

run不动,一润就exit(2),再往下我就找不到教程了。咱就是说,反正是练习,就不跟他们扯这些有的没的了。用裸机跑

启动

cuda-gdb your_program

添加断点

break kernel_name

跑起来

run

看变量

print variable_name

看寄存器

info registers

单步调试

step
// or
next

切换寄存器切换块(设置焦点)

cuda thread thread_id
cuda block block_id

info的其它用法

info breakpoints

info registers  // 当前线程寄存器
info locals  // 当前作用域局部变量
info shared  // 当前线程块
info args  // 当前函数参数值

info threads
info cuda threads  // 当前所有CUDA线程
info cuda warps
info cuda blocks

info source // 查看原代码块
info program  // 当前执行情况
info functions  // 当前程序的函数
info variables  // 当前程序的全局和静态变量

info args // 当前函数参数值

info frame // 当前堆栈帧的信息,包括函数名称、参数和局部变量
info memory  // 当前内存布局信息

查看计算能力

info cuda devices

2.2 Nsight Visual Studio Code Edition

安装还是傻瓜式的,不讲

我认为最关键的就是配置文件launch.json的写法

自认为,很头疼。

试错情况:

cppdbg+路径到gdb,那么可以调试C++部分代码,核函数自动跳过

cppdbg+路径到cuda-gdb,那么,无视你的断点,自顾自跑完

cuda-gdb+路径到cuda-gdb,那么,右上角根本不显示你写好的配置。。。嘿嘿

解决方案:

是不是很好玩呀!

这里暂存写好的两套json

tasks

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "buildForDebug",
            "type": "shell",
            "command": "/usr/bin/nvcc",
            "args": [
                "-G",
                "-g",
                // "-arch",
                // "sm_86",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": [
                "$gcc"
            ],
            "detail": "Generated task for CUDA compilation"
        },
        {
            "label": "build",
            "type": "shell",
            "command": "/usr/bin/nvcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": [
                "$gcc"
            ],
            "detail": "Generated task for CUDA compilation"
        }
    ]
}

launch

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CUDA-GDB Debug",
            "type": "cuda-gdb",
            "request": "launch",
            "program": "${workspaceFolder}/matMul2d",  // 修改为你的可执行文件路径
            "args": "",  // 如果有命令行参数,可以在这里添加
            "debuggerPath": "/usr/bin/cuda-gdb"
        },
        {
            "name": "Launch CUDA Program",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/matMul2d", // 你的可执行文件路径
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "buildForDebug",
            "miDebuggerPath": "/usr/bin/gdb", // 或根据你的系统修改路径
            "logging": {
                "trace": true,
                "traceResponse": true,
                "engineLogging": true
            }
        }
    ]
}

3 总结

至此,调试问题就不是很大了

除了对于现在的我来说,只能用向日葵远程的内网pc连接的服务器才有ptrace权限,那个操作的卡顿体验,让我出现肠胃抽动

接下来,性能调试工具走一波,今天先去看比赛(赤石)了

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值