MPICH2 中 MPI_Isend的问题
小弟最近刚学并行程序开发,原来程序在MPICH1 下运行的很好,后来实验室新建了4核的集群网,并安装了MPICH2 1.04,把程序copy过来,重新编译过后,运行,发现是不是出错,跟踪了一下,发现出错的是几个Mpi_Isend/Mpi_Recv 的语句,我把出错的地方贴上来:
for ( i = 0; i< pmesh->partid; i++) {
...
COM_IwritenDbl(dbuf, size, compid, type);//封装了的MPI_Isend
Free(sizeof(double)*size, dbuf);
}
for ( i = (pmesh->partid)+1 ; i< pmesh->n_part; i++) {
...
COM_ReadDbl(dbuf, size, &compid , &type);//封装了的MPI_Recv
Free(sizeof(double)*size, dbuf);
}
在4核集群网上运行时,偶尔出现的错误提示是:Fatal error in MPI_Isend: Internal MPI error!, error stack
(但在单核集群网上明明一点问题都没有哦)
我把这里的非阻塞通信改称阻塞通信后,可以顺利执行,但是程序结果有点奇怪,跟在单核上执行的结果不一样,市国很多次,都不一样,奇怪...
请教各位,MPICH2 默认为nemesis方式通信,是不是根这个有关呢?