首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMPI通信问题

OpenMPI通信问题
EN

Stack Overflow用户
提问于 2013-05-25 19:02:08
回答 1查看 203关注 0票数 1

这几天以来,我一直在努力解决这个问题。我有一个混合的OpenMPI +多线程程序。这意味着程序在多台机器上运行,因此每台机器都运行一组p线程。

为了简化这个问题,让我们假设有3台机器,每台机器都运行两个线程: P1和P2。现在,每台机器上的P1都使用MPI_Send/Recv与其他机器上的P1通信。同时,P2做了一些工作,并定期调用MPI_Barrier (以便与其他机器上的P2同步)。这会使MPI_Send/Recv方法失败,程序崩溃时会出现随机错误,例如:对等/坏文件描述符/ tcp错误/等等的连接重置。

  1. 如果我将MPI_Barrier从P2中剔除,一切都会很好。
  2. 如果我注释掉P1中的MPI_Send/Recv,一切都很好。
  3. 如果MPI_Barrier中的P2和P1中的MPI_Send/Recv都没有注释,那么程序就会崩溃。

因此,我能想到的唯一原因是MPI_Barrier和MPI_Send/Recv在底层通信级别上相互影响。

但是,我确实需要P1中的通信(如MPI_Send/Recv)和P2中的同步(如MPI_Barrier)来维护语义正确性。我同时需要它们(这意味着我不想在到达同步点之前暂停通信,然后从它离开的地方继续通信)。

有办法这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 19:25:24

您所得到的错误主要是一个错误初始化的MPI (就好像您在多线程应用程序中调用了MPI_Init而不是MPI_Init_thread )。见http://www.mpi-forum.org/docs/mpi-20-html/node165.htm

如果问题仍然存在,我还建议您至少在MPI_Barrier()调用时使用单独的MPI通信器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16752950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档