当前位置: 首页 > 编程日记 > 正文

用gdb调试mpi程序的一些心得

LinuxMPI (Message Passage Interface) 的程序不太好调试,在windowsvs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下。下面总结了一些最近在用MPIc语言写程序时的调试经验(Ubuntu环境,c语言, mpich 1.2.7)。

需要注意的几个小问题

在编译程序的时候 –g 是一定要加的,不然在gdb调试的时候可能会报类似“source is not available”的错误。开始我调程序的时候我都把我的程序的每个调试版本,分别发送到集群中的每台机器上面,然后在mpirun –machinefile host –np 3 myprogram 运行我的程序,这种方法没有效率,只能在最后记录实验结果的时候或者最后调试阶段才能用。有效率的方式是 mpirun –np 3 myprogram 在本机直接运行程序,这样mpi就会在本机开3myprogram的进程,这样不接网线都可以方便的调试mpi的程序。这是几个小问题,下面切入关键部分。

gdb来调试mpi的程序

首先,本文所用的mpich版本为1.2.7,可能跟其他版本有一定的差异,RTFM,看看自己所用版本的使用手册来解决版本上的差异。

Mpi程序运行的时候都是通过mpirun 后接参数和你的程序,gdb也是类似的过程,所以你不可以直接 gdb mpirun –np 3 myprogram,但你可以直接mpirun –gdb –np 3 myprogram。这样你就可以再gdb中调试你的程序了。

不过,这样有个问题,你可以调试在主节点运行的部分,也就是相对于集群而言,你本机所运行的部分,程序运行到子各个节点部分以后,你的gdb就不能继续调下去了,这个就是个问题。Gdb其实可以在程序已经执行了以后,再挂载你的程序,这样你可以在程序执行的期间把gdb挂载进来。简而言之就是把程序暂停起来(比如读个键盘输入getchar()之类的),用gdb myprogram pid myprogram是你程序的进程名, pid是你程序进程的pid号)如何查看pid号呢? 在终端里面运行 ps –a 就可以了,这样就可以找到你自己程序的进程名和PID号,gdb myprogram 1234 这样就可以挂载到你要调试的位置了。

但子节点有两种情况,一种情况是子节点运行的那部分程序运行在集群中其他的计算机上面;另一种情况是都在本机运行。第一种情况较容易解决,只要在程序运行后,暂停子节点运行的那部分程序(在子节点就不可以用getchar()了,我用sleep()函数来解决这个问题),ssh上去子节点计算机上面,在子节点上面ps –a查进程信息 gdb mp 1234 挂载进去调试,不过要确保子节点上面也安装了GDB。第二种情况,因为在本机运行上面开了多个你自己程序的进程,这样会同时出现 3myprogram,虽然pid各不相同,不过程序名完全一样,占用内存不是有内存泄露也几乎一样,其中一个是主节点的进程,另外几个是子节点的进程,这样要知道哪个进程是子节点部分的,就要在子节点部分获取所对应的进程的pid,很简单,只要在代码中加入:

#include <sys/types.h>

#include 
<unistd.h>

//

int pid;

pid 
= getpid();

 

printf ( “\n
%d\n”, pid );

//

这样就可以根据获取的pid信息来确定要挂载到哪个进程里面。补充一点,有种情况,有几个子节点同时运行,程序中某个子节点运行的部分由段错误,会自己终止,这样其他子节点也会跟着那个子节点一起终止,不管你有没有挂载gdb到进程里面,这样可以吧会崩溃的子节点用sleep睡一段足够长的时间,这样可以单独调试某个子节点的部分,而不至于过早终止。

顺便问个问题,怎么让mpi的程序内存转储(core dump),直接运行程序可以,加上mpirun以后就不可以core dump了,麻烦知道的告诉我一下coding.game$gmail.com,非常感激。

推荐大家读这篇:Using gdb and ddd with MPI

http://www.cnblogs.com/cy163/archive/2008/04/12/765737.html

转载于:https://www.cnblogs.com/goku_1/archive/2009/10/14/gdb_mpi.html

相关文章:

开源如何占领软件世界?

作者 | Mike Volpimavolpi译者 | 风车云马编辑 | 一一出品 | AI科技大本营5 年前&#xff0c;投资商对开源这种商业模式的可行性持有怀疑态度。他们普遍认为&#xff0c;红帽&#xff08;redhat&#xff09;公司犹如雪花飘零——在软件世界里开源公司不可能占据举足轻重的地位。…

软件工程概论——课堂测试1

设计思想&#xff1a;1.用1个页面&#xff0c;实现课程录入&#xff0c;提交后直接返回课程界面。2.应用html表单属性进行数据的提交。3.用servlet进行写入数据库和验证输入。 源代码&#xff1a; <% page language"java" import"java.util.*" contentT…

过程即奖励(The Journey is the Reward)

今天读完了《乔布斯传》。翻着这本书最后的影集&#xff0c;乔布斯传奇一生的一幕幕仿佛在眼前展开。从第一张照片中特里独行、桀骜不驯的年轻人&#xff0c;到最后一张照片中阳光下慈祥微笑的老者&#xff0c;看到的仿佛不是乔布斯的照片&#xff0c;而是自己的一位人生挚友。…

