【问题标题】:Correct way to STOP with MPI使用 MPI 停止的正确方法
【发布时间】:2011-05-26 20:21:18
【问题描述】:

我正在使用 MPI,并且在某些时候想要使用 STOP(或其他方法)来退出程序并显示错误消息。

现在,我正在做这样的事情:

STOP 'Error'

但我感觉我做错了什么。我需要先调用 MPI_FINALIZE 吗?还有其他事情要做吗?

【问题讨论】:

    标签: fortran mpi


    【解决方案1】:

    在灾难性错误情况下,通常的退出方式是call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)。在大多数实现中,这将终止所有任务。在不太激烈的情况下,您可以确保所有任务都知道条件,然后使用MPI_Finalize 让它们更优雅地兴奋。

    【讨论】:

    • 让所有进程都知道非全局条件需要一个集体,例如广播,但其他进程如何知道开始它?除非你想开始修补非阻塞障碍之类的东西。
    【解决方案2】:

    看看MPI_Abort

    MPI_ABORT 的行为 (通讯,错误代码),对于 MPI_COMM_WORLD 以外的通讯, 是依赖于实现的。另一方面,呼吁 MPI_ABORT(MPI_COMM_WORLD, errorcode) 应该总是导致所有 MPI_COMM_WORLD 组中的进程要中止

    【讨论】:

      【解决方案3】:

      在 NERSC 超级计算机上对此进行测试,我发现

      call MPI_FINALIZE(ierr)
      stop
      

      无法停止整个程序。以下作品:

       call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)
       stop
      

      【讨论】:

      • 我希望我提到的第一种方法应该有效,但事实证明并非如此。在我看来,接受的答案表明第一种方法应该有效。此外,接受的答案没有提供有关如何停止 MPI 程序的明确步骤,我提供了这些。
      • MPI_Finalize() 是一种集体操作。这就是为什么接受的答案建议它,但只有在被 all 任务调用才能完成时。 MPI_Abort() 是您所需要的(例如,stop 语句是不必要的)如果您希望一项任务应该中止整个 MPI 作业。
      猜你喜欢
      • 2010-09-26
      • 2023-03-28
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      相关资源
      最近更新 更多