cuda-gdb 调试 Program terminated with signal SIGKILL, Killed. The program no longer exists.

基于立创EDA的8口全千兆POE交换机设计详解:RTL8370N芯片与90W大功率供电方案 本文详细解析了基于立创EDA设计的8口全千兆POE交换机方案,核心采用RTL8370N交换芯片与支持90W大功率供电的IEEE 802.3bt标准PD芯片。文章深入探讨了PSE/PD供电管理、电源架构设计、电路细节及关键散热方案,为DIY或学习POE交换机硬件设计提供了完整的开源实践指南。 阅读详情

问题简介:

cuda-gdb 调试 Program terminated with signal SIGKILL, Killed. The program no longer exists.

问题背景:

编写cuda程序,需要核对计算过程是否正确,所以使用cuda-gdb来进行单步调试,并显示运算过程及结果。
通过 nvcc -g -G location.cu -o location 编译cuda程序
通过 cuda-gdb location 调试程序
键入 r 程序断在 如图示:
在这里插入图片描述
报出错误如下:

CUDA Exception: Warp Illegal Address
The exception was triggered at PC 0x5555c9de90 (location2.cu:45)
(cuda-gdb) n
[Thread 0x7fb7ff5010 (LWP 10479) exited]

Program terminated with signal SIGKILL, Killed.
The program no longer exists.

问题分析:

在gdb调试时出现以上报错信息,通常是 内存相关问题,查看系统日志 tail /var/log/kern.log -n 1000 发现如下:

Aug 12 09:29:11 nx kernel: [ 1197.607814] nvgpu: 17000000.gv11b         gv11b_fb_print_fault_info:710  [ERR]  [MMU FAULT] mmu engine id:  65, ch id:  504, fault addr: 0x7ffff4e000, fault addr aperture: 0, fault type: invalid pde, access type: virt read, 
Aug 12 09:29:11 nx kernel: [ 1197.608185] nvgpu: 17000000.gv11b         gv11b_fb_print_fault_info:719  [ERR]  [MMU FAULT] protected mode: 0, client type: gpc, client id:  t1 2, gpc id if client type is gpc: 0,
Aug 12 09:29:12 nx kernel: [ 1199.027576] nvgpu: 17000000.gv11b         gk20a_fifo_deferred_reset:1604 [ERR]  chid: 503 is not bound to tsg
Aug 12 09:29:12 nx kernel: [ 1199.039202] nvgpu: 17000000.gv11b          gk20a_tsg_unbind_channel:169  [ERR]  Channel 504 unbind failed, tearing down TSG 4

第一段日志信息说是 [MMU FAULT] fault addr: 0x7ffff4e000
此时,我却任然一头雾水,在网上搜索了很多关于
“cuda-gdb 调试 Program terminated with signal SIGKILL, Killed.
The program no longer exists.
”
这样的关键词,但所得结果均无效。搜索一下午,困惑一晚上,任然不得其解。第二天早上迷迷糊糊看向核函数的形参恍然大悟,问题不就是:将host变量引用传递给了device

在找到原因后才发现:其实,最重要的报错信息是如下,而我却忽略了

CUDA Exception: Warp Illegal Address
The exception was triggered at PC 0x5555c9de90 (location2.cu:45)

这报错信息明确说明 线程束非法地址,其异常被触发在 location2.cu 的45行处 。这意思不就是说地址非法了,再看源码

__global__
void gpu_location_kernel(DeviceArray2D<float>& struct_dev_arr_input_2D,
	DeviceArray2D<float>& struct_dev_arr_w1_2D, DeviceArray2D<float>& struct_dev_arr_w2_2D, DeviceArray2D<float>& struct_dev_arr_w3_2D,
	DeviceArray2D<float>& struct_dev_arr_b1_2D, DeviceArray2D<float>& struct_dev_arr_b2_2D, DeviceArray2D<float>& struct_dev_arr_b3_2D,
	DeviceArray2D<float>& struct_dev_median_layer1_reuslt, DeviceArray2D<float>& struct_dev_median_layer2_reuslt, DeviceArray2D<float>& struct_dev_final_reuslt)
{
	...
}

哈哈,我居然在核函数里使用引用,大错特错,再看源码调用 gpu_location_kernel 处,传递的参数居然是 host 变量的引用,大错特错。

