用gdb调试mpi程序的一些心得
Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下。下面总结了一些最近在用MPI和c语言写程序时的调试经验(Ubuntu环境,c语言, mpich 1.2.7)。
需要注意的几个小问题
在编译程序的时候 –g 是一定要加的,不然在gdb调试的时候可能会报类似“source is not available”的错误。开始我调程序的时候我都把我的程序的每个调试版本,分别发送到集群中的每台机器上面,然后在mpirun –machinefile host –np 3 myprogram 运行我的程序,这种方法没有效率,只能在最后记录实验结果的时候或者最后调试阶段才能用。有效率的方式是 mpirun –np 3 myprogram 在本机直接运行程序,这样mpi就会在本机开3个myprogram的进程,这样不接网线都可以方便的调试mpi的程序。这是几个小问题,下面切入关键部分。
用gdb来调试mpi的程序
首先,本文所用的mpich版本为1.2.7,可能跟其他版本有一定的差异,RTFM,看看自己所用版本的使用手册来解决版本上的差异。
Mpi程序运行的时候都是通过mpirun 后接参数和你的程序,gdb也是类似的过程,所以你不可以直接 gdb mpirun –np 3 myprogram,但你可以直接mpirun –gdb –np 3 myprogram。这样你就可以再gdb中调试你的程序了。
不过,这样有个问题,你可以调试在主节点运行的部分,也就是相对于集群而言,你本机所运行的部分