gpt4 book ai didi

c++ - OpenMPI 通信问题

转载 作者:行者123 更新时间:2023-11-30 04:17:59 26 4
gpt4 key购买 nike

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

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

  1. 如果我从 P2 注释掉 MPI_Barrier,一切正常。
  2. 如果我从 P1 注释掉 MPI_Send/Recv,一切正常。
  3. 如果 P2 中的 MPI_Barrier 和 P1 中的 MPI_Send/Recv 都没有注释,程序就会崩溃。

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

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

有办法吗?

最佳答案

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

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

关于c++ - OpenMPI 通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com