【发布时间】:2011-05-26 20:21:18
【问题描述】:
我正在使用 MPI,并且在某些时候想要使用 STOP(或其他方法)来退出程序并显示错误消息。
现在,我正在做这样的事情:
STOP 'Error'
但我感觉我做错了什么。我需要先调用 MPI_FINALIZE 吗?还有其他事情要做吗?
【问题讨论】:
我正在使用 MPI,并且在某些时候想要使用 STOP(或其他方法)来退出程序并显示错误消息。
现在,我正在做这样的事情:
STOP 'Error'
但我感觉我做错了什么。我需要先调用 MPI_FINALIZE 吗?还有其他事情要做吗?
【问题讨论】:
在灾难性错误情况下,通常的退出方式是call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)。在大多数实现中,这将终止所有任务。在不太激烈的情况下,您可以确保所有任务都知道条件,然后使用MPI_Finalize 让它们更优雅地兴奋。
【讨论】:
看看MPI_Abort:
MPI_ABORT 的行为 (通讯,错误代码),对于 MPI_COMM_WORLD 以外的通讯, 是依赖于实现的。另一方面,呼吁 MPI_ABORT(MPI_COMM_WORLD, errorcode) 应该总是导致所有 MPI_COMM_WORLD 组中的进程要中止。
【讨论】:
在 NERSC 超级计算机上对此进行测试,我发现
call MPI_FINALIZE(ierr)
stop
无法停止整个程序。以下作品:
call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)
stop
【讨论】:
MPI_Finalize() 是一种集体操作。这就是为什么接受的答案建议它,但只有在被 all 任务调用才能完成时。 MPI_Abort() 是您所需要的(例如,stop 语句是不必要的)如果您希望一项任务应该中止整个 MPI 作业。