最近一直在忙程序的搬家问题,其实说起来不能再简单了:就是把在公司调好的一个MPI程序搬到gz的大系统上去跑,本以为没啥问题的一个步骤实现起来却各种问题,既遇到编译的问题(第一篇博客中提到的)并解决之后,程序的运行也出现了错误。错误信息为“fatal error in MPI: other MPI error”,而且死掉的进程都是发送进程,这让我百思不解。
然后我怀疑了各种问题尝试了各种方式:首先,使用gdb调试,但问题在于由于需要修改-O3的优化选项才能调试MPI程序,这导致了程序跑的奇慢……,等得受不了了;然后,我就只好回归了最原始的输出调试,但我又惊奇的发现,本应该输出的信息没有输出或者没有按顺序输出,实在是混淆视听
,问了贵鑫才知道是因为缓冲区可能不满,所以利用flush解决了问题(语法为:cout<<"输出的内容"<<……<<flush);在输出信息的帮助下,我逐渐将出错的位置锁定在了用MPI_Send发送大文件的一条语句上,因为我发现,发送其他的信息比如文件名,文件大小等小的信息都可以正常接收,但发送文件时就出错,我怀疑可能是buffer大小的问题。因为文件名等信息的buffer设置为100个字节,而发送的文件比较大,采用循环发送的方式