想想为什么会犯这个错误呢?
其实我只是想通过结构体引用传递多个参数值,如果一个参数一个参数写作形参,实在是太长了。遂而将 device 地址放到了 host 结构体中,然后将 host 结构体的引用作为实参传递给核函数,这不出现非法地址,才怪!

解决办法:

只需要将 host 结构体 拷贝到 device 结构体中,然后将 device 结构体指针传递给核函数就可以了,这样既满足了传递多个参数而不追加形参,而又解决了目前的问题。
代码如下:

struct GPULocationKernelParameter{
	float *dev_arr_input_2D;
	size_t dev_arr_input_2D_pitch;
	int dev_arr_input_2D_rows;
	int dev_arr_input_2D_columns;

	float *dev_arr_w1_2D;
	size_t dev_arr_w1_2D_pitch;
	int dev_arr_w1_2D_rows;
	int dev_arr_w1_2D_columns;
	
	float *dev_arr_w2_2D;
	size_t dev_arr_w2_2D_pitch;
	int dev_arr_w2_2D_rows;
	int dev_arr_w2_2D_columns;
	
	float *dev_arr_w3_2D;
	size_t dev_arr_w3_2D_pitch;
	int dev_arr_w3_2D_rows;
	int dev_arr_w3_2D_columns;
	
	float *dev_arr_b1_2D;
	size_t dev_arr_b1_2D_pitch;
	int dev_arr_b1_2D_rows;
	int dev_arr_b1_2D_columns;
	
	float *dev_arr_b2_2D;
	size_t dev_arr_b2_2D_pitch;
	int dev_arr_b2_2D_rows;
	int dev_arr_b2_2D_columns;
	
	float *dev_arr_b3_2D;
	size_t dev_arr_b3_2D_pitch;
	int dev_arr_b3_2D_rows;
	int dev_arr_b3_2D_columns;
	
	float *dev_median_layer1_reuslt;
	size_t dev_median_layer1_reuslt_pitch;
	int dev_median_layer1_reuslt_rows;
	int dev_median_layer1_reuslt_columns;
	
	float *dev_median_layer2_reuslt;
	size_t dev_median_layer2_reuslt_pitch;
	int dev_median_layer2_reuslt_rows;
	int dev_median_layer2_reuslt_columns;
	
	float *dev_final_reuslt;
	size_t dev_final_reuslt_pitch;
	int dev_final_reuslt_rows;
	int dev_final_reuslt_columns;
};

__global__
void gpu_location_kernel(GPULocationKernelParameter *dev_kernelParameter)
{
	GPULocationKernelParameter dev_struct_kernelParameter = *dev_kernelParameter;
	...
}

补充:

1.参考的cuda-gdb调试文章
CUDA-GDB 使用
CUDA C编程(三十八)CUDA调试
GDB调试操作
GDB调试

2.感悟
这个问题我思考了一下午近5h,外加困扰一晚上。现在回想这个问题的原因在报出时就已经给出了,然而我却浑然不知。所以我还是应该认认真真地去看执行过程报出的错误,里面每一个单词,每一句话都有深意。

单细胞转录组数据分析中的基因ID注释转换问题:如何解决才能注释所有的UMIcount数据? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。 阅读详情

相关推荐

Pixhawk+OpenMV实战:如何用Apriltag实现无人机自动降落(附避坑指南)

本文详细介绍了如何利用Pixhawk飞控和OpenMV摄像头,通过Apriltag视觉标签实现无人机的精准降落系统。从硬件搭建、参数配置到视觉处理代码优化,提供了完整的实战指南和避坑建议,帮助开发者快速实现厘米级精度的自动降落功能。

weixin_27076351的博客 481

Program terminated with signal SIGKILL,Killed 问题解决方法

最近发现一个奇怪的问题,程序运行一段时间后会被杀死。 通过gdb调试发现程序收到的信号是“Program terminated with signal SIGKILL,Killed”。 百度一番,有说是程序内存占用过多导致的,通过top -p 进程pid的方法进行检测,发现程序内存占用很低,只能是其他原因了。 最后搜到工具audit可以监控程序被kill的原因,执行命令如下。 1.先查看audi...

