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

cuda-gdb 支持内置变量的实现机制

cuda-gdb 支持内置变量的实现机制

cuda 编程会使用到的诸如 threadIdx、blockIdx 等内置变量。cuda-gdb 调试 cuda 代码时,也需要支持这些内置变量相关的调试,例如直接 p 这些内置变量,或者使用这些内置变量设置条件断点,cuda-gdb 的用户手册中也说明了条件断点支持使用内置变量。
在这里插入图片描述
那么 cuda-gdb 是如何实现内置变量的支持的呢?

首先,想到的是将内置变量放到调试信息中。但是,通过搜索 cudump 解析的调试信息,并没有找到内置变量的信息。这说明内置变量不是放在调试信息中。此外,非 debug 版本程序的调试也支持内置变量,这也能说明内置变量不可能放到调试信息中。

然后,直接调试 cuda-gdb 源码,分析内置变量的来源。

编译 debug 版本的 cuda-gdb 源码(nv 直接开放 cuda-gdb 源码,例如 这里),使用 gdb 调试 cuda-gdb (gdb --args cuda-gdb a.out),可以从 lookup_symbol 函数作为入口,关于 gdb 调试信息更多背景知识,可以戳 GDB 源码分析系列文章三:调试信息的处理、符号表的创建和使用。最后在一个名为 <anonymous_objfile> 的特殊 objfile 的符号表中找到了内置变量的信息:
在这里插入图片描述
调用栈如下:
在这里插入图片描述
最后,查找 <anonymous_objfile> 的特殊 objfile 的创建。到这里就很容易找到根源了,原来 cuda-gdb 是为内置变量创建了一个特殊的 objfile,然后将内置变量放入到这个 objfile 的符号表中,具体见 cuda_create_builtins_objfile 函数:
在这里插入图片描述

这样,在流程上,对内置变量的处理就和普通变量一样了,兼容性非常好。

不得不说,这是一个简单而巧妙的方案。

相关文章:

  • 【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
  • 微服务项目:尚融宝(13)(前端平台:搭建管理平台前端程序)
  • 【C++】模板初阶,了解函数模板和类模板的使用一些可能出现的问题
  • 微服务项目:尚融宝(14)(前端平台:尚融宝管理系统路由配置)
  • 中国电子用柔性阻隔膜行业产销需求与应用规模预测报告2022-2028年
  • C/C++面经嵌入式面经软件开发面经<26/30>-- 操作系统(五)
  • C/C++面经嵌入式面经软件开发面经<28/30>-- 单片机相关(一)
  • [iOS]-NSTimer与循环引用的理解
  • SpringCloudAlibaba2.2.6.RELEASE集成Gateway并实现JWT鉴权
  • Alevel经济知识点讲解:effects of deflation
  • 安装Docker后的一些配置
  • 智能驾驶功能软件平台设计规范第三部分:预测功能服务接口
  • 网课搜题公众号在线制作
  • Linux性能优化思路和方法
  • 什么是数据仓库?
  • 345-反转字符串中的元音字母
  • Android Studio:GIT提交项目到远程仓库
  • Brief introduction of how to 'Call, Apply and Bind'
  • Cookie 在前端中的实践
  • CSS3 变换
  • echarts花样作死的坑
  • GraphQL学习过程应该是这样的
  • happypack两次报错的问题
  • Java方法详解
  • k8s 面向应用开发者的基础命令
  • k个最大的数及变种小结
  • laravel 用artisan创建自己的模板
  • LeetCode29.两数相除 JavaScript
  • Linux下的乱码问题
  • Mac转Windows的拯救指南
  • MobX
  • MQ框架的比较
  • Protobuf3语言指南
  • 创建一种深思熟虑的文化
  • 第十八天-企业应用架构模式-基本模式
  • 后端_MYSQL
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 消息队列系列二(IOT中消息队列的应用)
  • 正则学习笔记
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 带你开发类似Pokemon Go的AR游戏
  • ​ssh免密码登录设置及问题总结
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #if和#ifdef区别
  • #Linux(make工具和makefile文件以及makefile语法)
  • $ git push -u origin master 推送到远程库出错
  • (arch)linux 转换文件编码格式
  • (c语言)strcpy函数用法
  • (java)关于Thread的挂起和恢复
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (rabbitmq的高级特性)消息可靠性
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (理论篇)httpmoudle和httphandler一览
  • (十一)c52学习之旅-动态数码管