BREW 计费模式概览

计费模式也就是收入模型是商业模式的基础。BDS分发系统中不但提供了与运营商计费系统的接口&#xff0c;而且直接提供了BREW 计费服务。 BREW分发系统与运营商计费系统的集成&#xff0c;一般就是与运营商的综合营帐系统的集成&#xff0c;需要融合于网元层&#xff0c;资源层&…

程序员崩溃了,年终奖怎么说黄就黄

作者 | 胡巍巍转载自程序人生&#xff08;ID:coder_life&#xff09;往年王者荣耀年终奖200个月100万&#xff08;虽然辟谣是假的&#xff09;、华为年终奖24个月100万&#xff0c;都让我等平民羡煞不已。还有在BAT发生的&#xff08;朋友圈&#xff09;真人真事↓这是年终奖的…

改变IT世界的11大Apache开源技术

据国外媒体报道&#xff0c;转眼之间&#xff0c;Apache软件基金会已经成立10年之久了&#xff0c;11月份&#xff0c;Apache基金会的成员将会为其举行一次大型的庆祝。虽然Apache软件基金会是一个开源的组织&#xff0c;但是Apache却创造了对现代互联网来说很重要的技术。下面…

nginx常用技术

作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调优)欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.首发时间: 2008-11-25 更新时间:2009-1-14目 录一、 Nginx 基础知识二、 Nginx 安装及调试三、 Ngi…

2011到过的地方

火车上读《南方周末》&#xff0c;看到记者把自己2011去过的地方在地图上标记&#xff0c;带着标记的世界地图&#xff0c;显得特别而好看&#xff0c;于是很想自己也做一份。找了一些网站&#xff0c;做的图片&#xff0c;差强人意吧。2011到过的地方&#xff1a;这个图不算漂…

2亿简历遭泄漏,到底谁的锅?

作者 | 仲培艺转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;前面刚有 AWS 开战 MongoDB&#xff0c;双方“隔空互呛”&#xff0c;这厢又曝出 2 亿简历信息泄露——MongoDB 的这场开年似乎“充实”得过分了些。长期以来&#xff0c;作为“最受欢迎的 NoSQL 数据库…

Could not apply the stored configuration for monitors 解决办法

Could not apply the stored configuration for monitors 解决办法&#xff1a; $ sudo rm -rf ~/.config/monitors.xml 重启电脑即可 本文转自linux博客51CTO博客&#xff0c;原文链接http://blog.51cto.com/yangzhiming/1225802如需转载请自行联系原作者 yangzhimingg

20行Python代码给微信头像戴帽子

作者 | Leauky&#xff0c;北理工硕士在读&#xff0c;非CS专业的Python爱好者。朋友圈里微信官方要求戴圣诞帽的活动曾经火爆一时&#xff0c;有些会玩的小伙伴都悄咪咪地用美图秀秀一类的 app 给自己头像 p 一顶&#xff0c;然后可高兴地表示“哎呀好神奇hhhh”&#xff0c;呆…

2012关于钱的Tips

对于目前的我来说&#xff0c;死工资是唯一的财富积累手段&#xff0c;而且工资本身还不足够满足所有的物质和精神需求。以此为前提&#xff0c;对钱的来龙去脉有一个了解、把控是极其有必要的。 2011钱的规划基本为零&#xff0c;一年下来惊恐的发现&#xff0c;似乎自己没攒多…

在 Azure 中管理 Windows 虚拟机的可用性

了解如何设置和管理多个虚拟机&#xff0c;以确保 Azure 中 Windows 应用程序的高可用性。 也可以管理 Linux 虚拟机的可用性。 Note Azure 具有用于创建和处理资源的两个不同的部署模型&#xff1a;Resource Manager 和经典。 这篇文章介绍了如何使用这两种模型&#xff0c;但…

[日记]一个人去散步

森林里面的寂静会让每一个人都有所进步。 ——罗伯特M波西格 《禅与摩托车维修艺术》 北陵公园下午5点之后免收门票&#xff0c;我就在这个时间去那里散步。 说起来&#xff0c;我家离北陵西门走路才10几分钟的路程&#xff0c;可是我…

2019年人工智能行业又进入冬天了吗?

【AI科技大本营导语】过去几年&#xff0c;以深度学习为代表的人工智能技术取得了前所未有的高速发展&#xff0c;公司高薪聘请相关领域研究人员&#xff0c;组建人工智能研究团队&#xff0c;相信人工智能带来的巨大商业价值。然而&#xff0c;从近一年的发展态势来讲&#xf…

Vue.js slots: 为什么你需要它们?

也许你已经看过了Vue.js slots的文档。我对这个功能从“为什么你可能需要它”到“没有它我怎么可能工作”的态度转变非常快。虽然文档已经解释了它的概念&#xff0c;但是这里有一个关于slots怎么改进应用程序代码库的真实例子。在我看来&#xff0c;slots是vue最有用和最有趣的…