Rain 1万+

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

Program terminated with signal SIGKILL,Killed

车载后视镜机器,Liinux + qtUI形式,前后双路,前一天晚上开机用gdb run DvrUI,第二天早上回来一看,机器绿屏卡死了,录像预览停止刷新了,sd录像也停止了。点击无任何反应。 看gdb打印显示“Program terminated with signal SIGKILL,Killed” ,用bt答应stack调用显示“No statck”。很怪异不知道怎么死的。 想来...

weixin_33982670的博客 2248

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1007

ROS2实战:构建模块化启动文件(launch file)以驱动复杂机器人系统

本文详细介绍了ROS2中构建模块化启动文件(launch file)的最佳实践,帮助开发者高效管理复杂机器人系统的节点启动。通过功能分解、参数化设计和嵌套启动等技术,实现批量管理、依赖控制和配置统一,显著提升系统稳定性和调试效率。文章包含实战代码示例和工程化建议,特别适合自动驾驶、物流机器人等场景应用。

weixin_28744613的博客 215

“Program terminated with signal SIGKILL,Killed”

最近遇到一个问题,情况是IPC通信,通过一个程序调用另一个程序,但每次都执行了一般程序就挂掉了,用gdb跟进去发现,报错内容为: “Program terminated with signal SIGKILL,Killed” 程序被杀掉了,不知道如何确定何种原因,哪个程序把我的进程杀掉,看到下面这篇文章,才准确定位问题所在,贴出来学习分享。 转载请注明出处 http://forever.bl...

lyl001234的专栏 3523

Jetbrains IDE 配置上Gemini Code 插件,让你的的编程高效起飞~

Gemini Code Assist是 Google 家产品,基座模型为最新的Gemini 2.5 Pro。本篇实践了在 WebStrom 中Gemini Code Assist插件的高效编程。

2301_76993408的博客 4595

【Jenkins】 Nodejs相关问题

1 速度慢 1、输入:npm get registry(显示当前安装默认的镜像地址) 2、修改默认镜像地址为淘宝地址:npm config set registry http://registry.npm.taobao.org 再次npm get registry下就会看到默认地址已更改为淘宝镜像地址,重新npm install就会比以前快速许多。 ...

我是Superman丶的博客 1975

如何加快香山处理器Chisel->Verilog编译速度

相比使用默认的scala firrtl complier,使用CIRCT能够将香山代码编译到Verilog的速度提高50%左右。在执行make命令时加上MFC=1,例如make verilog MFC=1或make emu MFC=1。在本地从源码编译CIRCT,在编译完成后将circt/bin路径加入PATH中。使用GraalVM免费版作为JVM编译香山比OpenJDK快10%-20%。我们推荐使用GraalVM代替OpenJDK。使用CIRCT编译香山。

专业技术人员的归宿 862

【DICOM后处理】qt+vs 实现DICOM数据四视图显示

方法用于 设置 2D 视图的“向上”方向,即定义图像在屏幕坐标系中的朝向。该方法直接影响影像的显示方向,尤其在多平面重建(MPR)或非标准切面显示时至关重要。:方法用于 设置渲染窗口在屏幕上的显示位置(以像素为单位)。它控制的是 VTK 渲染窗口的左上角在屏幕坐标系中的坐标位置。DICOM四视图通常指同时显示医学影像的四个不同平面或视角,用于全面分析三维数据(如CT、MRI等)。:基于 标量值 设置不透明度(控制不同组织的显示),显示骨骼or显示高密度流体等。默认朝向原点 (0, 0, 0)

weixin_41804847的博客 1325

解决 Command failed with signal “SIGILL“. 错误

使用Vue CLI创建的项目运行时报以下错误

weixin_52054631的博客 8440

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 448

Program terminated with signal SIGKILL, Killed. The program no longer exists. 程序起不来

改了一行代码又起来了,总之莫名其妙的问题。 后面查看系统日志,知道了是操作系统杀死的,将虚拟机的内存由原来的2g变为3g后ok。

pengda63的博客 1554

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

系统什么时候发送SIGKILL信号

when does the system send SIGKLILL 我的程序有时候会随机收到SIGKILL信号,gdb会提示: Program terminated with signal SIGKILL, Killed. The program no longer exists. (gdb) 并且我找不到任何原因?什么时候系统会发送SIGKILL信号呢?我这里没有其他程序发送这个

