仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 296|回复: 8
打印 上一主题 下一主题

[其他Linux] 来谈谈:用gdb调试mpi程序的一些心得

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 13:01:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
初学阶段只要把上课时候学习过的命令练熟就可以了.单靠学习各种命令而成为高手是不可能的。
Linux下MPI(MessagePassageInterface)的程序不太好调试,在windows下vs2005以上的IDE有集成的烦琐MPI调试工具,没有效过,有乐趣的能够实验一下。上面总结了一些比来在用MPI和c言语写程序时的调试履历(Ubuntu情况,c言语,mpich1.2.7)。
必要注重的几个小成绩
在编译程序的时分Cg是必定要加的,否则在gdb调试的时分大概会报相似“sourceisnotavailable”的毛病。入手下手我调程序的时分我都把我的程序的每一个调试版本,分离发送到集群中的每台呆板下面,然后在mpirunCmachinefilehostCnp3myprogram运转我的程序,这类办法没无效率,只能在最初纪录实行了局的时分大概最初调试阶段才干用。无效率的体例是mpirunCnp3myprogram在本机间接运转程序,如许mpi就会在本机开3个myprogram的历程,如许不接网线都能够便利的调试mpi的程序。这是几个小成绩,上面切进关头部分。
用gdb来调试mpi的程序
起首,本文所用的mpich版本为1.2.7,大概跟其他版本有必定的差别,RTFM,看看本人所用版本的利用手册来办理版本上的差别。
Mpi程序运转的时分都是经由过程mpirun后接参数和你的程序,gdb也是相似的历程,以是你不成以间接gdbmpirunCnp3myprogram,但你能够间接mpirunCgdbCnp3myprogram。如许你就能够再gdb中调试你的程序了。
不外,如许有个成绩,你能够调试在主节点运转的部分,也就是相对集群而言,你本机所运转的部分,程序运转到子各个节点部分今后,你的gdb就不克不及持续调下往了,这个就是个成绩。Gdb实在能够在程序已实行了今后,再挂载你的程序,如许你能够在程序实行的时代把gdb挂载出去。简而言之就是把程序停息起来(好比读个键盘输出getchar()之类的),用gdbmyprogrampid(myprogram是你程序的历程名,pid是你程序历程的pid号)怎样检察pid号呢?在终端内里运转psCa就能够了,如许就能够找到你本人程序的历程名和PID号,gdbmyprogram1234如许就能够挂载到你要调试的地位了。
但子节点有两种情形,一种情形是子节点运转的那部分程序运转在集群中其他的盘算机下面;另外一种情形是都在本机运转。第一种情形较简单办理,只需在程序运转后,停息子节点运转的那部分程序(在子节点就不成以用getchar()了,我用sleep()函数来办理这个成绩),ssh上往子节点盘算机下面,在子节点下面psCa查历程信息gdbmp1234挂载出来调试,不外要确保子节点下面也安装了GDB。第二种情形,由于在本机运转下面开了多个你本人程序的历程,如许会同时呈现3个myprogram,固然pid各不不异,不外程序名完整一样,占用内存不是有内存保守也几近一样,个中一个是主节点的历程,别的几个是子节点的历程,如许要晓得哪一个历程是子节点部分的,就要在子节点部分猎取所对应的历程的pid,很复杂,只需在代码中到场:
#include<sys/types.h>
#include<unistd.h>
//…
intpid;
pid=getpid();
printf(“
%d
”,pid);
//…
如许就能够依据猎取的pid信息来断定要挂载到哪一个历程内里
</p>
但不会命令而成为高手也是不可能的.这就好比学英语,什么语法都不懂,只捧着单词手册背单词是学不会英语的,但是没有单词词汇量英语水平也提不高的。
只想知道 该用户已被删除
沙发
发表于 2015-1-18 10:10:15 | 只看该作者
学习Linux应具备的。[书籍+网络资源]
不帅 该用户已被删除
板凳
发表于 2015-1-24 15:33:17 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
小女巫 该用户已被删除
地板
发表于 2015-2-1 23:29:09 | 只看该作者
笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机
柔情似水 该用户已被删除
5#
发表于 2015-2-7 17:43:47 | 只看该作者
这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?
谁可相欹 该用户已被删除
6#
发表于 2015-2-22 20:49:14 | 只看该作者
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
飘灵儿 该用户已被删除
7#
发表于 2015-3-7 03:30:06 | 只看该作者
我想即使Linux高手也很难快速准确精练的回答你。
深爱那片海 该用户已被删除
8#
发表于 2015-3-14 11:39:45 | 只看该作者
用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
再见西城 该用户已被删除
9#
发表于 2015-3-21 06:14:41 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 20:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表