apache httpd server安装的一个问题

问题&#xff11;&#xff1a; 启动bin/apachectl start的时候&#xff1a; 发现报错&#xff1a;httpd: bad user name daemon 解决方法&#xff1a; groupadd daemon useradd -g daemon daemon 若没有配置合适PATH常量&#xff0c;则可以找 /usr/sbin/groupadd&#xff0c…

telnet 如何退出

ctrl]&#xff0c;然后再输入q就可以退出了。转载于:https://www.cnblogs.com/rethink/archive/2009/10/29/1591898.html

TensorFlow 2.0新特性解读,Keras API成核心

来源 | Google TensorFlow 团队2018 年 11 月&#xff0c;TensorFlow 迎来了它的 3 岁生日&#xff0c;我们回顾了几年来它增加的功能&#xff0c;进而对另一个重要里程碑 TensorFlow 2.0 感到兴奋 &#xff01;TensorFlow 2.0 将专注于 简单性 和 易用性&#xff0c;具有以下更…

列选主元guass消去法

200701020110 07计算机 王再#include <iostream.h>#include <iomanip.h>#include <stdlib.h>void main(){ int flag1;input(); //输入方程 while(flag){ print_menu(); //打印主菜单}void print_menu(){ system("cls");cout<…

Mac 下 IDEA 启动慢的问题

转自&#xff1a; http://blog.csdn.net/KingBoyWorld/article/details/73440717 从控制台来看&#xff0c;每次都会连接本地地址(127.0.0.1)&#xff0c;问题可能就出在这里。 修改本地/etc/hosts文件&#xff0c;添加以下内容: 127.0.0.1 localhost <hostname&g…

研发投入超876亿的华为,将如何进击云+AI?

人工智能作为下一轮科技革命的关键元素&#xff0c;正在进入越来越多的行业&#xff0c;用 AI 的技术和理念去解决现在和未来的问题&#xff0c;将是企业构建竞争力的关键。在去年 10 月召开的华为全联接大会上&#xff0c;华为轮值董事长徐直军详细阐述了华为的 AI 战略&#…

Bash脚本: 根据关键字做替换

根据某个文件的关键字做替换 #!/bin/bashkvawk -F "" { if(NF2) print $1""$2 } ./zuanshi_servic_test.propertiesfor kv in ${kv[]};dokecho $kv | awk -F "" {print $1}vecho $kv | awk -F "" {print $2} | awk -F "\r" …

Git学习系列之一些常用的Git命令收录更新ing

不多说&#xff0c;直接上干货&#xff01; 前言 对于Git工具&#xff0c;有必要整理和总结一些常用实用的命令。 http://p.primeton.com/articles/53cce3a3e138236138000026 https://www.zhihu.com/question/22932048 http://blog.csdn.net/w410589502/article/details/536063…

普通域账号客户端计算无关机选项

组策略-》计算机配置-》安全设置-》本地策略-》用户权限分配-》关闭系统把DOMIAN USERS 组加进去我是在Default Domain Policy 里面加的转载于:https://blog.51cto.com/zhangjunjie/219613

罗永浩“咬定”微信不放松

作者 | 胡巍巍来源 | CSDN&#xff08;CSDNnews&#xff09;昨天&#xff0c;1月15日&#xff0c;听起来是很普通的一天。但是&#xff0c;历史上的这一天——公元8年1月15日&#xff0c;是王莽建立新朝、西汉结束的日子。2011年后的这一天&#xff0c;有一个八岁的国民社交软件…

Windows Ruby使用Mysql环境配置

windows下Ruby使用mysql时候报错&#xff1a; Incorrect MySQL client library version! This gem was compile d for 6.0.0 but the client library is 5.1.45 经过查找找到了解决方案&#xff1a; 1. 下载mysql-connector-c-noinstall-6.0.2-win32.zip http://dev.mysql.c…

Node.js与Sails~方法拦截器policies

policies sails的方法拦截器类似于.net mvc里的Filter&#xff0c;即它可以作用在controller的action上&#xff0c;在服务器响应指定action之前&#xff0c;对这个action进行拦截&#xff0c;先执行policies的策略&#xff0c;当条件通过&#xff0c;会next()它&#xff0c;继…

MySQL性能与磁盘读写的关系及优化策略

作者&#xff1a;kider出处&#xff1a;MySQLpub.com转贴请表明作者和出处并不能用于商业目的。这些天&#xff0c;对一个场地服务器慢的情况&#xff0c;进行了监控跟踪&#xff0c;也得出一些好的结论。现在记录一些过程&#xff0c;列出可以供参考的部分&#xff0c;同时有一…

今晚8点直播 | 详解微软小冰全双工语音对话技术

微软小冰第六代发布会上正式宣布上线全新的共感模型&#xff0c;同时也开始公测一种融合了文本、全双工语音与实时视觉的新感官。这项新技术可以实时预测人类即将说出的内容&#xff0c;实时生成回应&#xff0c;并控制对话节奏&#xff0c;从而使长程语音交互成为可能。而采用…