JoJo-追求卓越~ 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)...

新版本的录制程序终于快完工了,在添加了一个新特性“报警录制”后,就开始测试了。 一开始就不顺利:程序正常运行一段时间后就会崩溃,由于程序添加了守护进程,在崩溃后会自动重启。 因此测试得到的结果就是:程序运行一段时间后就自动重启,并不断持续;有时几个小时重启一次,有时甚至每分钟都重启。 废话少说,开始定位问题: 1.去掉自动重启功能,在gdb下运行,20多分钟后就崩溃了:   2011-10-26 ...

weixin_33965305的博客 1435

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Xshell打包vite项目报错error Command failed with signal “SIGKILL“.

问题:安装过程出现服务器断开连接后node版本又回退到14低版本,导致一直打包失败。解决问题:最开始服务器安装node版本为14版本,升级到16.20.2版本即可。解决:nvm alias default v16.20.2。分析问题:初步判断,服务器上安装的node版本不合适。

follow12138的博客 865

vite&vue3创建项目后编译或修改文件报错

# # Fatal error in , line 0 # Check failed: U_SUCCESS(status). # # # error Command failed with signal "SIGILL". info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. 解决方法: 检查ndoe版本,尝试切换到当前稳定版本 如:node 为12.0.0而 package.json 为

qq_35052138的博客 1439

查看进程被哪个进程杀掉(九十五)

1.demo.c #include <unistd.h> #include <sys/syscall.h> #include <stdio.h> int main(){ pid_t tid; while(1){ sleep(1); tid = syscall(SYS_gettid); printf("tid(hex) = %#x, tid(dex) = %d\n",tid,tid); } } # gcc demo.c # ps aux | gre.

Android系统攻城狮 1757

Program terminated with signal SIGQUIT, Quit.

当程序接收到SIGQUIT信号时,它会终止执行并生成核心转储文件,该文件可以用于后续调试。SIGQUIT信号通常用于应对程序的异常情况,比如程序出现严重错误或不响应时,用户可以发送SIGQUIT信号来终止程序并获取有关程序状态的核心转储信息。SIGINT信号是用于请求程序终止的中断信号,而SIGQUIT信号通常用于在程序出现问题时获取核心转储信息。信号SIGQUIT是由用户发送的信号,通常用于请求程序终止并生成核心转储(core dump)。

天涯路的专栏 841

关于SIGSEGV错误及处理方法

关于SIGSEGV错误及处理方法    

brace的专栏 15万+

解决ERROR: Command errored out with exit status 1

"ERROR: Command errored out with exit status 1"是一个常见的Python错误信息,通常表示在执行某个命令时出现了问题,并导致命令无法成功完成。退出状态值为1是指在执行一个程序或命令时,该程序或命令在正常情况下会返回一个退出状态值,而退出状态值为1表示程序或命令执行失败或出现错误。然而,当程序或命令遇到错误或异常情况时,它可能会返回非零的退出状态值,其中退出状态值为1较为常见。通过这个示例代码,我们可以逐个安装软件包,并在遇到错误时停止安装,同时输出错误信息。

牛肉胡辣汤 2万+

Vscode报错:clang: error: linker command failed with exit code 1

Vscode报错:clang: error: linker command failed with exit code 1

guhong1995的博客 4993

段错误

3。编程中通常碰到段错误的地方有哪些? 为了进行下面的实验,我们需要准备两个工具,一个是gcc,一个是gdb 我是在ubuntu下做的实验,安装这两个东西是比较简单的 Quote: sudo apt-get install gcc-4.0 libc6-dev sudo apt-get install gdb 好了,开始进入我们的实验,我们粗略的分一下类

iefswang的专栏 3102

CUDA code=700(cudaErrorIllegalAddress) 报错与排查方法

最近笔者在调试自己写的 CUDA 代码时, 遇到了的报错, 在此记录一下排查和解决方法.

LostUnravel的博客 8562
上一篇: string转float显示位数有误;cout 的 precision 成员函数
下一篇: 程序代码局部变量定义超过栈空间大小限制
returningprodigal
博客等级 码龄12年 53粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值