【问题标题】:mpi_finalize hang due to pending message, can I finish program without calling mpi_finalizempi_finalize 由于未决消息而挂起,我可以在不调用 mpi_finalize 的情况下完成程序吗
【发布时间】:2014-01-03 22:33:37
【问题描述】:

我有一个很长的 FORTRAN+MPI 代码挂在 mpi_finalize() 步骤。这可能是由于待处理的消息。即使我“ctrl-c”中止了挂起的程序,我也可以获得预期的输出。

这里的问题是:我可以从我的代码中删除 mpi_finalize(),会有任何潜在的问题吗?似乎通过删除 mpi_finalize() 输出没有什么不同,并且程序可以退出而不会出错。

我使用的编译器是“ifort version 13.1.1”。

谢谢。

-开

【问题讨论】:

  • 在大多数 MPI 实现中,即使存在一个进程而不调用 MPI_FINALIZE,整个 MPI 作业都会中止。
  • 尝试在MPI_Finalize(); 之前添加MPI_Barrier();printf("rank %d\n",rank);:这将告诉您谁在等待。留下未决消息意味着未来的潜在麻烦......
  • @francis 我将 MPI_Barrier() 放在 MPI_Finalize() 之前,并打印通过该障碍的行列。事实证明,所有等级都可以成功执行 MPI_Barrier()。但在那之后,程序卡在了 MPI_Finalize() 中。
  • @HristoIliev 我可以这么说,如果在 MPI_Finalize() 之前有 MPI_Barrier(),并且在所有 proc 到达障碍之前已经保存了计算输出,我应该从我的程序中得到“正确”的答案, MPI_Finalize() 是否可以执行?
  • 如果工作崩溃被认为是正确答案的一部分 - 那么是的。否则,您应该在并行调试器中运行您的程序,并查看在调用 MPI_FINALIZE 时是否有任何挂起的操作。从未等待的被遗忘的MPI_ISENDMPI_IRECV 是此类操作的主要候选对象。

标签: fortran mpi


【解决方案1】:

您很可能正在使用非阻塞发送和接收超出范围的数组中的写入,该数组收集 MPI_Waital 函数中使用的信息。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2012-04-29
    • 2023-04-08
    • 2012-06-13
    • 2015-08-07
    • 1970-01-01
    • 2015-12-28
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多