MPICH2 中 MPI_Isend的问题

tsinghal 2009-11-13 12:32:40
加精
小弟最近刚学并行程序开发,原来程序在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方式通信,是不是根这个有关呢?
...全文
621 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
InceptionNet 2011-04-25
  • 打赏
  • 举报
回复
我也遇到了这个问题,用非阻塞通信只能迭代到32735就出现tsinghal说的问题,不知为什么?求解答,愿QQ交流,QQ190961506
tsinghal 2009-11-26
  • 打赏
  • 举报
回复
感觉MPICH2使用了nemesis后,容错性差了许多,经常有莫名其妙的错误。
lccurry 2009-11-17
  • 打赏
  • 举报
回复
ding
fengboxjtu556 2009-11-16
  • 打赏
  • 举报
回复
把free注释掉,再测试一下
xieiyanghui 2009-11-16
  • 打赏
  • 举报
回复
路过 帮顶~
hmz5967925 2009-11-16
  • 打赏
  • 举报
回复
ukthgesrgerger大方的随风而舞任何个人个人
tsinghal 2009-11-15
  • 打赏
  • 举报
回复
感觉问题是不是在这里:
COM_IwritenDbl(dbuf, size, compid, type);//封装了的MPI_Isend
Free(sizeof(double)*size, dbuf);
非阻塞的话,还没有完成的时候不能放掉缓冲区,这里提前放了,单核心的时候,每个节点的执行速度都差不多,侥幸没有出问题。
tsinghal 2009-11-15
  • 打赏
  • 举报
回复
不好意思,上面的描述有点错了,在2个集群上(单核集群、4核集群)执行的结果是一样地的,只是4核集群一定要修改前面的Mpi_Isend/Mpi_Recv, 改成 Mpi_Send/Mpi_Recv 后,就没问题了,原因还没想通。
w6388883 2009-11-15
  • 打赏
  • 举报
回复
haoaoaooaao
Bruce54 2009-11-14
  • 打赏
  • 举报
回复
jquery基础教程
wagnerliuay 2009-11-14
  • 打赏
  • 举报
回复
等高手回答!
new_universe 2009-11-13
  • 打赏
  • 举报
回复
顶!!!!!
xpchardaway 2009-11-13
  • 打赏
  • 举报
回复
高手地带。。。帮顶。。。
连问题都看不懂的路过。。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