读书人

Fatal error in MPI_Gather: Other MP

发布时间: 2012-10-19 16:53:36 作者: rapoo

Fatal error in MPI_Gather: Other MPI error,的一个解决方法
Fatal error in MPI_Gather: Other MPI error, error stack:
MPI_Gather(761)...................: MPI_Gather(sbuf=0x7fffe81491f0, scount=8192, MPI_DOUBLE, rbuf=0x2ba3422b1010, rcount=8192, MPI_DOUBLE, root=0, MPI_COMM_WORLD) failed
MPIR_Gather(276)..................:
MPIC_Send(41).....................:
MPIC_Wait(513)....................:
MPIDI_CH3I_Progress(150)..........:
MPID_nem_mpich2_blocking_recv(948):
MPID_nem_tcp_connpoll(1720).......:
state_commrdy_handler(1556).......:
MPID_nem_tcp_recv_handler(1446)...: socket closed

网上一搜,很多这个错误。而且每个都是在大规模和大数据的情况下出现的。我也遇到了,经过一个礼拜的艰苦搏斗,得出了结论。

在linux下对程序运行的堆栈大小都有限制。而且,貌似机群下 ulimit并不准确(centos)。通过在我的程序里调整数据存放位置,可以得出结论:

MPI_Comm类函数都是会在栈中申请一块内存(malloc),将数据复制到这块内存中,进行后续操作。这样可以保证数据安全,不用上锁。但当整个数据很大 的情况下,会出现内存申请不到的情况,这时intel的mpi会出现上述errlog。

解决的办法有二:1、使用bsend,手动申请内存;2、将堆中数据转移一部分到栈中。

读书人网 >其他相关

热点推荐