IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> CUDA编程_Segmenation fault (core dumped) 错误问题以及解决 -> 正文阅读

[Python知识库]CUDA编程_Segmenation fault (core dumped) 错误问题以及解决

摘要:

????????本文主要介绍笔者在参加CUDA ON ARM Platform夏令营第二天课程中遇到问题以及其解决方法,本文同时还会以图文的方式介绍一点linux平台下CUDA编程时的错误调试方法。

? ? ? ? 遇到的问题:Segmenation fault (core dumped)?

图1 报错内容

错误原因:使用“cudaMalloc”函数申请的数组访问越界

调试主要过程:

????????nvcc -g -G -o mul XXX.cu

????????cuda-gdb ./mul

????????run

接下来我会以图文的形式分享我调试的具体过程,遇到的问题以及解决办法。

遇到的问题及调试过程

我们今天的任务是使用gpu计算矩阵乘法,同时把gpu计算得到的矩阵结果与cpu计算的到的矩阵结果进行对比,如果gpu和cpu的运算结果相同,则输出“pass!!!”以证明我们的程序没有问题。

我写完程序,编译之后就遇到 图1 所示的问题:Segmenation fault (core dumped)

百度这个错误之后有人说是除零的问题,但是我这是乘法,显然不存在这个问题。

由于程序量相对多,并且我在linux的命令行环境下,不容易人工找出这种运行时错误的发生位置。(如果是windows下的VisualStudio环境可能会容易调试一点)

这个时候社区的老师很热心的教了我在linux下CUDA程序的Debug方法(非常感谢!),下面主要介绍这部分内容。

?

图2 执行nvcc -g -G -o mul XXX.cu

? ? ? ? 执行“nvcc -g -G -o mul matrix_mul.cu” 之后得到了“mul”文件(应该是保存有CUDA运行信息的文件),其中 -g -G 代表为CPU和GPU代码部分进行调试编译。

????????

图3 执行cuda-gdb ./mul 和 run

? ? ? ? 运行 cuda-gdb ./mul 和 run之后,按理说应该可以看到具体问题发生在哪一行了,但是我只看到了一个错误代码“CUDA_ERROR...”,并没有看到发生问题的具体代码行号。

? ? ? ? 请教老师后得知这是因为我们使用的Nvidia Jetson nano开发板上被设置了权限,需要sudo才能看到。

图4 退出调试状态方法:Ctrl + d

? ? ? ? 这边使用Ctrl + d退出调试状态(不是 Ctrl + c)

图 5 sudo运行cuda-gdb失败

? ? ? ? 第一次使用sudo 运行 cuda-gdb失败,原因是cuda-gdb命令的位置没有被添加到环境变量,这里调用需要用完整路径。

图6 使用whereis 命令查找 cuda-gdb的完整路径

??

?图7 使用完整路径运行

?图8 发现具体的问题行数

????????使用完整路径运行之后的到了具体的错误发生位置,这里需要说明的是错误可能不是正好就在提示的那一行,这时请向上方寻找错误位置。

最后:? ??

图9 发现了低级错误

? ? ? ? ?顺图索骥,我们在88行发现了一个低级错误。

????????我把遍历遍历写错了位置,导致变量 j 停不下来,访问越界。

? ? ? ? 注:也许是变量 j 访问的数组使用“cudaMalloc”函数分配空间才导致了本文最开头的错误。

????????

图10 修改错误之后成功运行?

? ? ? ? 修改这个错误之后成功运行!

?总结:

? ? ? ? 我认为在命令行环境中编写关于CUDA的程序时,如果遇到了这种运行时错误,不使用专用的调试工具,直接人眼在大量的代码中寻找错误是很不可取的(我这个案例中其实代码量不多,但肉眼debug也很糟心)。

? ? ? ? 因此我把我的这段经历写成文档,与大家共享,希望可以对大家有所帮助!

? ? ? ? 由于是第一次写这类文档,肯定存在着不少错误,如果大家发现了欢迎联系我勘正。

? ? ? ? 邮箱:duoyixian1996@163.com

?致谢:

? ? ? ? 最后,请让我对本次活动中的Nvidia社区和GPU Solutions社区的老师(排序不分先后!)表示衷心的感谢,是你们认真细心的解答,让我们有了提升,也让经验(知识)以更高的效率分享!

? ? ? ? 祝各位:工作开心,生活健康!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:49:15  更:2021-07-14 10:50:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:46:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码